AWS-CDK资源

时间:2020-07-15 04:55:34

标签: amazon-web-services aws-cdk

使用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阶段之前发挥资源的作用。

1 个答案:

答案 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,
    });