AWS Elastic Beanstalk — это сервис, упрощающий развёртывание и управление веб-приложениями в облаке Amazon Web Services (AWS). Он позволяет загрузить исходный код приложения, выбрать программную платформу и настроить параметры окружения, после чего автоматически создаёт и управляет необходимыми облачными ресурсами.
Elastic Beanstalk поддерживает, в частности, Java, .NET, PHP, Node.js, Python, Ruby, Go и Docker. В зависимости от выбранной платформы и конфигурации сервис использует такие компоненты AWS, как Amazon EC2, группы безопасности, Auto Scaling и, при необходимости, Elastic Load Balancing. Для управления инфраструктурой используется AWS CloudFormation.
В Elastic Beanstalk следует различать два понятия:
У одного приложения может быть несколько окружений. Например, окружение production используется для обслуживания пользователей, а окружение staging — для проверки новой версии перед её вводом в эксплуатацию.
Дополнительная информация: AWS Elastic Beanstalk — документация.
В Elastic Beanstalk предусмотрено два основных типа веб-окружений:
В данной лабораторной работе для простоты изучения процесса развёртывания и снижения стоимости используется окружение Single-instance, содержащее один экземпляр EC2. Эта конфигурация позволяет сосредоточиться на создании окружений, развёртывании версий приложения и переключении трафика между ними.
Однако наличие одного экземпляра создаёт единую точку отказа (Single Point of Failure, SPOF). Если экземпляр EC2 перестанет работать, операционная система даст сбой или приложение окажется неработоспособным, пользователи могут временно потерять доступ к сервису. Автоматическое восстановление экземпляра не означает, что приложение останется доступным без перерыва.
Production-системам критически важно обеспечить надежность работы сервиса. Основным способом достижения этого является избыточность (redundancy).
Избыточность (redundancy) — это наличие дополнительных ресурсов или компонентов, способных продолжить выполнение работы при отказе основного компонента.
В production-системах, то есть системах, обслуживающих реальных пользователей, простой приложения может привести к потере заказов, нарушению бизнес-процессов и финансовым убыткам. Поэтому архитектуру обычно проектируют так, чтобы отказ отдельного компонента не приводил к полной недоступности приложения.
Например, вместо одного экземпляра EC2 можно использовать несколько экземпляров, размещённых как минимум в двух зонах доступности (Availability Zones, AZ), и балансировщик нагрузки. Он направляет запросы на работоспособные экземпляры, а Auto Scaling позволяет поддерживать необходимое количество экземпляров и при соответствующих настройках заменять отказавшие.
Избыточность решает несколько задач:
При этом избыточность сама по себе не гарантирует бесперебойную работу. Если все экземпляры зависят от одной неисправной базы данных или другого общего компонента, приложение также может оказаться недоступным. Поэтому в production-архитектуре необходимо учитывать не только веб-серверы, но и все критически важные зависимости.
Избыточность увеличивает стоимость инфраструктуры и сложность её настройки. Уровень резервирования выбирают с учётом требований к доступности, допустимого времени простоя, нагрузки и бюджета.
Дополнительная информация: Типы окружений Elastic Beanstalk, избыточность и доступность в AWS.
Blue-Green Deployment — это стратегия развёртывания программного обеспечения, при которой поддерживаются два отдельных окружения, позволяющих переключать обслуживание пользователей со старой версии приложения на новую.
Окружения условно обозначают следующим образом:

Названия Blue и Green являются условными: они не определяют конкретные настройки облачной инфраструктуры.
Развёртывание новой версии выполняется в несколько этапов.
В AWS Elastic Beanstalk для этой задачи предусмотрена операция Swap environment URLs. Она меняет CNAME-адреса двух окружений, направляя обращения к прежнему адресу рабочего окружения на новую версию приложения.
Переключение адресов не следует считать гарантированно мгновенным для всех пользователей: DNS-резолверы и клиенты могут некоторое время использовать закэшированные записи. После переключения необходимо проверить приложение и не удалять прежнее окружение до завершения проверки и учёта распространения DNS-изменений.
Если новая версия работает некорректно, сохранение прежнего окружения позволяет вернуть обслуживание к предыдущей версии. Такой возврат упрощает восстановление, но его успешность зависит от состояния инфраструктуры, совместимости данных и того, какие изменения успела выполнить новая версия приложения.
Подробное описание механизма: Blue/Green deployments with Elastic Beanstalk.
Важно различать две цели:
Эти подходы дополняют друг друга, но не заменяют друг друга.
В рамках Blue-Green Deployment можно создать два окружения, каждое из которых содержит только один экземпляр EC2. Это позволяет развернуть новую версию отдельно от рабочей и переключить трафик после проверки. Однако после переключения активное окружение по-прежнему может зависеть от одного экземпляра, отказ которого приведёт к недоступности приложения до восстановления.
Следовательно, наличие двух окружений во время развёртывания не означает, что приложение постоянно обладает высокой доступностью.
В production-системах Blue-Green Deployment часто сочетают с балансировщиком нагрузки, несколькими экземплярами приложения, размещёнными в разных зонах доступности, и резервированием других критически важных компонентов.
При использовании Blue-Green Deployment необходимо отдельно учитывать состояние данных.
Если обе версии приложения используют одну базу данных, новая версия должна сохранять совместимость с текущей схемой и данными, пока старая версия ещё может обслуживать запросы. Несовместимое изменение схемы базы данных способно нарушить работу одной из версий даже при успешном переключении окружений.
Если используются отдельные базы данных, необходимо определить порядок переноса данных, согласования изменений и переключения приложения. Простое создание копии базы данных не гарантирует согласованности данных между двумя окружениями.
На практике для безопасного обновления часто применяют поэтапную миграцию схемы: сначала вносят обратно совместимые изменения, затем развёртывают новый код и только после проверки удаляют элементы, необходимые старой версии.
В данной лабораторной работе используется простое PHP-приложение без базы данных. Поэтому миграция данных не входит в практическую часть, однако при проектировании реальных систем этот вопрос должен рассматриваться отдельно.
В лабораторной работе используется Single-instance environment, поскольку для демонстрации Blue-Green Deployment достаточно двух отдельных окружений с одним экземпляром EC2 в каждом.
Это упрощение позволяет изучить основные операции:
При этом работа не предназначена для демонстрации промышленной отказоустойчивости. В ней не исследуются балансировка нагрузки, масштабирование нескольких экземпляров, размещение в нескольких зонах доступности и отказоустойчивость базы данных.
Полученные результаты следует рассматривать как демонстрацию процесса развёртывания и переключения версий, а не как доказательство готовности архитектуры к эксплуатации в production-среде.
index.php (код прилагается ниже) и упакуйте его в ZIP-архив. Не используйте каталогов, index.php должен быть в корневом каталоге ZIP-архива.Создайте новое веб-приложение Beanstalk:
Шаг 1:
<группа>-<фамилия><группа>-<фамилия>-prodШаг 2:
Шаг 3:
Шаг 4
Шаг 5
kit-imi.info и создайте CNAME-запись для доменного имени приложения (без http://).<группа>-<фамилия>-staging и выберите существующую роль.Код приложения:
index.php:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Elastic Beanstalk Lab!</title>
</head>
<body>
<h1>Welcome!</h1>
<p>Application version: v1</p>
<p>Server time is <?php echo date("h:i:sa"); ?></p>
</body>
Измененный код приложения:
index.php:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Лабораторная работа Elastic Beanstalk!</title>
</head>
<body>
<h1>Добро пожаловать!</h1>
<p>Версия приложения: v2</p>
<p>Время на сервере <?php echo date("h:i:sa"); ?></p>
</body>