Как обновить код лямбда-функции, если лямбда-код загружен в S3

#amazon-web-services #amazon-s3 #aws-lambda #amazon-cloudformation

#amazon-web-services #amazon-s3 #aws-lambda #aws-cloudformation

Вопрос:

Код лямбда-функции (zip-файл) в настоящее время извлекается из моей корзины S3. Однако после того, как я изменил свой код и заменил исходный zip-файл обновленным кодом, а затем запустил update-stack, код лямбда-функции, похоже, не изменился в консоли lambda.

Есть ли какой-нибудь способ заставить его работать?

Мой шаблон json

 {
   "AWSTemplateFormatVersion": "2010-09-09",
   
   "Parameters": {
    "storageS3Bucket": {
      "Type": "String",
      "Default": "myBucket"
    }
  },
   "Resources": {
     
    "s3BucketImageStorage":{
      "Type" : "AWS::S3::Bucket",
      "Properties" : {
          "BucketName" : {
              "Ref": "storageS3Bucket"
          }
        }
    },
     "getBannerHandler": {
       "Type": "AWS::Lambda::Function",
       "Properties": {
         "FunctionName": "getBanner",
         "Handler": "getBanner.handler",
         "Role": {
           "Fn::ImportValue": {
             "Fn::Sub": "${RolesStack}-LambdaRoleArn"
           }
         },
         "Code": {
           "S3Bucket": {
             "Ref": "HandlerCodeS3Bucket"
           },
           "S3Key":"getBanner.zip"
         },
         "Runtime": "nodejs12.x"
       }
     }
   }
 }
  

Ответ №1:

У вас есть несколько вариантов:

  • Добавьте версию файла или хэш git commit к имени лямбда-zip-файла, поэтому, когда вы выполняете CloudFormation update-stack, вы передаете новое имя zip-файла в качестве параметров.

  • Или используйте awscli для непосредственного обновления лямбда-функции, но лучше сначала удалить zip-файл, а затем загрузить его на случай, если вы хотите использовать то же имя, чтобы избежать возможной согласованности S3 при замене того же файла.

Комментарии:

1. Вместо хэша git commit рассмотрим хэш md5 кода. Таким образом, код будет повторно использоваться только при изменении кода, а не при каждом коммите git.

2. Если вы не используете моно-репозиторий, хэш git также будет меняться только при изменении кода labmda, и его легче получить