如何将生命周期策略添加到 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 传递给容器