无服务器:创建 S3Bucket 和 BucketPolicy [未解决的资源依赖性]
Serverless: Creating S3Bucket and BucketPolicy [Unresolved resource dependencies]
我正在尝试在同一个 serverless.yml
中创建一个 S3 Bucket
和一个相应的 Resource Policy
,以便两者都建立在新的堆栈结构上。
但是,我 运行 在构建时遇到错误:
Unresolved resource dependencies [CUSTOM-BUCKETNAME] in the Resources block of the template
有什么方法可以同步创建策略,等待存储桶先被创建?我在我的 yml
的 resources
部分进行设置
resources:
Resources:
Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: CUSTOM-BUCKETNAME
BucketPolicy:
Type: AWS::S3::BucketPolicy
Properties:
Bucket:
Ref: CUSTOM-BUCKETNAME
PolicyDocument:
Statement:
- Principal:
Service: "ses.amazonaws.com"
Action:
- s3:PutObject
Effect: Allow
Sid: "AllowSESPuts"
Resource:
Fn::Join: ['', ['arn:aws:s3:::', Ref: "CUSTOM-BUCKETNAME", '/*'] ]
以上是我的 yml 配置的一小段。
使用 DependsOn 后,我仍然遇到同样的错误。值得注意的是,资源依赖指的是存储桶的动态名称(CUSTOM-BUCKETNAME)。
resources:
Resources:
Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: CUSTOM-BUCKETNAME
BucketPolicy:
Type: AWS::S3::BucketPolicy
DependsOn: Bucket
Properties:
Bucket:
Ref: CUSTOM-BUCKETNAME
PolicyDocument:
Statement:
- Principal:
Service: "ses.amazonaws.com"
Action:
- s3:PutObject
Effect: Allow
Sid: "AllowSESPuts"
Resource:
Fn::Join: ['', ['arn:aws:s3:::', Ref: "CUSTOM-BUCKETNAME", '/*'] ]
CUSTOM-BUCKETNAME 从未在 yml 本身中明确硬编码,它是使用模板文字动态生成的名称。
CloudFormation DependsOn
属性应该可以解决您的问题。
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-dependson.html
您的保单出现问题,因为您的存储桶是:BucketName: CUSTOM-BUCKETNAME
不是引用参数。这意味着您在使用 Bucket: Ref: CUSTOM-BUCKETNAME
.
时没有在策略声明中引用实际资源
改为更改存储桶名称以引用相同的参数 BucketName: Ref: CUSTOM-BUCKETNAME
或更改策略以引用资源:Bucket: Ref: Bucket
我正在尝试在同一个 serverless.yml
中创建一个 S3 Bucket
和一个相应的 Resource Policy
,以便两者都建立在新的堆栈结构上。
但是,我 运行 在构建时遇到错误:
Unresolved resource dependencies [CUSTOM-BUCKETNAME] in the Resources block of the template
有什么方法可以同步创建策略,等待存储桶先被创建?我在我的 yml
的resources
部分进行设置
resources:
Resources:
Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: CUSTOM-BUCKETNAME
BucketPolicy:
Type: AWS::S3::BucketPolicy
Properties:
Bucket:
Ref: CUSTOM-BUCKETNAME
PolicyDocument:
Statement:
- Principal:
Service: "ses.amazonaws.com"
Action:
- s3:PutObject
Effect: Allow
Sid: "AllowSESPuts"
Resource:
Fn::Join: ['', ['arn:aws:s3:::', Ref: "CUSTOM-BUCKETNAME", '/*'] ]
以上是我的 yml 配置的一小段。
使用 DependsOn 后,我仍然遇到同样的错误。值得注意的是,资源依赖指的是存储桶的动态名称(CUSTOM-BUCKETNAME)。
resources:
Resources:
Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: CUSTOM-BUCKETNAME
BucketPolicy:
Type: AWS::S3::BucketPolicy
DependsOn: Bucket
Properties:
Bucket:
Ref: CUSTOM-BUCKETNAME
PolicyDocument:
Statement:
- Principal:
Service: "ses.amazonaws.com"
Action:
- s3:PutObject
Effect: Allow
Sid: "AllowSESPuts"
Resource:
Fn::Join: ['', ['arn:aws:s3:::', Ref: "CUSTOM-BUCKETNAME", '/*'] ]
CUSTOM-BUCKETNAME 从未在 yml 本身中明确硬编码,它是使用模板文字动态生成的名称。
CloudFormation DependsOn
属性应该可以解决您的问题。
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-dependson.html
您的保单出现问题,因为您的存储桶是:BucketName: CUSTOM-BUCKETNAME
不是引用参数。这意味着您在使用 Bucket: Ref: CUSTOM-BUCKETNAME
.
改为更改存储桶名称以引用相同的参数 BucketName: Ref: CUSTOM-BUCKETNAME
或更改策略以引用资源:Bucket: Ref: Bucket