Вопросы и ответы по AWS CodeDeploy

Общие вопросы

AWS CodeDeploy – сервис, автоматизирующий развертывание кода в любом инстансе, включая инстансы Amazon EC2 и инстансы, работающие локально. AWS CodeDeploy упрощает как быстрое развертывание новых функций, помогая избежать простоев во время развертывания, так и обновление приложений. С помощью AWS CodeDeploy можно автоматизировать развертывание, что поможет избавиться от ненадежных ручных операций. При этом сервис масштабируется в соответствии с вашей инфраструктурой: вы можете легко выполнять развертывание как в одном инстансе, так и в тысячах.

Сервис AWS CodeDeploy создан для разработчиков и администраторов, которым необходимо развертывать приложения на любых инстансах, включая инстансы Amazon EC2 и инстансы, работающие локально. Это гибкий сервис, которым могут пользоваться все, кому необходимо обновлять программное обеспечение или запускать скрипты на своих инстансах.

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

AWS CodeDeploy поддерживает различные операционные системы. AWS CodeDeploy предоставляет агенты, которые были протестированы с ОС Amazon Linux, Red Hat Enterprise Linux, Ubuntu Server и Microsoft Windows Server. Если необходимо использовать другие операционные системы, можно загрузить открытый исходный код агента AWS CodeDeploy по этой ссылке. Дополнительные сведения о поддержке операционных систем см. в документации AWS CodeDeploy.

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

AWS CodeDeploy – это вспомогательный сервис, позволяющий разработчикам развертывать и обновлять программное обеспечение на любом инстансе, включая инстансы Amazon EC2 и инстансы, работающие локально. Сервисы AWS Elastic Beanstalk и AWS OpsWorks являются комплексными решениями для управления приложениями.

Да. AWS CodeDeploy поддерживает любые инстансы, на которые можно установить агент CodeDeploy и с которых можно подключиться к публичным конечным точкам AWS.

Понятия

Приложение – это набор программного обеспечения и конфигурационных данных для развертывания на группе инстансов. Как правило, на инстансах в группе работает одинаковое программное обеспечение. К примеру, если у вас есть большая распределенная система, то на сетевом уровне, скорее всего, будет использоваться одно приложение, а на уровне данных – другое.

Редакция – это определенная версия развертываемого контента, такого как исходный код, объекты после сборки, веб‑страницы, исполняемые файлы и скрипты развертывания, а также файл AppSpec. Агент AWS CodeDeploy может использовать редакции из репозитория GitHub или корзины Amazon S3.

Группа развертывания – это сущность AWS CodeDeploy для объединения инстансов EC2 или функций AWS Lambda в рамках развертываний CodeDeploy. Для развертываний в EC2 это набор инстансов, которые связаны с развертываемым приложением. Можно добавить инстансы в группу развертывания, указав тег, название группы Auto Scaling или оба этих признака. В развертываниях AWS Lambda группа развертывания определяет набор конфигураций AWS CodeDeploy для предстоящего бессерверного развертывания Lambda в группе, например предупреждения и откаты.

Можно определить несколько групп развертывания для приложения, например группу отладки и рабочую группу. Информацию о тегах см. в разделе Работа с тегами Amazon EC2 в Консоли. Дополнительные сведения о развертывании в группах «Автомасштабирование» см. в разделе Интеграция с автомасштабированием.

Конфигурация развертывания определяет поведение при развертывании, в том числе порядок обработки отказов, с использованием группы развертывания. Конфигурацию развертывания можно использовать для выполнения развертывания без простоев в группах развертывания с несколькими инстансами. Например, если приложение требует, чтобы не менее 50 % инстансов в группе развертывания были активны и обрабатывали трафик, это можно указать в конфигурации развертывания, чтобы развертывание не вызвало простоев в работе. Если с развертыванием или с группой развертывания не связана ни одна конфигурация развертывания, то по умолчанию AWS CodeDeploy будет выполнять развертывание на каждом инстансе по очереди.  Дополнительные сведения о конфигурации развертывания см. в разделе Работоспособность инстансов.

Есть три параметра, которые указываются для развертывания:

  1. Редакция: определяет, что необходимо развернуть.
  2. Группа развертывания: определяет, где необходимо осуществить развертывание.
  3. Конфигурация развертывания: необязательный параметр, который определяет, как именно необходимо осуществить развертывание.

Файл AppSpec – это файл конфигурации, содержащий список файлов, которые должны быть скопированы, и скриптов, которые должны быть выполнены. Файл AppSpec в формате YAML размещается в корневом каталоге редакции. Файл AppSpec используется агентом AWS CodeDeploy и состоит из двух разделов. В разделе файлов указаны исходные файлы редакции, которые должны быть скопированы, а также папка назначения на каждом инстансе. В разделе процедур указано расположение скриптов, которые должны выполняться на каждом этапе развертывания, в виде относительных путей, начинающихся с корневого каталога пакета редакции. Каждый этап развертывания называется событием жизненного цикла развертывания. Ниже приведен пример файла AppSpec. Дополнительные сведения о файле AppSpec, включая все параметры, которые в нем можно указать, см. в справке по файлу AppSpec.

