You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS CloudFormation资源能否对自身调用!GetAtt解决S3清单配置循环依赖

问题解决方法

报错原因

!GetAtt S3Bucket.Arn 是S3桶资源创建完成后才能返回的运行时属性,将其放在S3桶自身的Properties配置中时,CloudFormation会判定为循环依赖:创建桶需要先获取该ARN值,而获取ARN值又需要桶完成创建。

解决方案

手动拼接桶ARN即可规避循环依赖,S3桶的ARN格式固定,可通过!Sub和!Ref组合在模板编译阶段直接生成ARN,无需调用!GetAtt:

S3Bucket:
  Type: AWS::S3::Bucket
  Properties:
    # ...other properties...
    InventoryConfigurations:
    - Id: runs
      Enabled: true
      Destination:
        BucketAccountId: !Ref AWS::AccountId
        # 替换原!GetAtt行,手动拼接ARN
        BucketArn: !Sub arn:${AWS::Partition}:s3:::${S3Bucket}
        Format: CSV
        Prefix: inventory/runs/
      IncludedObjectVersions: Current
      OptionalFields: [ETag, Size, BucketKeyStatus]
      Prefix: runs/
      ScheduleFrequency: Daily

额外注意事项

你需要额外配置桶策略,授权S3清单服务写入清单文件的权限,否则清单会生成失败,参考配置如下:

S3BucketPolicy:
  Type: AWS::S3::BucketPolicy
  Properties:
    Bucket: !Ref S3Bucket
    PolicyDocument:
      Version: "2012-10-17"
      Statement:
        - Sid: AllowS3InventoryWrite
          Effect: Allow
          Principal:
            Service: s3.amazonaws.com
          Action: s3:PutObject
          Resource: !Sub arn:${AWS::Partition}:s3:::${S3Bucket}/inventory/runs/*
          Condition:
            StringEquals:
              s3:x-amz-acl: bucket-owner-full-control

内容的提问来源于stack exchange,提问作者Rabadash8820

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 04:45:03