使用具有管道自动化功能的CDK,使用给定的模板文件创建资源



[![codecommit containing cloudformation template][1]][1]我有一个需求,我需要创建管道,该管道负责将模板yaml文件作为输入并相应地创建资源。

我采用的方法是在代码构建阶段提供模板yaml文件的路径,命令如下:"aws cloudformation deploy-模板文件D:/ppipeline/aws-waf.yml-栈名waf deployml;

export class PipelineStack extends Stack {
constructor(app: App, id: string, props: PipelineStackProps) {
super(app, id, props);
const code = codecommit.Repository.fromRepositoryName(this, 'ImportedRepo',
props.repoName);
const cdkBuild = new codebuild.PipelineProject(this, 'CdkBuild', {
buildSpec: codebuild.BuildSpec.fromObject({
version: '0.2',
phases: {
install: {
commands: 'npm install',
},
build: {
commands: [
'npm run build',
'npm run cdk synth -- -o dist',
'aws cloudformation deploy --template-file D:/pipeline/aws-waf.yml --stack-name waf-deployment',
'echo $?'
],
},
},
artifacts: {
'base-directory': 'dist',
files: [
'LambdaStack.template.json',
],
},
}),
environment: {
buildImage: codebuild.LinuxBuildImage.AMAZON_LINUX_2_3,
},
});
const sourceOutput = new codepipeline.Artifact();
const cdkBuildOutput = new codepipeline.Artifact('CdkBuildOutput');
//const lambdaBuildOutput = new codepipeline.Artifact('LambdaBuildOutput');
new codepipeline.Pipeline(this, 'Pipeline', {
stages: [
{
stageName: 'Source',
actions: [
new codepipeline_actions.CodeCommitSourceAction({
actionName: 'CodeCommit_Source',
repository: code,
output: sourceOutput,
}),
],
},
{
stageName: 'Build',
actions: [
new codepipeline_actions.CodeBuildAction({
actionName: 'CDK_Build',
project: cdkBuild,
input: sourceOutput,
outputs: [cdkBuildOutput],
}),
],
},
],
});
}
}
```[![enter image description here][2]][2]

[1]: https://i.stack.imgur.com/u7rRe.jpg
[2]: https://i.stack.imgur.com/xzk6v.png

我不完全确定你到底在寻找什么,所以也许可以考虑更新你的问题,使其更具体。然而,我回答了这个问题,因为您正在寻找在代码管道中给定文件的情况下部署云信息/cdk的正确方法?

我们通过代码管道处理云信息部署的方式是利用代码构建和代码部署。管道从存储库中获取文件/更改(可选,可以使用许多其他触发器(,然后codebuild使用aws-cli将文件上传到s3,一旦该文件上传到s3,就可以使用codedeploy从s3中的源文件部署云信息。

因此,对于您上面的示例,我将更新构建以将新工件上传到s3,然后在您的管道中创建一个新步骤,使用codedeploy来部署s3模板。

构建一个脚本/codebuild命令来执行cloudformation部署也是完全可能的,但由于codedeploy已经支持跟踪更改、错误处理等,我建议对cloudformation进行部署。

注:如果您不使用现有的cloudformation模板(json/yaml(,而是使用cdk,那么在上传到s3之前,您需要将cdk合成为cloudformation模版。

最新更新