使用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阶段之前发挥资源的作用。
答案 0 :(得分:0)
创建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,
});