问题描述
最近已在AWS上设置了基本的CodePipeline(遵循本指南:https://docs.aws.amazon.com/lambda/latest/dg/build-pipeline.html),当CodeCommit存储库中有新的提交时触发。
但是,即使在成功执行管道之后,lambda函数也不会更新。
我的buildspec.yml:
version: 0.2
phases:
install:
runtime-versions:
nodejs: 12
build:
commands:
- npm install
- export BUCKET=xx-test
- aws cloudformation package --template-file template.yaml --s3-bucket $BUCKET --output-template-file outputtemplate.yml
artifacts:
type: zip
files:
- template.yml
- outputtemplate.yml
我的template.yaml:
AWstemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
helloWorld
API Gateway connectivity helloWorld
Globals:
Function:
Timeout: 3
Resources:
HelloWorldFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: ./
Handler: app.lambdaHandler
Runtime: nodejs12.x
Events:
HelloWorld:
Type: Api
Properties:
Path: /hello
Method: get
是否还需要进行其他配置?
解决方法
从您发布的内容看来,您的最后一个动作是CHANGE_SET_REPLACE
?如果是这样,这将解释为什么您的lambda函数没有更新。也就是说,这只会创建一个变更集,但不会执行。换句话说,它并不适用。
您需要在CHANGE_SET_REPLACE
操作之后添加新操作,这称为CHANGE_SET_EXECUTE
。该操作将采用CHANGE_SET_REPLACE
创建的更改,并将其实际应用到您的堆栈中。
您提供的教程的Complete the deployment stage中介绍了如何添加此类操作:
更改集使您可以预览更改之前进行的更改,并添加批准阶段。添加第二个操作,该操作执行更改集以完成部署。