如何使用 SDK 创建指向 S3(静态托管)网站终端节点的 AWS Cloudfront 分配?

How do you create an AWS Cloudfront Distribution that points to an S3 (static hosted) Website Endpoint using the SDK?

我将 S3 存储桶配置为网站端点以托管静态网页。

我想把Cloudfront放在前面

我从 S3 存储桶的 "Properties" 复制了 "Endpoint" :: "Static Website Hosting."

它的形式是:"example.com.s3-website-us-east-1.amazonaws.com"

当我尝试 create_distribution 使用 Aws SDK CloudFront 客户端时,我收到此错误:

Aws::CloudFront::Errors::InvalidArgument 
The parameter Origin DomainName does not refer to a valid S3 bucket.

示例Ruby代码如下:

cloudfront = Aws::CloudFront::Client.new()
cloudfront.create_distribution({
  distribution_config: {
    ...
    origins: {
      quantity: 1,
      items: [{
        id: "Custom-example.com.s3-website-us-east-1.amazonaws.com",
        domain_name: "example.com.s3-website-us-east-1.amazonaws.com",
        s3_origin_config: {
          origin_access_identity: ""
        },
        origin_path: ""
      }]
    },
    ...
  }

})

我可以通过 GUI 和 CLI

创建具有相同 "Origin Domain Name" 的分发版
aws cloudfront create-distribution \
  --origin-domain-name example.com.s3-website-us-east-1.amazonaws.com \
  --default-root-object index.html

静态托管在 S3 存储桶上的网站端点需要配置为 "Origin Type" "custom_origin"NOT S3_Origin。您可以在 GUI 中的 Distribution "Origins" 选项卡下看到这种情况。

示例Ruby代码:

    distribution_config: {
    ...
      origins: {
        quantity: 1,
        items: [{
          id: "Custom-example.com.s3-website-us-east-1.amazonaws.com",
          domain_name: "example.com.s3-website-us-east-1.amazonaws.com",
          custom_origin_config: {
            http_port: 80, # required
            https_port: 443, # required
            origin_protocol_policy: "http-only", # required, accepts http-only, match-viewer, https-only
          },
        }]
     ...
     }