os: linux

files: 

# В этом разделе можно указать одно или несколько местоположений.

  – source: /

    destination: /var/www/html/WordPress

hooks:

 # В разделе процедур жизненного цикла можно указать скрипты для развертывания.

ApplicationStop: 

# Шаг 1. Остановите Apache и MySQL, если они запущены.

    – location: helper_scripts/stop_server.sh

BeforeInstall: 

# Шаг 2. Установите Apache и MySQL.

# С каждым событием жизненного цикла развертывания можно связать один или несколько скриптов.

    – location: deploy_hooks/puppet-apply-apache.sh

    – location: deploy_hooks/puppet-apply-mysql.sh 

 AfterInstall: 

# Шаг 3. Установите разрешения.

    – location: deploy_hooks /change_permissions.sh

      timeout: 30

      runas: root

# Шаг 4. Запустите сервер.

    – location: helper_scripts/start_server.sh

      timeout: 30

      runas: root

Развертывание проходит через ряд заранее определенных этапов, называемых событиями жизненного цикла развертывания. События жизненного цикла развертывания дают возможность выполнять код в процессе развертывания. В следующей таблице перечислены различные события жизненного цикла развертывания, поддерживаемые в настоящее время, в порядке их выполнения, а также приведены примеры того, когда их можно использовать.

Событие жизненного цикла развертывания

  • ApplicationStop
    • Это первое событие жизненного цикла развертывания, которое происходит еще до загрузки редакции. Для этого события жизненного цикла развертывания используется файл AppSpec и скрипты из последней успешно развернутой редакции.  

      Событие жизненного цикла развертывания ApplicationStop можно использовать, если необходимо корректно остановить приложение или удалить при подготовке к развертыванию ранее установленные пакеты.

  • DownloadBundle

    • Во время этого события жизненного цикла развертывания агент копирует файлы редакции во временную папку на инстансе. Это событие жизненного цикла развертывания зарезервировано для агента и не может использоваться для запуска пользовательских скриптов.

  • BeforeInstall

    • Событие жизненного цикла развертывания BeforeInstall можно использовать для заданий, выполняемых перед установкой, таких как дешифрование файлов или создание резервной копии текущей версии.

  • Install

    • Во время этого события жизненного цикла развертывания агент копирует файлы редакции из временной папки в конечную. Это событие жизненного цикла развертывания зарезервировано для агента и не может использоваться для запуска пользовательских скриптов.

  • AfterInstall

    • Событие жизненного цикла развертывания AfterInstall можно использовать для таких заданий, как настройка приложения или изменение разрешений на доступ к файлам.

  • ApplicationStart

    • Обычно событие жизненного цикла развертывания ApplicationStart используется для перезапуска сервисов, которые были остановлены во время события ApplicationStop.

  • ValidateService

    • ValidateService – это последнее событие жизненного цикла развертывания, предоставляющее возможность убедиться в том, что развертывание успешно завершено.

 

 

Начало работы

Начать использование сервиса AWS CodeDeploy можно после входа в Консоль управления AWS. Краткий обзор сервиса см. в разделе Начало работы, который включает в себя пошаговое руководство.

Использование AWS CodeDeploy

Необходимо, чтобы инстанс Amazon EC2 был связан с профилем инстанса IAM и на нем работала поддерживаемая операционная система. Дополнительные сведения см. в разделе Use an Existing Amazon EC2 Instance.

На следующей диаграмме показаны стандартные действия, которые необходимо выполнить во время развертывания. Задачи создания приложения и развертывания группы (определения этих терминов см. в разделе Понятия), как правило, выполняются один раз при настройке каждого приложения. Загрузка редакции и ее развертывание – повторяющиеся действия. Подробное описание каждого из этих заданий, включая пошаговые инструкции, см. в разделе Развертывание.

Для доступа к сервису AWS CodeDeploy можно использовать Консоль управления AWS, интерфейс командной строки AWS (AWS CLI), пакеты AWS SDK и API AWS CodeDeploy.

Вносить изменения в код не требуется. Нужно просто добавить в корневой каталог пакета редакции файл конфигурации (называемый AppSpec) со списком файлов, которые следует скопировать, и скриптов, которые необходимо выполнить.

При использовании GitHub можно выполнять развертывание редакций из репозитория в формате .zip, .tar или .tar.gz непосредственно на инстансах. При использовании других систем управления исходным кодом можно объединить файлы редакции в пакет и загрузить в корзину Amazon S3 в формате .zip, .tar или .tar.gz, а затем указать расположение Amazon S3 при выполнении развертывания. Если для приложения необходим этап сборки, в репозитории GitHub или корзине Amazon S3 должны содержаться объекты после сборки. Дополнительные сведения об использовании GitHub с AWS CodeDeploy см. на странице интеграции продукта. Дополнительные сведения об использовании Amazon S3 для хранения редакций см. в разделе Push a Revision.

