即使成功执行CodeBuild Pipeline,Lambda函数也不会更新

问题描述

最近已在AWS上设置了基本的CodePipeline(遵循本指南:https://docs.aws.amazon.com/lambda/latest/dg/build-pipeline.html),当CodeCommit存储库中有新的提交时触发。

但是,即使在成功执行管道之后,lambda函数也不会更新。

enter image description here

enter image description here

enter image description here

我的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中介绍了如何添加此类操作:

更改集使您可以预览更改之前进行的更改,并添加批准阶段。添加第二个操作,该操作执行更改集以完成部署

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...