我正在将我们的基础设施代码从 Terraform 转移到 AWS cdk。我正在尝试找到一种最佳方式来管理具有多个要部署的堆栈的多个环境。如果我遵循文档中的建议,我将不得不为多个环境定义多个堆栈,这可能会让人感到困惑。例如
const app = new cdk.App();
new DevStack1(app, 'dev-stack-1', settings.dev)
new DevStack2(app, 'dev-stack-2', settings.dev)
.
.
new ProdStack1(app, 'prod-stack-1', settings.prod)
new ProdStack2(app, 'prod-stack-2', settings.prod)
.
.
Run Code Online (Sandbox Code Playgroud)
在相同环境中的不同堆栈之间共享设置。然后我必须一个接一个地部署每个堆栈。有没有更好的方法来做到这一点?
我想使用 AWS 机密管理器来管理我的 CDK 堆栈的所有机密。由于我将管理数百个秘密,我想创建一个 CDK 堆栈,允许我在不同的环境中创建这些秘密(并管理它们)。
一些秘密值需要是一组无法自动生成的特定值。
据我所知,我无法使用 CDK 创建具有预定值的此类机密。所以我的问题是:如何以编程方式而不是手动创建这些秘密?在不同环境中手动创建相同的一组秘密而不搞乱的负担太大了。
编辑:明确地说,我理解 CDK 不允许指定的原因SecretString,AWS::SecretsManager::Secret因为它可能有泄露机密的风险。我绝对想过用随机生成的值创建秘密,然后手动替换这些值,但对于像我这样有多个环境和数百个秘密需要管理的人来说,即使这样也很费力。必须有更好的方法来做到这一点。
我有一个在不同堆栈中定义/管理的存储桶。该存储桶由 KMS 中管理的密钥加密。在我自己的堆栈中,我尝试创建一个角色,并分别授予该角色对存储桶和密钥的读取和解密权限。
我按如下方式引用存储桶和密钥:
const otherBucket = Bucket.fromBucketName(this, 'otherBucket', '<BucketName>');
const otherKeyArn = otherBucket.encryptionKey?.keyArn || '';
Run Code Online (Sandbox Code Playgroud)
我使用密钥 arn 为我的角色创建策略语句,并且它始终返回为 ''。我在堆栈中创建了另一个存储桶,当我尝试访问该存储桶的加密密钥时,我得到了该存储桶的正确密钥 arn。
fromBucketName导致此问题的方法是否存在错误?我目前必须将键的字符串 arn 作为硬编码值存储在我的常量文件中,有更好的方法吗?