【问题标题】:Lambda function is not updated even after successful execution of CodeBuild Pipeline即使在 CodeBuild Pipeline 成功执行后,Lambda 函数也不会更新
【发布时间】:2020-12-19 10:47:45
【问题描述】:

最近在 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

我的模板.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

还有什么需要做的额外配置吗?

【问题讨论】:

  • 请查看 codebuild 生成的 'outputtemplate.yml'。如果资源“AWS::Serverless::Function”下的 CodeUri 是静态 s3 路径(如 zip 文件的路径),则 CloudFormation 可能无法“检测”到更改。

标签: amazon-web-services aws-lambda amazon-cloudformation aws-codepipeline aws-code-deploy


【解决方案1】:

从您发布的内容来看,您的最后一个操作似乎是CHANGE_SET_REPLACE?如果是这样,这将解释为什么您的 lambda 函数没有更新。也就是说,这只会创建一个变更集,但不会执行它。换句话说,它不应用它。

您需要在CHANGE_SET_REPLACE 操作之后添加新操作,称为CHANGE_SET_EXECUTE。此操作将采用CHANGE_SET_REPLACE 创建的更改,并将其实际应用到您的堆栈。

您提供的教程的Complete the deployment stage 中描述了如何添加此类操作:

更改集可让您在进行更改之前预览所做的更改,并添加审批阶段。添加第二个操作,执行更改集以完成部署

【讨论】:

  • 感谢 Marcin,这是问题所在,它处于并行阶段。
猜你喜欢
  • 2019-06-16
  • 1970-01-01
  • 1970-01-01
  • 2020-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多