amazon-web-services - 如何让 Cloud Formation 创建变更集来更新我的 Lambda 函数?

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

我有一个 Lambda 函数,我已验证该函数可以正常工作。我可以使用“update-function-code”在命令行上手动更新该函数,但我一直在尝试让它与 Code Pipeline 和 Cloud Formation 一起使用。 以下是我到目前为止所采取的步骤:

  1. 来源 - 从 github 获取代码。这可以正常工作。
  2. 构建 - 在 Solano(第 3 方 CI)中测试代码。这也有效,在最后阶段它会压缩存储库并将其上传到我的 S3 存储桶。
  3. 部署 - 这是“部署”操作类别,操作模式为“创建或替换更改集”。如果 Lambda 函数已存在,则此方法不起作用。
  4. Beta - 执行变更集。如果正确生成了更改集,则此方法有效。

我的 samTemplate.yml 看起来像这样:

AWSTemplateFormatVersion:'2010-09-09' 转型:AWS::无服务器-2016-10-31 说明:我的 Lambda 函数 资源: Lambda函数: 类型:AWS::无服务器::函数 特性: 函数名称:MyLambdaExecute 说明:我的 Lambda 函数 处理程序:myhandler.handler 运行时:nodejs6.10 CodeUri:s3://mybucket/mydirectory/mylambdacode.zip AutoPublishAlias:暂存 超时:30 部署偏好: 类型:AllAtOnce

如果名为“MyLambdaExecute”的 lambda 函数不存在,并且我将代码推送到 github,则它可以完美运行。但是,如果我修改一些代码并再次推送,它会运行前两个步骤,但随后会生成一个空的更改集,其状态为:

FAILED - No updates are to be performed.

我不确定我需要做什么才能让它发布新版本。我如何让它意识到需要创建一个新的变更集?

最佳答案

我相信您收到“无更新”消息,因为从技术上讲,您的 CloudFormation 模板中没有任何变化。尝试构建变更集时,不会检查 S3 文件的内容。它只是看到自上次部署以来没有任何 CloudFormation 资源属性发生更改。

相反,您可以使用 CodeUri 的本地相对路径,并且 aws cloudformation 包 可以将文件上传到您的唯一 S3 路径。这可确保模板每次更改并识别/部署新的 Lambda 代码。例如:

aws cloudformation package --template-file samTemplate.yml --output-template-file sam-output-dev.yml --s3-bucket "$CodePipelineS3Bucket" --s3-prefix "$CloudFormationPackageS3Prefix"

可以在创建/执行变更集步骤之前将此命令放入构建步骤中。

要在实践中查看整个流程的演示,您可以查看 this repository ,尽管我会警告说,由于 2017 年底发布的新功能,它有点过时了。(例如,我通过额外的步骤手动发布 Lambda 别名,因为它是在 AutoPublishAlias 之前编写的。 )

关于amazon-web-services - 如何让 Cloud Formation 创建变更集来更新我的 Lambda 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49313351/

相关文章:

amazon-web-services - 内联 Lambda CFT "Fn::Join"错误 - JSON

amazon-web-services - 可用的 EC2 实例类型是否因可用区(在同一区域)而异?

amazon-web-services - 从 DynamoDB 中查找没有哈希和范围键的行并将其删除

amazon-web-services - 云形成策略生成不正确

ruby-on-rails - Google Docs inline pdf 显示为黑白

python - aws codebuild 是否仍然支持 python2.7 运行时?

database - Redis连接池与Lambda

amazon-web-services - 如何动态获取云形成中的AWS可用区?

amazon-web-services - 适用于 DynamoDb bool 和列表数据类型的 AWS CloudFormation AttributeType

amazon-web-services - CodeBuild 无法创建日志