当它们在AWS CodePipeline中工作时,CodeDeploy和AWS Lambda出现问题。这是我的设置:
问题
步骤1.和2.可以正常工作,但是在CodeDeploy上,出现以下错误:
Action execution failed BundleType must be either YAML or JSON
如果我解压缩CodeBuild生成的工件,则所有文件都就位。
如果尝试从CodeDeploy手动部署到AWS Lambda,则会收到另一条消息...
Deployment Failed The deployment failed because either the target Lambda function FUNCTION_NAME does not exist or the specified function version or alias cannot be found
关于哪个错误消息有效,或者它们是否相同但具有不同的错误消息,这非常困惑。
设置
该功能的ARN为:
arn:aws:lambda:us-east-1:239748505547:function:email_submition
别名的ARN为:
arn:aws:lambda:us-east-1:239748505547:function:email_submition:default
而且我的
appspec.yml
文件具有以下内容version: 0.0
Resources:
- email_submition:
Type: AWS::Lambda::Function
Properties:
Name: "email_submition"
Alias: "default"
CurrentVersion: "1"
TargetVersion: "2"
该项目的文件夹结构为:
.gitignore
appspec.yml
buildspec.yml
index.js
README.md
问题
我在此配置中缺少什么?
最佳答案
因此,实际上这应该是评论而不是答案。我现在还没有50名代表,所以在这里。
我和你有同样的问题。我不确定您是否找到了解决方案。我能够使用以下appspec.yml成功执行部署:
version: 0.0
Resources:
- mylambdafunction:
Type: AWS::Lambda::Function
Properties:
Name: "mylambdafunction"
Alias: "staging"
CurrentVersion: "2"
TargetVersion: "3"
在CodeDeploy工作之前,当前版本和目标版本都必须存在。当然,我已经通过手动部署进行了测试。
我认为这里需要的是实际上可以更新代码并创建新版本的东西。我本以为CodeDeploy会这样做。
编辑:进一步的研究产生了我尚未意识到的有关CodePipeline的信息。
对于here,它看起来像要通过管道运行,您需要自己的buildspec,appspec和cft。管道失败的原因是因为您需要为lambda函数包括一个CloudFormation模板,这是部署实际代码的地方。 appspec.yml可以将流量从旧版本迁移到新版本,但是cft负责部署新代码。
Edit2:这个example app让我不知所措。
使用CodeBuild可以构建您的应用程序,还可以生成CFT以进行实际部署。这意味着您将使用lambda资源构建CFT。
这会将appspec完全从资源中删除,而是使用CFT定义Lambda函数。这是SAM文档的link。
关于amazon-web-services - CodeDeploy找不到我的AWS Lambda函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48488126/