AWS CodePipline (CI / CD) для обновления кода существующей AWS Lambda (не создается с помощью CloudFormation или SAM) - PullRequest
2 голосов
/ 19 февраля 2020

Мне нужно создать конвейер CI / CD, который обновляет код существующей лямбда-функции, созданной с помощью консоли. Создание нового не вариант!

Я успешно развернул код с помощью CloudFormation на этапе развертывания, но он может обновлять код только для тех функций Lambda, которые созданы с CloudFormation / SAM. Когда я указываю имя и существующую Lambda в файле template.yaml, он пытается создать его и сообщает, что он уже существует!

2-й способ, который я пробовал - это развертывание с использованием CodeDeploy, и я получаю эту ошибку: - «BundleType должен быть либо YAML, либо JSON»

Этот поток дает решение этой проблемы, и я не могу применить его к своему случаю: CodePipeline: CodeDeploy сообщает «BundleType должен быть либо YAML, либо JSON "

Есть ли другой способ создать правильный конвейер CI / CD, который обновляет код только для лямбда-функции?

1 Ответ

0 голосов
/ 26 февраля 2020

Одним из способов обновления лямбда-кода из CloudFormation было бы сохранение вашего лямбда-кода в S3 с включенным контролем версий.

Здесь: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-code.html

Изменения в пакете развертывания в Amazon S3 не обнаруживаются автоматически при обновлении стека. Чтобы обновить код функции, измените ключ объекта или версию в шаблоне.

Таким образом, конвейер может выглядеть примерно так:

  • 1) Извлечь лямбда-код из репозиторий. Или
  • 2) Загрузите новый zip-файл в версионную корзину S3.
  • , если 1), затем скопируйте содержимое и загрузите его в версионную корзину S3.
  • Один раз готово, у вас будет новый версионный объект для вызова CloudFormation (вам нужно обновить файл template.yml этой новой версией, что можно сделать, извлекая новую версию объекта с помощью CLI), и ОБНОВЛЕНИЕ может произойти, как описано в документация.

Надеюсь, что поможет.

...