【问题标题】:Cross Account access for Code Pipeline in CDKCDK中代码管道的跨账户访问
【发布时间】:2020-09-08 06:38:16
【问题描述】:

我正在尝试使用 CDK 和 CodePipeline 设置跨账户部署管道。

我从 AWS Docs 构建了示例 CodePipeline 示例,并且能够使用 cdk 成功部署到单个账户中。 (https://docs.aws.amazon.com/cdk/latest/guide/codepipeline_example.html)

$ cdk deploy PipelineDeployingLambdaStack --profile=111111111111

这样就成功返回了。

然后使用 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
              ......
            }),
          ],
        },

在此更改并再次运行 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.

我不明白这应该如何工作,因为我一次只能提供一组凭据。我找不到任何关于它的文档,这让我认为它应该是显而易见的。

我错过了什么?

【问题讨论】:

    标签: aws-codepipeline aws-cdk


    【解决方案1】:

    关键在你输出的那一行:

    Including dependency stacks: cross-account-support-stack-222222222222
    

    您可以在部署支持堆栈时使用-e / --exclusively 命令行开关,然后是主CodePipeline 堆栈,您可以使用--profile 选项来切换那些不同cdk deploy 的凭据调用。

    【讨论】:

      【解决方案2】:

      只是为了补充@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
      

      【讨论】:

        猜你喜欢
        • 2022-01-20
        • 2022-06-29
        • 1970-01-01
        • 2020-06-18
        • 2021-07-10
        • 2021-12-16
        • 2021-06-21
        • 2020-07-17
        • 1970-01-01
        相关资源
        最近更新 更多