Инструмент управления конфигурацией можно вызвать из любой процедуры события жизненного цикла развертывания в файле AppSpec. Например, если при развертывании нужно запустить рецепт Chef, его можно указать в соответствующей процедуре события жизненного цикла развертывания в файле AppSpec. Кроме того, можно использовать свою систему управления конфигурацией для установки агента AWS CodeDeploy на инстансах. Примеры, иллюстрирующие использование AWS CodeDeploy с системами управления конфигурацией, такими как Chef, Puppet, Ansible и Saltstack, см. на странице интеграции продукта.

Да. Можно интегрировать AWS CodeDeploy с системами непрерывной интеграции и развертывания путем вызова общедоступных API с использованием интерфейса командной строки AWS или пакетов SDK AWS. Готовые решения для интеграции и образцы см. на странице интеграции продукта.

Чтобы установить приложение на только что добавленных инстансах, выполните развертывание последней редакции в группе развертывания. За исключением инстансов Amazon EC2, которые запускаются в составе группы Auto Scaling, AWS CodeDeploy не развертывает последнюю редакцию на только что добавленных инстансах автоматически.

Группу Auto Scaling можно связать с группой развертывания, чтобы при запуске новых инстансов на них устанавливалась последняя версия приложения. Каждый новый инстанс Amazon EC2, запущенный в указанной группе Auto Scaling, переводится в состояние ожидания, а затем на нем выполняется развертывание последней успешной редакции для указанной группы развертывания. Если развертывание завершается успешно, состояние инстанса Amazon EC2 изменяется на «InService». Если развертывание завершается с ошибкой, работа инстанса Amazon EC2 прекращается, запускается новый инстанс Amazon EC2 в состоянии ожидания, после чего для него запускается процесс развертывания. Дополнительные сведения о событиях жизненного цикла инстансов группы «Автомасштабирование» см. в разделе Жизненный цикл группы «Автомасштабирование».

Состояние развертывания можно отслеживать с помощью Консоли управления AWS, интерфейса командной строки AWS (AWS CLI), пакетов AWS SDK и API AWS CodeDeploy. Вы можете увидеть общее состояние развертывания и более подробно ознакомиться с состоянием каждого экземпляра и статусом каждого события жизненного цикла развертывания экземпляра. Можно также посмотреть записи логов о возникших ошибках, что позволяет легко осуществить отладку проблем развертывания без необходимости входа в инстанс.

Да. При остановке выполняемого развертывания сервис AWS CodeDeploy передает агенту на каждом инстансе команду для прекращения выполнения дополнительных скриптов. Чтобы вернуть приложение обратно в рабочее состояние, можно осуществить повторное развертывание редакции или развертывание другой редакции.

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

Да. Можно использовать корзину Amazon S3 с контролем версий и указывать идентификатор версии для однозначного определения редакции.

Сведения о лимитах сервисов см. в разделе Лимиты. Для увеличения лимитов отправьте запрос в Центр поддержки AWS.

Да. Для получения истории вызовов API AWS CodeDeploy вашего аккаунта включите сервис AWS CloudTrail в Консоли управления AWS.

Можно создавать оповещения о событиях, затрагивающих ваши развертывания. Оповещения будут приходить в виде сообщений от сервиса Amazon SNS. Каждое оповещение будет включать в себя сообщение о состоянии, а также ссылку на ресурсы, где возникло событие, ставшее причиной оповещения. Оповещения предоставляются бесплатно, однако плата может начисляться за использование других сервисов AWS при оповещении, например Amazon SNS. Чтобы узнать, как начать работу с оповещениями, см. соответствующее руководство пользователя. Кроме того, клиенты, использующие AWS Chatbot, могут настроить отправку оповещений в каналы Slack или чат‑комнаты Amazon Chime. Подробную информацию см. здесь.

Безопасность

Да, но агент AWS CodeDeploy, установленный на инстансах Amazon EC2, должен иметь доступ к публичным адресам сервисов AWS CodeDeploy и Amazon S3. Дополнительные сведения см. в разделах Конечные точки AWS CodeDeploy и Конечные точки Amazon S3.

Да. AWS CodeDeploy поддерживает разрешения на уровне ресурсов. Для каждого ресурса AWS CodeDeploy можно указать пользователей, которые имеют доступ, а также действия, которые они могут выполнять. Например, можно создать политику IAM, которая позволит пользователю осуществлять развертывание определенного приложения, но для других приложений разрешит только просматривать список редакций. Таким образом можно предотвратить случайное внесение изменений в другое приложение. Дополнительную информацию об использовании IAM с AWS CodeDeploy см. в справке по правам доступа.

Регионы

Сведения о доступности сервиса CodeDeploy по регионам см. на странице Продукты и сервисы по регионам.

AWS CodeDeploy осуществляет развертывание на ресурсах AWS, расположенных в одном регионе. Для развертывания приложения в нескольких регионах необходимо определить приложение в требуемых конечных регионах, скопировать пакет приложения в корзину Amazon S3 в каждом регионе, а затем начать развертывание, осуществляя последовательное или параллельное развертывание во всех регионах.

Оплата

Дополнительная плата за развертывание кода на инстансах Amazon EC2 с помощью AWS CodeDeploy отсутствует. За обновление локального инстанса с помощью AWS CodeDeploy вы платите 0,02 USD. Подробнее см. на странице цен.