我有一个简单/小型项目,为了避免多个存储桶使我的堆栈混乱,我想使用单个存储桶并在子文件夹中包含不同的内容,例如使用不同的缓存行为或从子文件夹提供单页应用程序,并从另一个文件夹提供用户生成的内容。
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)
因此,作为解决方法的解决方法,我结束了设置不同的存储桶和不同的文件夹,但这看起来很愚蠢。
您可以创建一个 S3 访问点,使用其资源策略来限制对存储桶内所需文件夹集的访问,然后将 CloudFront 分配指向该访问点。
我知道这是一个迟到的答案,但你的出身名称必须是唯一的。创建两个源,均具有相同的区域域名但路径不同。 以下是使用 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
不同;两个源都指向同一个存储桶并使用相同的源访问控制(或源访问身份,如果这是您的偏好。)