Aws lambda AWS:帮助在Codepipeline中设置CodeDeploy

Aws lambda AWS:帮助在Codepipeline中设置CodeDeploy,aws-lambda,aws-codepipeline,aws-codebuild,aws-code-deploy-appspec,Aws Lambda,Aws Codepipeline,Aws Codebuild,Aws Code Deploy Appspec,看起来不可能让Codedeploy在带有CodeBuild的CodePipeline项目中工作 首先,我设置了一个包含三个阶段的管道:源、构建和部署,前两个阶段工作得很好,但第三个阶段(CodeDeploy)抛出了以下错误: CodeBuild将输出工件推送到.zip文件中的s3,这是CodeDeploy不支持的 为此,我尝试在CodeBuild和CodeDeploy之间设置一个Lambda函数,如下所示:(Source->CodeBuild->Invoke Lambda->CodeDeplo

看起来不可能让Codedeploy在带有CodeBuild的CodePipeline项目中工作

首先,我设置了一个包含三个阶段的管道:源、构建和部署,前两个阶段工作得很好,但第三个阶段(CodeDeploy)抛出了以下错误:

CodeBuild将输出工件推送到.zip文件中的s3,这是CodeDeploy不支持的

为此,我尝试在CodeBuild和CodeDeploy之间设置一个Lambda函数,如下所示:(Source->CodeBuild->Invoke Lambda->CodeDeploy),Lambda函数将appspec.yml文件上传到s3并调用putJobSuccessResult,但仍然得到相同的错误。

BundleType必须是YAML或JSON 目前还不支持使用CodePipeline(以CodeDeploy作为部署提供程序)部署Lambda,这是一个已知的限制

这是因为CodePipeline将始终压缩捆绑包/工件,而CodeDeploy需要一个YAML/JSON文件作为Lambda函数部署的源(appspec.YAML文件)

为了克服此限制,您有两种选择:

  • 在代码构建阶段内运行AWS CLI命令以更新/部署lambda函数
  • 使用CodeBuild打包lambda函数代码,并将工件推送到CloudFormation阶段,该阶段将更新或创建lambda函数资源。您应该发现[1]中的参考文档对于获取有关打包SAM应用程序的必要信息非常有用
  • 参考:


    [1] SAM打包-

    我使用AWS Lambda作为CodeBuild和CodeDeploy之间的一个阶段,Lambda不压缩输出工件,只将一个文件上载到s3,即.yaml,我仍然收到相同的错误。我注意到您的appspec文件名为'appspec.yml',而CodeDeploy Lambda部署需要'appspec.yaml'-我尝试了所有这些名称“appspec.yml”,“appspec.yml”,“appspec.yaml”和“appspec.yaml”,但都没有起作用,我看起来不支持在管道中同时使用codebuild和codedeploy。对不起,这与文件名无关,这是我最初回答中提到的zip问题。“目前还不支持使用CodePipeline部署Lambda,并将CodeDeploy作为部署提供程序。”6个月后,仍然没有解决方案。。。这个答案中的第一个选项值得一试。