CDK 中 Code Pipeline 的跨账户访问
Cross Account access for Code Pipeline in CDK
我正在尝试使用 CDK 和 CodePipeline 设置跨帐户部署管道。
我从 AWS 文档构建了示例 CodePipeline 示例,并且能够使用 cdk 成功部署到单个帐户中。
(https://docs.aws.amazon.com/cdk/latest/guide/codepipeline_example.html)
$ cdk deploy PipelineDeployingLambdaStack --profile=111111111111
这returns成功了。
然后使用 cdk-codepipeline-actions 文档中的跨账户说明,我将 account
属性添加到我的部署操作中。
(https://docs.aws.amazon.com/cdk/api/latest/docs/aws-codepipeline-actions-readme.html#cross-account-actions)
{
stageName: 'Deploy',
actions: [
new codepipeline_actions.CloudFormationCreateUpdateStackAction({
account: '222222222222', // introduce cross-account deployment
......
}),
],
},
经过此更改并再次 运行ning cdk synth
后,它会按预期生成一个名为 cross-account-support-stack-222222222222.template.json
的新堆栈。
到目前为止一切顺利。
当我尝试 运行 cdk deploy
虽然它立即抛出跨帐户引用错误:
$ cdk deploy PipelineDeployingLambdaStack --profile=111111111111
Including dependency stacks: cross-account-support-stack-222222222222
cross-account-support-stack-222222222222 (PipelineDeployingLambdaStack-support-222222222222)
cross-account-support-stack-222222222222 (PipelineDeployingLambdaStack-support-222222222222): deploying...
❌ cross-account-support-stack-222222222222 (PipelineDeployingLambdaStack-support-222222222222) failed: Error: Need to perform AWS calls for account 222222222222, but the current credentials are for 111111111111.
我不明白这是怎么回事,因为我一次只能提供一组凭据。我找不到任何关于它的文档,这让我认为它应该是显而易见的。
我错过了什么?
关键在输出的那一行:
Including dependency stacks: cross-account-support-stack-222222222222
您可以在部署支持堆栈时使用-e
/ --exclusively
命令行开关,然后是主CodePipeline堆栈,您可以使用--profile
选项进行切换这些不同 cdk deploy
调用的凭据。
只是添加到@adam-ruka 的回答(因为解决方案最初对我来说并不清楚),这就是你如何从主堆栈中分离支持堆栈的部署:
# deploy cross-account support stack
cdk deploy cross-account-support-stack-222222222222 --profile=222222222222 -e
# deploy main stack
cdk deploy PipelineDeployingLambdaStack --profile=111111111111 -e
需要注意的重要事项(这让我感到困惑并增加了我的困惑)是您的堆栈环境是否正在使用 CDK CLI 环境变量隐式配置,例如
new PipelineDeployingLambdaStack (app, 'pipeline', {
env: {
account: process.env.CDK_DEFAULT_ACCOUNT,
region: process.env.CDK_DEFAULT_REGION
}});
然后设置支持堆栈的命令将无法找到错误的堆栈:
No stacks match the name(s) cross-account-support-stack-222222222222
这是因为 CDK_DEFAULT_ACCOUNT
变成了 222222222222
而不是 111111111111
。这里的解决方案是设置堆栈 the environment can be explicitly defined:
new PipelineDeployingLambdaStack (app, 'pipeline', {
env: {
account: process.env.CDK_DEPLOY_ACCOUNT || process.env.CDK_DEFAULT_ACCOUNT,
region: process.env.CDK_DEPLOY_REGION || process.env.CDK_DEFAULT_REGION
}});
然后在CLI上传入账号:
CDK_DEPLOY_ACCOUNT=111111111111 cdk deploy cross-account-support-stack-222222222222 --profile=222222222222 -e
我正在尝试使用 CDK 和 CodePipeline 设置跨帐户部署管道。
我从 AWS 文档构建了示例 CodePipeline 示例,并且能够使用 cdk 成功部署到单个帐户中。 (https://docs.aws.amazon.com/cdk/latest/guide/codepipeline_example.html)
$ cdk deploy PipelineDeployingLambdaStack --profile=111111111111
这returns成功了。
然后使用 cdk-codepipeline-actions 文档中的跨账户说明,我将 account
属性添加到我的部署操作中。
(https://docs.aws.amazon.com/cdk/api/latest/docs/aws-codepipeline-actions-readme.html#cross-account-actions)
{
stageName: 'Deploy',
actions: [
new codepipeline_actions.CloudFormationCreateUpdateStackAction({
account: '222222222222', // introduce cross-account deployment
......
}),
],
},
经过此更改并再次 运行ning cdk synth
后,它会按预期生成一个名为 cross-account-support-stack-222222222222.template.json
的新堆栈。
到目前为止一切顺利。
当我尝试 运行 cdk deploy
虽然它立即抛出跨帐户引用错误:
$ cdk deploy PipelineDeployingLambdaStack --profile=111111111111
Including dependency stacks: cross-account-support-stack-222222222222
cross-account-support-stack-222222222222 (PipelineDeployingLambdaStack-support-222222222222)
cross-account-support-stack-222222222222 (PipelineDeployingLambdaStack-support-222222222222): deploying...
❌ cross-account-support-stack-222222222222 (PipelineDeployingLambdaStack-support-222222222222) failed: Error: Need to perform AWS calls for account 222222222222, but the current credentials are for 111111111111.
我不明白这是怎么回事,因为我一次只能提供一组凭据。我找不到任何关于它的文档,这让我认为它应该是显而易见的。
我错过了什么?
关键在输出的那一行:
Including dependency stacks: cross-account-support-stack-222222222222
您可以在部署支持堆栈时使用-e
/ --exclusively
命令行开关,然后是主CodePipeline堆栈,您可以使用--profile
选项进行切换这些不同 cdk deploy
调用的凭据。
只是添加到@adam-ruka 的回答(因为解决方案最初对我来说并不清楚),这就是你如何从主堆栈中分离支持堆栈的部署:
# deploy cross-account support stack
cdk deploy cross-account-support-stack-222222222222 --profile=222222222222 -e
# deploy main stack
cdk deploy PipelineDeployingLambdaStack --profile=111111111111 -e
需要注意的重要事项(这让我感到困惑并增加了我的困惑)是您的堆栈环境是否正在使用 CDK CLI 环境变量隐式配置,例如
new PipelineDeployingLambdaStack (app, 'pipeline', {
env: {
account: process.env.CDK_DEFAULT_ACCOUNT,
region: process.env.CDK_DEFAULT_REGION
}});
然后设置支持堆栈的命令将无法找到错误的堆栈:
No stacks match the name(s) cross-account-support-stack-222222222222
这是因为 CDK_DEFAULT_ACCOUNT
变成了 222222222222
而不是 111111111111
。这里的解决方案是设置堆栈 the environment can be explicitly defined:
new PipelineDeployingLambdaStack (app, 'pipeline', {
env: {
account: process.env.CDK_DEPLOY_ACCOUNT || process.env.CDK_DEFAULT_ACCOUNT,
region: process.env.CDK_DEPLOY_REGION || process.env.CDK_DEFAULT_REGION
}});
然后在CLI上传入账号:
CDK_DEPLOY_ACCOUNT=111111111111 cdk deploy cross-account-support-stack-222222222222 --profile=222222222222 -e