【问题标题】:Cloudformation template: Cloudfront DomainName WebsiteURL returns ErrorCloudformation 模板:Cloudfront DomainName WebsiteURL 返回错误
【发布时间】:2022-02-23 18:39:09
【问题描述】:

我为 S3 静态站点部署创建了 Cloudformation 模板。

必须在云端部分指定域名。首先,我创建了这样的模板并进行了尝试:

...
"DomainName": {
  "Fn::GetAtt": [
    "S3BucketRoot",
    "DomainName"
  ]
},
...

所以到目前为止一切都正确。只有一个 Origin 域未正确获取。返回的是 Amazon S3 bucket 源域名,而不是 Amazon S3 bucket configured as a website。这会导致对域的请求无法正确加载。

然后我在云端手动输入Amazon S3 bucket configured as a website Origin 域名。 在此工作正常后,我想在模板中对其进行更改,因此我对其进行了调整:

...
"DomainName": {
  "Fn::GetAtt": [
    "S3BucketRoot",
    "WebsiteURL"
  ]
},
...

更新堆栈时,我现在收到错误,即域名中不能有冒号。这来自http://...

所以我现在的问题是,我如何才能获得正确的域名或如何从 WebsiteURL 中删除 http://

我的 S3 配置如下所示:

"S3BucketRoot": {
      "Type": "AWS::S3::Bucket",
      "DeletionPolicy": "Delete",
      "Properties": {
        "AccessControl": "PublicRead",
        "BucketName": {
          "Fn::Sub": "${AWS::StackName}-root"
        },
        "WebsiteConfiguration": {
          "ErrorDocument": "404.html",
          "IndexDocument": "index.html"
        }
      }
    },

编辑: Origin Domain Name Documentation

【问题讨论】:

    标签: amazon-web-services amazon-s3 amazon-cloudformation amazon-cloudfront


    【解决方案1】:

    我用小技巧解决了这个问题

    ...
    "DomainName": {
      "Fn::Select": [
        "1",
        {
          "Fn::Split": [
            "http://",
            {
              "Fn::GetAtt": [
                "S3BucketRoot",
                "WebsiteURL"
              ]
            }
          ]
        }
      ]
    },
    ...
    

    如果有人找到更好的方法,请告诉我。目前,这可行。

    Resource

    【讨论】:

      【解决方案2】:

      别搞得太复杂了

      !Sub ${S3BucketRoot}.s3-website-${AWS::Region}.amazonaws.com
      

      【讨论】:

        猜你喜欢
        • 2018-08-28
        • 2014-12-12
        • 2017-08-13
        • 2016-12-03
        • 2018-06-03
        • 2016-07-11
        • 2020-10-27
        • 2018-06-03
        • 1970-01-01
        相关资源
        最近更新 更多