使用CDK为我的项目创建KMS密钥(以及其他相关资源),并希望确保正确处理资源。
在我的开发阶段,我可能会做一个部署,做一些开发工作,然后发布一个cdk destroy来清理项目,因为我知道我几天内都不会回来了。
如果我没有将代码包装在导入中,我发现正在创建重复的键,或者对于像DynamoDB这样的一些资源,它将失败,因为资源已经存在:
try {
const keyRef = kms.Alias.fromAliasName(this, 'SomeKey', 'SomeKey');
} catch {
const keyRef = new kms.Key(this, 'SomeKey', {
description: 'Some descriptive text',
enableKeyRotation: true,
trustAccountIdentities: true
});
keyRef .grantEncryptDecrypt(lambdaFunc);
}有没有人能建议一个更好的处理方法,或者这是意料之中的?
在开发我的项目时,我不喜欢让资源发挥作用,直到解决方案至少在Alpha阶段。
发布于 2020-07-15 22:00:18
在创建KMS时,您可以定义RemovalPolicy
它的默认值是RETAIN,这意味着KMS密钥将保留在您的帐户中,即使您删除了堆栈。这对于生产环境很有用,在生产环境中,您通常希望保留可能由堆栈外部的资源使用的密钥。
在您的开发环境中,您可以将其设置为DESTROY,它将与您的堆栈一起删除。
您应该在代码中捕获此逻辑。就像这样
const keyRef = new kms.Key(this, 'SomeKey', {
description: 'Some descriptive text',
enableKeyRotation: true,
trustAccountIdentities: true,
// define a method to check if it's a dev environment
// and set removalPolicy accordingly
removalPolicy: isDevEnv() ? cdk.RemovalPolicy.DESTROY : cdk.RemovalPolicy.RETAIN,
});https://stackoverflow.com/questions/62907840
复制相似问题