AWS-CDK 资源

AWS-CDK Resources

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

创建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,
    });