AWS - 使用两个云前端到同一个 S3 存储桶?

问题描述 投票:0回答:2

是否可以拥有一个具有两个引用同一 S3 存储桶上不同文件夹的源的 Cloudfront 发行版?

我有一个简单/小型项目,为了避免多个存储桶使我的堆栈混乱,我想使用单个存储桶并在子文件夹中包含不同的内容,例如使用不同的缓存行为或从子文件夹提供单页应用程序,并从另一个文件夹提供用户生成的内容。

但似乎我不能多次使用相同的资源 id 作为源 id:

Resource handler returned message: "Invalid request provided: AWS::CloudFront::Distribution: The parameter origin ID must be unique. (Service: CloudFront, Status Code: 400, Request ID: c0309ded-d a7c-41cf-9efa-3a850856 d075)" (RequestToken: be62d662-15ea-d3d4-1a76-8780f4dda3bb, HandlerErrorCode: InvalidRequest)

此外

作为一种快速解决方法,我使用了第二个存储桶,但这次我收到了有关具有相同路径的不同来源的错误:

Resource handler returned message: "Invalid request provided: AWS::CloudFront::Distribution: The parameter path pattern must be unique. (Service: CloudFront, Status Code: 400, Request ID: b028a107-1 4be-4f74-a976-f8ecfb58 410e)" (RequestToken: cfa0df4d-5bf6-aceb-7f95-32995ed1d9ea, HandlerErrorCode: InvalidRequest)

因此,作为解决方法的解决方法,我结束了设置不同的存储桶和不同的文件夹,但这看起来很愚蠢。

amazon-web-services amazon-s3 amazon-cloudfront
2个回答
0
投票

您可以创建一个 S3 访问点,使用其资源策略来限制对存储桶内所需文件夹集的访问,然后将 CloudFront 分配指向该访问点。


0
投票

我知道这是一个迟到的答案,但你的出身名称必须是唯一的。创建两个源,均具有相同的区域域名但路径不同。 以下是使用 Terraform 云开发套件 (CDKTF) 的 Javascript 示例:

const distribution = new CloudfrontDistribution(this, 'example', {
  // ...
  origin: [{
    domainName: bucket.bucketRegionalDomainName,
    originAccessControlId,
    originId: 'first',
    originPath: `/path1`,
  }, {
    domainName: bucket.bucketRegionalDomainName,
    originAccessControlId,
    originId: 'second',
    originPath: '/path2',
  }],
  // ...
};

请注意,只有

originId
originPath
不同;两个源都指向同一个存储桶并使用相同的源访问控制(或源访问身份,如果这是您的偏好。)

© www.soinside.com 2019 - 2024. All rights reserved.