如何将 AWS CDK 堆栈部署到多个账户?

How to deploy AWS CDK stacks to multiple accounts?

AWS CDK 堆栈以基于环境的账户或区域为目标,详细信息here。这是将一个堆栈部署到多个目标帐户的应用示例:

const envEU  = { account: '2383838383', region: 'eu-west-1' };
const envUSA = { account: '8373873873', region: 'us-west-2' };

new MyFirstStack(app, 'first-stack-eu', { env: envEU });
new MyFirstStack(app, 'first-stack-us', { env: envUSA });

我的问题是如何部署这 2 个堆栈 - 是否可以将它们部署为单个操作?如果是,使用什么凭据以及 2 个帐户需要什么角色?

理想情况下,我希望能够执行一个命令来跨所有帐户部署所有堆栈:

cdk deploy ...

或者只能通过 2 个步骤进行部署?

cdk deploy first-stack-eu --profile=profile_for_account_2383838383
cdk deploy first-stack-us --profile=profile_for_account_8373873873

在 cloudformation 中,您可以使用 Stack Sets 进行多账户和多区域部署。

但是,根据 GitHub 问题,CDK 尚不支持此功能:

如果您的应用程序中有多个堆栈,您必须将每个堆栈传递到 cdk 部署命令中,例如cdk deploy WmStackRouteCertStack004BE231 WmStackUploadStackF8C20A98

我不知道在应用程序中部署所有堆栈的方法,我不喜欢这种行为,这也是我尽量避免创建多个堆栈的原因

我最终使用 cdk-assume-role-credential-plugin 来执行任务。该插件的描述指出:

This plugin allows the CDK CLI to automatically obtain AWS credentials from a stack's target AWS account. This means that you can run a single command (i.e. cdk synth) with a set of AWS credentials, and the CLI will determine the target AWS account for each stack and automatically obtain temporary credentials for the target AWS account by assuming a role in the account.

我在这里写了一篇关于如何使用此插件使用 CDK 执行 AWS 跨账户部署的详细教程:https://johntipper.org/aws-cdk-cross-account-deployments-with-cdk-pipelines-and-cdk-assume-role-credential-plugin/