使用自定义源的现有 S3 存储桶的 AWS CDK update/add 生命周期

AWS CDK update/add lifecycle to existing S3 bucket using custom source

我创建了一个 S3 存储桶,但现在我想 update/add 使用 CDK 对其进行生命周期策略。 目前我可以将这个桶导入一个新的堆栈文件。

const testBucket = s3.Bucket.fromBucketAttributes(this, 'TestBucket', {
            bucketArn: 'arn:aws:s3:::xxxxxx'});

如何使用 AwsCustomResource 到 update/add 生命周期策略?例如,对于 prefix = long,我希望这些对象在 7 天后过期,对于 prefix = short,我希望它们在 3 天后过期。

或者是否有使用 CDK 更新新堆栈中现有 S3 存储桶的通用方法?

需要访问testBucket的CfnBucket引用并为其添加生命周期规则。

const testBucket = s3.Bucket.fromBucketAttributes(this, 'TestBucket', {
            bucketArn: 'arn:aws:s3:::xxxxxx')
       testBucket.node.root.addLifecycleRule({prefix: 'short', expiration:3, enabled:true})
       testBucket.node.root.addLifecycleRule({prefix: 'long', expiration:7, enabled:true})

最好的选择可能是使用资源导入将其添加到堆栈中。不要将自定义资源与 CDK 构造混淆。自定义资源涉及部署 lambda 函数并在 CloudFormation 自定义资源出现在您的堆栈中时调用该函数。 CDK 构造用于生成 CloudFormation 模板。它允许您将不同的资源组合到单个代码中,并允许根据输入值做出一些逻辑决策。

导入步骤:

  1. 确保您当前的 CDK 是已部署的。当有其他变化时,您无法导入资源。
  2. 将 S3 存储桶添加到您的 CDK 代码中,就好像您是第一次创建它一样。确保所有设置都与当前部署的设置相同。这很重要,因为导入过程不会验证您配置的内容是否与您正在导入的内容相匹配。
  3. 运行 cdk synth 生成包含 S3 存储桶的 CloudFormation 模板。
  4. 在 CloudFormation 控制台中找到代表您正在使用的 CDK 堆栈的堆栈。
  5. Select Import resources into stack 来自 Stack actions 菜单。
  6. 按照提示操作。当询问模板 select Upload a template file 和 select 时,由 cdk synth 命令创建的模板(提示:它将在 cdk-out 中)。系统将提示您添加存储桶名称。这应该是您要添加到此堆栈的存储桶。
  7. 完成后,您可以修改存储桶,就好像它是由您的堆栈创建的一样。

有一点要注意。 CDK 在 CloudFormation 模板中包含一些元数据。此值必须与当前部署的值相同,否则将被视为更改,您将无法执行导入。您可以从当前部署的内容中复制值,并手动编辑 cdk synth 创建的模板以匹配它。