Поиск по сайту:

Как настроить автоматизированный конвейер развертывания для веб-сайта S3


Хостинг вашего веб-сайта с использованием S3 — довольно распространенная практика на AWS. Это дешево, не требует серверов и даже поддерживает клиентские веб-приложения с такими фреймворками, как React. Чтобы упростить задачу, мы настроим конвейер развертывания для обработки обновлений.

Как это работает?

Для сайта S3 вы можете вносить обновления, запуская aws s3 sync или добавляя новые объекты в корзину вручную. Тем не менее, это очень ручной процесс, и его можно довольно легко автоматизировать.

Используя сервис AWS CodePipeline CI/CD, вы можете настроить конвейер для прослушивания изменений в системе управления версиями. Всякий раз, когда обнаруживается изменение, CodePipeline отправляет исходный код в CodeBuild, который занимается сборкой проекта. Для веб-приложений это, прежде всего, запуск npm run build, который упаковывает ресурсы проекта в производственную сборку. Сборка отправляется напрямую в S3, обновляя приложение.

Обратите внимание, что если ваш проект не требует какой-либо сборки с помощью npm, и вы просто хотите синхронизировать репозиторий Git с S3, настройка будет намного проще. Просто настройте этап исходного кода для подключения к системе управления версиями, пропустите этап сборки, затем выберите «AWS S3» для этапа развертывания. Введите данные своей корзины, и содержимое вашего репозитория будет синхронизироваться с корзиной при каждом обновлении.

Настройка конвейера

В консоли CodePipeline нажмите «Создать новый конвейер», дайте ему имя и выберите создание новой роли службы.

В качестве исходного кода выберите репозиторий Git. Если вы используете собственный CodeCommit AWS, вы можете выбрать репозиторий и ветку. В противном случае вам придется подключиться к своей учетной записи Github или Bitbucket. Гитлаб не поддерживается.

Для этапа сборки выберите «CodeBuild» и создайте новый проект сборки.

Это откроет диалоговое окно, которое автоматически настроит источник для нового проекта CodeBuild для использования CodePipeline. Здесь вам нужно настроить среду, выбрать ОС и версию среды выполнения. Вы также захотите создать новую роль службы, которую нужно будет изменить, чтобы получить доступ к вашей корзине развертывания.

Для конфигурации сборки выберите использование файла buildspec.

Buildspec — это формат YAML для определения того, какие команды CodeBuild будут выполняться. Это зависит от вашего приложения. В этом примере мы предположим, что вы создаете приложение JavaScript с помощью npm. Вставьте следующее в новый файл с именем buildspec.yml, расположенный в корне репозитория.

version: 0.2

phases:
  install:
    runtime-versions:
      nodejs: 10
    commands:
      - npm i npm@latest -g
  pre_build:
    commands:
      - npm install
  build:
    commands:
      - npm run build
  post_build:
    commands:
      - aws s3 sync ./build s3://bucket-name

Эта спецификация сборки фактически обеспечивает развертывание на S3 — на этапе после сборки CodeBuild запускает aws s3 sync для синхронизации папки /build с указанным сегментом.

Нажмите «Создать» в проекте сборки, и вы вернетесь в CodePipeline. Нажмите «Далее» и выберите пропустить этап развертывания, потому что CodeBuild может обработать запуск команды. Создайте конвейер.

При первом запуске этап сборки завершится ошибкой, поскольку у роли службы CodeBuild нет доступа к S3. Перейдите в консоль управления IAM, найдите роль CodeBuild в разделе «Роли» и прикрепите новую политику, которая разрешает доступ к S3. На самом деле вам, вероятно, следует ограничить это доступом только к корзине развертывания.

Вернитесь к CodePipeline и нажмите «Release Change» в вашем конвейере, чтобы вручную запустить обновление конвейера. Если с вашей спецификацией сборки все в порядке, конвейер должен работать успешно.

Если вы сделаете коммит в Git, будет запущена новая сборка, а S3 будет обновлен артефактами сборки. Если в сборке есть какие-либо ошибки, CodePipeline остановится перед обновлением.

Если ваш конвейер дает сбой, вы можете нажать «CodeBuild» на боковой панели, чтобы просмотреть журналы для самой последней сборки, которые помогут вам отследить ошибки.