如何将生命周期策略添加到 AWS CDK Typescript 中的现有 S3 存储桶

Posted

技术标签:

【中文标题】如何将生命周期策略添加到 AWS CDK Typescript 中的现有 S3 存储桶【英文标题】:How to add a lifecycle policy to an existing S3 bucket in AWS CDK Typescript 【发布时间】:2021-06-14 05:32:53 【问题描述】:

我已经使用下面导入了一个 S3 存储桶

const importbucket = s3.Bucket.fromBucketAttributes(this, 'ImportedBucket', 
  bucketArn: 'arn:aws:s3:::BUCKETNAME'
);

现在我正在尝试添加生命周期规则,

如果存储桶是在堆栈中创建的,我知道我们有 2 个选项,如下所示

选项 1:

const nitinbucket = new s3.Bucket(this, 'bucket', 
  bucketName: 'sdasbktjsdhfksajdkdjlkas',
  removalPolicy: RemovalPolicy.DESTROY,
  versioned: false, 
);

nitinbucket.addLifecycleRule(
  abortIncompleteMultipartUploadAfter: Duration.days(7),
  enabled: true,
  expiration: Duration.days(75),
  id: 'rule',
);

选项 2:

const myBucket = new s3.Bucket(this, 'BuckyMcBucketface', 
  lifecycleRules: [
      
          transitions: [
              
                  storageClass: s3.StorageClass.INFREQUENT_ACCESS,
                  transitionAfter: cdk.Duration.days(30),
              ,
          ],
      ,
  ],
);

我想要的是导入一个现有的存储桶并将转换规则添加到存储桶(类似于选项2)

谢谢!

【问题讨论】:

【参考方案1】:

life cycle configuration 是创建 S3 存储桶的同一 cloudformation 资源的一部分。除非我们使用custom resource,否则不支持对在 cloudformation/CDK 之外手动创建的资源进行更改。

以下是我们可以在不使用自定义资源的情况下执行的一些步骤。

使用与当前 S3 存储桶相同的配置创建仅包含 1 个资源的空 cdk 项目创建 s3 存储桶(不导入现有存储桶)。 cdk synth 并生成云形成模板。 使用记录在 here 的 cloudformation 导入过程和示例 Here 用于 DynamoDB。

【讨论】:

我尝试导入手动创建并使用 CF 创建的存储桶。在这两种情况下,我都没有看到添加导入 s3 生命周期策略的选项。在我的要求中,我所有的 S3 存储桶都是仅使用 CF 模板创建的。我会尝试您的解决方案,并会尽快为您更新。 你关注 cloudformation import process ? 我正在关注,现在我们决定使用简单的 awscli cmd 来更新现有 s3 存储桶的生命周期策略,输入将是文本文件,其中包含 s3 存储桶列表,后跟前缀分隔符是空格。给我大概3-4天。如果我能做到这一点,我会更新。 我正在关注此medium.com/@visya/…,但在导入时出现错误 创建此更改集时出错 您在模板中修改了未导入的资源 [CDKMetadata]。导入操作期间无法执行更新、创建或删除操作。 您是否使用 cdk --no-version-reporting deploy 生成堆栈,我会这样做,因为它会生成没有元数据的 cloudformation。

以上是关于如何将生命周期策略添加到 AWS CDK Typescript 中的现有 S3 存储桶的主要内容,如果未能解决你的问题,请参考以下文章

在将 aws cdk 与 appsync 一起使用时,如何将突变添加到 graphql 架构并防止部署失败?

如何使用 AWS CDK 将域别名添加到现有 CloudFront 分配

AWS Typescript CDK,尝试将 kinesis 流作为来源添加到 firehose

如何将 VPC 和安全组分配给 AWS CDK 中的 Lambda?

AWS CDK - 如何将 Access Key Secret 和 Secret Key Id 作为 Env Param 传递给容器

将入站规则添加到安全组 aws cdk