Делает ли AWS SAM CodePipelines полную перестройку за коммит? - PullRequest
0 голосов
/ 13 мая 2018

Я создаю распределенное приложение в AWS, состоящее из базового ресурса (iam и т. Д.), Хранилища данных, но в основном ресурсов без серверов, таких как lambdas, sns, mongodb, ..

Для развертывания этого через OTAP яРассматривая инструменты AWS для этого, в основном обрисованные в общих чертах здесь .

Это означает, что 1 репо в CodeCommit запустит CodePipeline, который будет иметь эти компоненты в нужных местах (реализуя управление заказами):

  • развертывание стеков CF
  • с использованием CodeBuild для упаковки (пакет AWS sam) ресурса SAM-> для каждого ресурса SAM один
  • с использованием шага сборки для созданиянабор изменений -> один на ресурс SAM
  • с использованием шага сборки для выполнения набора изменений -> один на набор изменений

Так что в качестве примера мне понадобится спецификация сборки.yml для каждой лямбды, кроме файла .js для этой лямбды, а также лямбда должна быть построена в шаблоне SAM (его собственный или сгруппированный).Также шаг сборки-изменения-набора и шаг исполнения-изменения-набора для каждого.

Мой вопрос: Если в этой настройке для 1 репо для всего распределенного приложения я изменяю 1крошечная глупая вещь, такая как тайм-аут 1 из множества лямбд, будет ли эта перестройка переустанавливать все элементы приложения?

Если нет , слава богу, но как это работает?CodeCommit отправляет весь архив всех источников в S3, а НЕ только изменения.Таким образом, все элементы будут запущены, и во время развертывания стека (CF или SAM) базовая технология может быть разумной и выполнять только то, что необходимо изменить.Но все же все элементы в CodePipeline (а их много) будут запущены, что неэффективно, если целью является завершение всего развертывания как можно быстрее.

Если да , хорошо, чтобыло бы плохо, и я бы тогда нашел другое решение с пользовательским кодом (лямбда-выражениями) в конвейере, извлекая изменения только из API CodeCommit и делая cretae-change-set и execute.Использование aws sdk с основным недостатком, который уступает управлению заказами, и некоторые вещи, такие как «пакет aws sam», недоступны в sdk.

1 Ответ

0 голосов
/ 03 июня 2018

@ TimR Если у вас есть 10 ресурсов, вы не хотите перестраивать / повторно развертывать их в P, если это не нужно.Это очень плохо.Для каждого ресурса требуется максимальное время безотказной работы.

Чтобы ответить на мой собственный вопрос, при использовании codePipeline или чего-либо еще для развертывания изменений он будет проверять весь шаблон (ы) на предмет того, что отличается, в зависимости от типа ресурса и того, что изменилось.повторно разверните этот ресурс.Неизмененные ресурсы только проверяются, но в основном не затрагиваются.Так что это хорошо, только то, что все действия во всей CodePipeline будут запущены, что займет много времени, кроме того, что CP является асинхронной аркой и поэтому также завершается медленно.Средний размер занимает около 10 минут для небольшого изменения.Теперь предположим, что каждые 30 минут у вас есть 10-20 разработчиков.

SAM / Lambdas, однако, содержит ошибку в AWS.При использовании MD5 вычисления лямбда-кода он проверяет, обновлять ли / повторно развертывать лямбда-код.Алгоритм учитывает свойства файла, такие как последнее изменение и т. Д., В результате чего делается вывод, что все лямбды были изменены, что глупо.

...