如何解决使用带有管道自动化的 CDK 使用给定的模板文件创建资源
[![codecommit contains cloudformation template][1]][1]我有一个需求,我需要创建管道,负责将模板 yaml 文件作为输入并相应地创建资源。
我采用的方法是在代码构建阶段提供模板 yaml 文件的路径,命令如下: "aws cloudformation deploy --template-file D:/pipeline/aws-waf.yml --stack-name waf-deployment"
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?
我们通过 codepipeline 处理 cloudformation 部署的方式是利用 codebuild 和 codedeploy。管道从存储库中获取文件/更改(可选,可以使用许多其他触发器),然后 codebuild 使用 aws cli 将文件上传到 s3,一旦该文件上传到 s3,您就可以使用 codedeploy 从源部署 cloudformation s3 中的文件。
因此,对于上面的示例,我将更新构建以将新工件上传到 s3,然后在您的管道中创建一个新步骤以使用 codedeploy 部署该 s3 模板。
完全可以构建一个脚本/代码构建命令来执行 cloudformation 部署,但由于 codedeploy 已经支持跟踪该更改、错误处理等,我建议使用 codedeploy 进行 cloudformation 部署。
注意: 如果您没有使用现有的 cloudformation 模板 (json/yaml) 而是使用 cdk,您需要在上传到 s3 之前将您的 cdk 合成为一个 cloudformation 模板。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。