CodeDeploy для S3

У меня есть сайт в корзине S3, настроенный для веб-доступа, для которого я запускаю aws s3 sync Команда каждый раз, когда я нажимаю на конкретный репозиторий Git (в настоящее время я использую Gitlab).

Так что, если я настаиваю на stable ветвь, бегун Gitlab выполняет npm start build Команда для создания сайта, а затем aws s3 sync синхронизировать с конкретным ведром.

Я хочу перейти на CodeCommit и использовать чистые инструменты AWS, чтобы сделать то же самое.


До сих пор я был в состоянии успешно настроить хранилище, создать CodeBuild для сборки артефакта, и артефакт сохраняется (не развертывается) в корзину S3. Разница в том, что я не могу заставить его развернуть в корневой папке корзины вместо подпапки, кажется, процесс не для этого. Мне нужно, чтобы он был в корневой папке, потому что, как настроен веб-доступ.

Что касается процесса развертывания, я взглянул на CodeDeploy, но на самом деле он не позволяет мне развертываться в корзину S3, он использует только корзину в качестве посредника для развертывания в экземпляре EC2. До сих пор я чувствовал, что CodeDeploy полезен только для развертываний с участием EC2.

Этот учебник с аналогичным требованием, чем у меня, использует CodePipeline и CodeBuild, но шаг развертывания на самом деле aws s3 sync команда (так же, как я делал на Gitlab), и фактический шаг развертывания на CodePipeline отключен.

Я искал решение, которое включает в себя использование функций AWS, созданных для этой конкретной цели, но я не могу найти ни одного.

Я также знаю о LambCI, но мне кажется, что CodePipeline / CodeBuild делает то, что хранит артефакты (не развертывая их в корневой папке корзины). Кроме того, я ищу вариант, который не требует от меня изучения или развертывания новых файлов конфигурации (за пределами файлов конфигурации AWS).

Возможно ли это с текущим состоянием функций AWS?

2 ответа

Сегодня AWS объявил в качестве новой функции возможность ориентироваться на S3 на этапе развертывания CodePipeline. Объявление здесь, и документация содержит учебник, доступный здесь.

Используя подход CodeBuild/CodePipeline, вы теперь сможете выбрать S3 в качестве поставщика развертывания на этапе развертывания, а не выполнять синхронизацию в сценарии сборки. Чтобы настроить фазу, вы указываете имя сегмента S3, указываете, нужно ли извлекать содержимое архива zip и, если да, укажите дополнительный путь для извлечения. Это должно позволить вам развернуть содержимое прямо в корне сегмента, пропустив путь.

Я имел дело с подобной проблемой, и, насколько мне удалось выяснить, нет службы, подходящей для развертывания приложения на S3.

AWS CodeDeploy действительно предназначен для развертывания кода, работающего в качестве сервера.

Моим решением было использовать CodePipeline в три этапа:

  1. Исходный код, который берет исходный код из AWS CodeCommit
  2. Сборка с AWS CodeBuild
  3. Пользовательская лямбда-функция, которая после успешной сборки извлекает артефакт из хранилища артефактов S3, распаковывает его и копирует файлы на хост моего сайта S3.

Я использовал эту лямбда-функцию AWS от SeamusJ https://github.com/SeamusJ/deploy-build-to-s3

Нужно было сделать несколько изменений, я использовал node-unzip-2 вместо unzip-stream для распаковки artifict из s3.

Также мне пришлось изменить ACL в файле website.ts

Загрузка из CodeBuild в настоящее время является лучшим доступным решением.

В этом ответе есть несколько советов о том, как организовать это развертывание с помощью CodePipeline.

Другие вопросы по тегам