首页 > 解决方案 > Cloudformation 模板:Cloudfront DomainName WebsiteURL 返回错误

问题描述

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

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

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

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

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

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

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

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

我的 S3 配置如下所示:

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

编辑: 原始域名文档

标签: amazon-web-servicesamazon-s3amazon-cloudformationamazon-cloudfront

解决方案


我用一点技巧解决了它

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

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

资源


推荐阅读