我在 CloufFormation 模板中定义 S3 存储桶:
Resources:
Bucket:
Type: AWS::S3::Bucket
Properties:
AccessControl: Private
BucketName: !Ref BucketName
我想要可选向存储桶添加保留策略,因此:
Resources:
Bucket:
Type: AWS::S3::Bucket
Properties:
AccessControl: Private
BucketName: !Ref BucketName
LifecycleConfiguration:
Rules:
- ExpirationInDays: !Ref RetentionDays
我不需要在 CF 模板的所有部署上使用 LifecycleConfiguration/ExpirationInDays,因为某些存储桶将无限期地保留其对象。我有looked at the documentation ,并且似乎没有无限期保留/不过期的值。 我考虑过拥有两个存储桶 - 一个带有 LifecycleConfiguration,一个没有,然后我可以使用一个条件(例如,如果 RetentionDays 参数 = -1)来确定创建哪个存储桶:
Conditions:
HasNoRetention: !Equals [!Ref RetentionDays, -1]
HasRetention: !Not [Condition: HasNoRetention]
Resources:
Bucket:
Type: AWS::S3::Bucket
Condition: HasNoRetention
Properties:
AccessControl: Private
BucketName: !Ref BucketName
BucketWithRetention:
Type: AWS::S3::Bucket
Condition: HasRetention
Properties:
AccessControl: Private
BucketName: !Ref BucketName
LifecycleConfiguration:
Rules:
- ExpirationInDays: !Ref RetentionDays
这里的问题是存储桶在 YAML 定义中具有不同的名称(“Bucket”和“BucketWithRetention”) - 因此稍后很难在其他资源中引用正确的存储桶,因为您必须这样做确定创建了哪个存储桶。
最佳答案
我能够将 LifecycleConfiguration 设置为有条件的。它对我来说是这样的:
LifecycleConfiguration:
Fn::If:
- HasRetention
- Rules:
- ExpirationInDays: !Ref RetentionDays
Status: Enabled
- Ref: AWS::NoValue
关于amazon-web-services - 有没有办法有条件地将过期策略添加到 cloudformation 中的 S3 存储桶,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62692857/