Cloudformation 模板:Cloudfront 域名 WebsiteURL returns 错误

Cloudformation template: Cloudfront DomainName WebsiteURL returns Error

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

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

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

所以到目前为止一切都正确。只有一个 Origin 域没有被正确使用。返回的是 Amazon S3 bucket 原始域名,而不是 Amazon S3 bucket configured as a website。这导致对域的请求无法正确加载。

然后我在cloudfront中手动输入了Amazon S3 bucket configured as a website源域名。 正常工作后,我想在模板中更改它,所以我调整了它:

...
"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

我用一点技巧解决了它

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

如果有人找到更好的方法,请告诉我。现在,这有效。

Resource

不要搞得太复杂

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