我们有一个 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/