К сожалению, если вы не измените «S3Key» на ресурсе «AWS :: Lambda :: Function» при каждом обновлении, CloudFormation не увидит это как изменение (оно не будет искать изменения внутри заархивированного кода).
Опции :
Вариант 1) Обновлять ключ S3 при каждой загрузке
Вариант 2) Рекомендуется использовать AWS SAM для создания шаблона Lambda, а затем использоватьКоманда «cloudformation package» для упаковки шаблона, которая заботится о создании уникального ключа для S3 и загрузке файла в корзину.Подробности здесь: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-deploying.html
Редактировать 1:
В ответ на ваш комментарий позвольте мне добавить некоторые детали подхода SAM:
Для использованияCloudFormation как инструмент развертывания для вашей лямбда-функции в вашем конвейере.Основная идея развертывания лямбда-функции заключается в следующем:
1) Создайте шаблон SAM вашей лямбда-функции
2) Базовый шаблон SAM выглядит следующим образом:
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Resources:
FunctionName:
Type: 'AWS::Serverless::Function'
Properties:
Handler: index.handler
Runtime: nodejs6.10
CodeUri: ./code
3) Добавьте каталог «code» и сохраните файлы лямбда-кода в этом каталоге
4) Установите SAM Cli [1]
5) Запустите команду для упаковки и загрузки:
$ sam package --template-file template.yaml --output-template packaged.yaml --s3-bucket {your_S3_bucket}
6) Развертывание пакета:
$ aws cloudformation deploy --template-file packaged.yaml --stack-name stk1 --capabilities CAPABILITY_IAM
Вы можете сохранить код шаблона (шаг 1-2) в CodeCommit / Github и выполнить шаги 4-5 в шаге CodeBuild.Для шага 6 я рекомендую сделать это с помощью действия CloudFormation в CodePipeline, который в качестве входного артефакта передает файл «packaged.yaml».
См. Также [2].
Ссылки:
[1] Установка AWS SAM CLI в Linux - https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install-linux.html
[2] Построение конвейера непрерывной доставки для лямбда-приложения с AWS CodePipeline - https://docs.aws.amazon.com/en_us/lambda/latest/dg/build-pipeline.html