Mik*_*ike 4 amazon-web-services aws-cloudformation aws-lambda aws-codepipeline
我有一个经过验证可以正常工作的 Lambda 函数。我可以使用“update-function-code”在命令行上手动更新函数,但我一直试图让它与代码管道和云形成一起工作。以下是我到目前为止的步骤:
我的 samTemplate.yml 看起来像这样:
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: My Lambda function
Resources:
LambdaFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName: MyLambdaExecute
Description: My Lambda function
Handler: myhandler.handler
Runtime: nodejs6.10
CodeUri: s3://mybucket/mydirectory/mylambdacode.zip
AutoPublishAlias: Staging
Timeout: 30
DeploymentPreference:
Type: AllAtOnce
如果名称为“MyLambdaExecute”的 lambda 函数不存在并且我将代码推送到 github,则它可以完美运行。但是,如果我修改一些代码并再次推送,它会运行前两个步骤,然后生成一个带有状态的空更改集:
失败 - 不执行更新。
我不确定我必须做什么才能让它发布新版本。我如何让它意识到它需要创建一个新的变更集?
我相信您会收到“无更新”消息,因为从技术上讲,您的 CloudFormation 模板没有任何变化。尝试构建变更集时,不会检查 S3 文件的内容。它只是看到自上次部署以来没有任何 CloudFormation 资源属性发生变化。
相反,您可以使用 CodeUri 的本地相对路径,并aws cloudformation package
可以将文件上传到唯一的 S3 路径。这可确保模板每次都会更改,并且可以识别/部署新的 Lambda 代码。例如:
aws cloudformation package --template-file samTemplate.yml --output-template-file sam-output-dev.yml --s3-bucket "$CodePipelineS3Bucket" --s3-prefix "$CloudFormationPackageS3Prefix"
Run Code Online (Sandbox Code Playgroud)
此命令可以在创建/执行变更集步骤之前放入构建步骤。
要在实践中查看整个流程的演示,您可以查看此存储库,但我会警告说,由于 2017 年底发布的新功能,它有点过时了。(例如,我通过手动发布 Lambda 别名额外的步骤,因为它是预先编写的AutoPublishAlias
。)
归档时间: |
|
查看次数: |
2793 次 |
最近记录: |