如何在 cloudformation yaml 中配置路由规则?

Posted

技术标签:

【中文标题】如何在 cloudformation yaml 中配置路由规则?【英文标题】:How do I configure the routing rules in a cloudformation yaml? 【发布时间】:2017-08-14 16:51:27 【问题描述】:

我正在尝试使用使用 cloudformation 的无服务器 yaml 为我的静态 s3 存储桶网站配置此网站路由规则。

<RoutingRules>
  <RoutingRule>
    <Condition>
      <KeyPrefixEquals/>
      <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
    </Condition>
    <Redirect>
      <Protocol>https</Protocol>
      <HostName>foo.amazonaws.com</HostName>
      <ReplaceKeyPrefixWith>prod/photos/resize?key=</ReplaceKeyPrefixWith>
      <HttpRedirectCode>307</HttpRedirectCode>
    </Redirect>
  </RoutingRule>
</RoutingRules>

如何将其翻译成下面的 yaml?

resources:
  Resources:
    UploadBucket:
      Type: AWS::S3::Bucket
      Properties:
        BucketName: $file(./serverless.env.yml):$opt:stage.BucketName
        AccessControl: PublicRead
        WebsiteConfiguration:
          IndexDocument: index.html
          RoutingRule: //What's the format that goes here?

【问题讨论】:

【参考方案1】:

RoutingRules 是Amazon S3 Website Configuration Routing Rules Property 的列表。

例如

RoutingRules:
  - RedirectRule:
      HostName: foo.amazonaws.com
      HttpRedirectCode: "307"
      Protocol: https
      ReplaceKeyPrefixWith: prod/photos/resize?key=
    RoutingRuleCondition:
      HttpErrorCodeReturnedEquals: "404"

【讨论】:

应该像 HostName 这样的值在“引号”中,例如“foo.amazonaws.com”而不仅仅是纯文本? 您不是必需的。这个答案更好地解释了它:: ***.com/questions/19109912/…【参考方案2】:

如果有人感兴趣,这里是相同设置的 JSON 表示

"WebsiteConfiguration" : 
 "IndexDocument": "index.html",
 "ErrorDocument": "error.html",
 "RoutingRules": [
   "RedirectRule": 
      "HostName": 
        "foo.amazonaws.com"
      ,
      "HttpRedirectCode": "307",
      "ReplaceKeyPrefixWith": "prod/photos/resize?key="
    ,
    "RoutingRuleCondition": 
      "HttpErrorCodeReturnedEquals": "404"
    
  ]

【讨论】:

以上是关于如何在 cloudformation yaml 中配置路由规则?的主要内容,如果未能解决你的问题,请参考以下文章

如何调试cloudformation模板?策略中的语法错误。 YAML 文件

如何在 AWS CloudFormation YAML 模板中转义策略变量

AWS Cloudformation-如何在 json/yaml 模板中处理字符串大写或小写

如何使用 cloudformation 或 yaml 将保留天数设置为日志流

CloudFormation yaml - 如何强制数字类型?

如何将参数传递给 CloudFormation YAML 中的 Glue 作业?