amazon-web-services - CodePipeline 的 Cloudformation 模板

标签 amazon-web-services aws-cloudformation aws-cdk

我们有一个 AWS 设置,其中有一个测试帐户和一个生产帐户。 我们的代码提交(java lambda)位于我们的测试帐户中,我们希望使用 CodePipeline 将代码从此处部署到我们的测试帐户和生产帐户。

我想知道是否有人知道任何可以执行此工作的现成的 cloudformation(或 cdk)模板?

谢谢 达米安

最佳答案

几天前我已经使用 CDK 实现了这一点,其想法是在目标环境上创建一个 IAM 角色,并在运行代码构建(作为代码管道的一部分运行)时承担此角色。

就我而言,由于代码构建创建了 CDK 堆栈,因此我为该角色提供了 AdministratorAccess 策略。

稍后,创建新的 codebuild 并将权限附加到 codebuild 项目角色。

    // create the codebuild project used by the codepipeline
    const codeBuildProject = new codebuild.PipelineProject(scope, `${props.environment}-${props.pipelineNamePrefix}-codebuild`, {
      projectName: `${props.environment}-${props.pipelineNamePrefix}`,
      buildSpec: codebuild.BuildSpec.fromSourceFilename('buildspec.yml'),
      environment: {
        buildImage: codebuild.LinuxBuildImage.AMAZON_LINUX_2,
        privileged: true,
        environmentVariables: buildEnvVariables,
        computeType: props.computeType
      },
    })

    // attach permissions to codebuild project role
    codeBuildProject.addToRolePolicy(new PolicyStatement({
      effect: Effect.ALLOW,
      resources: [props.deploymentRoleArn],
      actions: ['sts:AssumeRole']
    }));

请注意,props.deploymentRoleArn 是您在目标环境中创建的角色的 ARN。

然后,创建一个新管道并将 codeBuildProject 添加到 codepipelineActions.CodeBuildAction 作为 project:

// create codepipeline to deploy cdk changes
    const codePipeline = new codepipeline.Pipeline(scope, `${props.environment}-${props.pipelineNamePrefix}-codepipeline`, {
      restartExecutionOnUpdate: false,
      pipelineName: `${props.environment}-${props.pipelineNamePrefix}`,
      stages: [
        {
          stageName: 'Source',
          actions: [
            new codepipelineActions.GitHubSourceAction({
              branch: props.targetBranch,
              oauthToken: gitHubToken,
              owner: props.githubRepositoryOwner,
              repo: props.githubRepositoryName,
              actionName: 'get-sources',
              output: pipelineSourceArtifact,
            })]
        },
        {
          stageName: 'Deploy',
          actions: [
            new codepipelineActions.CodeBuildAction({
              actionName: 'deploy-cdk',
              input: pipelineSourceArtifact,
              type: codepipelineActions.CodeBuildActionType.BUILD,
              project: codeBuildProject
            }),
          ]
        }
      ]
    });

上面代码片段的相关部分是Deploy阶段。仅当您想从github获取源代码时才需要另一个阶段 - 更多信息here .

这是完整的解决方案,如果您想实现其他功能,请阅读有关代码管道操作的更多信息 here .

关于amazon-web-services - CodePipeline 的 Cloudformation 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60059486/

相关文章:

amazon-web-services - 在 AWS CodeDeploy 中使用蓝/绿部署时,我们如何维护自动扩展组的状态?

cloud-init - cloudformation 似乎没有在 UserData 中运行(或创建)脚本

aws-cdk - 解析为未定义的 CDK 方面和 token

python - 在 Amazon Linux 2 上安装 AWS CDK

aws-cloudformation - 如何从 Lambda 函数连接到 serverless.yml 中 "Resources"下定义的 RDS?

amazon-web-services - 当 CDK 定义时,是否可以在本地运行 AWS Step Functions?

amazon-web-services - Spring Boot 和 AWS RDS 只读副本

amazon-web-services - EC2 Ubuntu 实例 - 未 protected 私钥文件

amazon-web-services - 手动设置 AWS Glue ETL 书签

amazon-web-services - AWS 上的 SSL 应用程序负载均衡器,无需自定义域