CodePipeline无法找到SAM模板yaml文件

时间:2017-05-06 03:16:04

标签: amazon-web-services amazon-cloudformation aws-codepipeline

我尝试使用部署到Lambda的Cloudformation SAM堆栈设置AWS Codepipeline,并通过Pipeline控制台执行此操作。管道从Codecommit进程传递克隆,而使用Codebuild的构建过程在使用Cloudformation进行部署时失败。

我收到以下错误消息:

Action execution failed Invalid TemplatePath: MyAppBuild::samTemplate.yml

我已经非常密切地关注文档(http://docs.aws.amazon.com/lambda/latest/dg/automating-deployment.html)并且在codepipeline设置表单(模板文件)的字段16中,我一直在使用samTemplate.yml。

我的repo根目录中也有samTemplate.yml(也是项目的根目录。)

我已将Codebuild输出工件名称与Cloudformation输入工件名称匹配,并且它们完全匹配。

我在这里遗漏了什么吗?如何让Cloudformation部署过程识别sam模板?

编辑1 我已切换到使用Codestar而不是直接使用CodePipeline。我的buildspec.yml没有什么特别之处,但如果有兴趣的话,它就在下面。

version: 0.2

phases:
  install:
    commands:
      - echo "install"
  pre_build:
    commands:
      - echo "pre_build"
  build:
    commands:
      - aws cloudformation package --template template.yml --s3-bucket $S3_BUCKET --output-template template-export.json
artifacts:
  type: zip
  files:
    - template-export.json

对于任何刚接触CodeBuild的人来说,要记住的一件事是,作为结果创建的zip文件是构建操作的根级目录,而IS文件是转移到最终部署的zip文件(在我的情况下,拉姆达)。

3 个答案:

答案 0 :(得分:3)

您需要在buildspec.yml中添加aws cloudformation package命令。

 aws cloudformation package --debug --template-file <YourSamTemplate.yml> --s3-bucket <YourbucketName> --output-template-file <YourOutputSamTemplate.yml>

其中YourSamTemplate.yml是项目根目录中samTemplate.yml的名称。 和YourOutputSamTemplate.yml是在云形成包命令完成后你想要输出文件的新名称。

然后在下一个阶段,您需要将输入工件定义为aws codebuild阶段的输出,然后使用此输入工件来映射模板。

build-output::YourOutputSamTemplate.yml

答案 1 :(得分:2)

我相信构建阶段的输出是需要传递到CloudFormation操作的内容。

在教程中,构建输出称为NewSamTemplate.yaml

因此,请尝试将TemplatePath更新为MyAppBuild::NewSamTemplate.yml

答案 2 :(得分:0)

就我而言,错误出在文件名中。实际文件不是template.yml,而是template.yaml