无服务器:创建 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