CodeDeploy找不到我的AWS lambda函数

问题描述 投票:3回答:3

我有一个问题与CodeDeploy和AWS LAMBDA当他们AWS CodePipeline内工作。这是我的设置:

  1. 来源GitHub上
  2. AWS CodeBuild
  3. AWS CodeDeploy

The Issue

步骤1和2。没有问题的工作,但是当涉及到CodeDeploy我得到以下错误:

操作执行失败BundleType必须是YAML或JSON

如果我解压由CodeBuild产生的神器中的所有文件都到位。

如果我尝试手动CodeDeploy部署到AWS LAMBDA然后我得到一个不同的消息...

部署失败部署失败,因为无论是目标lambda函数FUNCTION_NAME不存在,或者指定的函数的版本或别名无法找到

这是非常混乱,这错误信息是有效的,或者如果它们是相同的,但有一个不同的错误信息。

The Setup

该函数的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

Question

那我在这个配置中缺少?

amazon-web-services amazon-s3 aws-lambda aws-code-deploy aws-codepipeline
3个回答
8
投票

因此,其实这应该是一个评论不是答案。我没有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。管道失败的原因是因为你需要包括对拉姆达功能的CloudFormation模板,这是部署的实际代码。该appspec.yml有从旧版本迁移流量到新版本,但CFT是什么呢的新代码的部署。

EDIT2:这个example app让我离开的平方。使用CodeBuild建立自己的应用程序,但也产生你做实际部署CFT。这意味着你与拉姆达资源建立自己的CFT。这从资源完全删除appspec,而是你用CFT来定义lambda函数。这里是一个link的SAM文件。


3
投票

我不能帮你与CodeBuild部分,因为我使用第三方CI解决方案,但也许我可以用剩下的帮助。

我认为这是在AWS文档中的一个错误,因为我从来没有能够得到这个工作的。他们说,调用命令行“AWS部署推”,并给它,而不是为LAMBDA一个zip你appspec.yml文件,但是不管你做什么,你总是会得到错误:

操作执行失败BundleType必须是YAML或JSON

我想这是因为推自动调用“注册的应用程序,修订”它上传后。如果分割成独立的部分这一点,这将工作。

你appspec.yml应该像

version: 0.0 Resources: - YourFunctionName: Type: "AWS::Lambda::Function" Properties: Name: "YourFunctionName" Alias: "YourFunctionNameAlias" CurrentVersion: "CurrentAliasVersionGoesHere" TargetVersion: "NewlyPublishedVersionGoesHere"

您使用的版本应该是当前别名连接到的版本。目标版本应该是你刚发布的新版本(见下文),这部分仍扑朔迷离我有点。我不明白为什么它不能找出当前版本的别名本身指向。

此外,请注意,您可以随时只需上传新的代码与更新功能代码的LAMBDA的代码,它会覆盖最新版本。或者你可以发布,这将创建一个新的版本,并始终只是调用最新的版本。如果你想要做一些花哨的逐渐部署或有不同的版本进行测试和现场代码CodeDeploy才是必需的。

我想尝试以下操作:

  1. 发布您的lambda表达式:

aws lambda update-function-code --function-name YourFunction --zip-file fileb://~/your-code.zip --publish

注意它创建的版本号

  1. 上传appspec.yml文件S3

aws s3 cp appspec.yml s3://your-deploy-bucket/your-deploy-dir/appspec.yml

  1. 注册您的应用程序版本:

aws deploy register-application-revision --application-name YourApplcationName --s3-location bucket=your-deploy-bucket,key=your-deploy-dir/appspec.yml,bundleType=YAML

从CLI,这将不会出现做任何事情,但它没有。

  1. 获取应用程序的修订,以确保它的工作

aws deploy get-application-revision --application-name YourApplcationName --s3-location bucket=your-deploy-bucket,key=your-deploy-dir/appspec.yml,bundleType=YAML

  1. 创建部署来部署代码

aws deploy create-deployment --s3-location bucket=your-deploy-bucket,key=your-deploy-dir/appspec.yml,bundleType=YAML

© www.soinside.com 2019 - 2024. All rights reserved.