AWS: Переход с Elastic Beanstalk на App Runner


Справочная информация

Я использую AWS Elastic Beanstalk в течение пяти лет для размещения своего хобби-приложения. Приложение докеризовано, и у меня есть две среды: тестовая и рабочая. Я запускал его с помощью экземпляров t2.small, поскольку все, что меньше, не справляется с созданием контейнеров Docker.

Я развертываю новые релизы с помощью EB CLI. Я говорил eb deploy prod и новая версия развертывалась. Затем Docker Platform Elastic Beanstalk выбирает Dockerfile из корня проекта, и все работает.

Мне нужен Application Load Balancer (ALB) для SSL/HTTPS. ALB довольно дороги для хобби-проектов, а поскольку у меня было два окружения, мне понадобилось два. Позже стало возможным разделять Application Load Balancer между несколькими средами Elastic Beanstalk, поэтому понадобился только один. До этого я попробовал обеспечить SSL с помощью Let’s Encrypt, чтобы мне вообще не нужны были балансировщики нагрузки. С точки зрения затрат это было эффективно, но управление им оказалось слишком трудоемким и потребовало бы полной переработки для поддержки Amazon Linux 2. Поэтому я застрял с одним ALB, который отнимал около 30% операционных расходов.

Затем появился новый сервис AWS App Runner со следующим предложением:

App Runner автоматически создает и развертывает веб-приложение, балансирует нагрузку с помощью шифрования и масштабируется для удовлетворения ваших потребностей в трафике.

Звучит неплохо, давайте попробуем!

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

Первым шагом было выяснить, как развернуть новый сервис App Runner. К счастью, для этого существует множество отличных руководств. Я последовал этому.

Я хочу развертывать из своего репозитория GitHub, поэтому в соответствии с инструкциями я установил AWS Connector for GitHub на свою организацию GitHub. Затем все остальное было проще простого: выберите репозиторий и ветку и включите автоматическое развертывание при изменении репозитория. Больше не нужно вручную запускать eb deploy!

Сервис может быть настроен через пользовательский интерфейс или файл apprunner.yaml. Я продолжу с пользовательским интерфейсом, но, скорее всего, перейду на конфигурационный файл, когда все заработает.

Затем наступает первая интересная часть: Мне нужно добавить команды для сборки и запуска приложения. Elastic Beanstalk не требовал их, он просто выбрал Dockerfile, в котором были определены все шаги. Похоже, что я буду использовать не свой Dockerfile, а скрипты, которые использовал Dockerfile. Это означает, что я не могу определить базовый образ или контролировать процесс создания ОС контейнера. Это может стать проблемой в какой-то момент.

Мне нужно выбрать время выполнения сборки контейнера. Я использую Nodejs 14, который доступен, но есть вероятность, что вы используете что-то другое.

Добавление переменных окружения аналогично Elastic Beanstalk, просто заполняем поля с ключевыми значениями. Остальные конфигурации я оставлю по умолчанию. Затем я нажимаю «Create service» и через ~5 минут у меня есть работающее приложение! Или почти.

Оказалось, что моя команда сборки нуждалась в изменении, но обновления были откачены автоматически. Как мне отладить это? Пользовательский интерфейс App Runner мало что показывает. Мне потребовалось время, чтобы найти ссылку на CloudWatch, и оттуда я смог найти соответствующие журналы.

Оказалось, что я устанавливал только prod-зависимости, но требовались также dev-зависимости. Исправив это, я получил работающее приложение, и это заняло у меня всего пару часов!

Мне придется повторить эти шаги, чтобы добавить вторую службу для второй среды.

Пользовательский домен

App Runner предоставляет мне домен типа foobar.eu-west-1.awsapprunner.com. Оставалось добавить пользовательский домен типа example.com.

Добавление пользовательского домена — дело простое. Пользовательский интерфейс App Runner дает мне записи DNS CNAME для проверки сертификата и запись CNAME, указывающую на домен App Runner. Скопируйте их в настройки DNS и подождите, пока настройки DNS распространятся.

У меня есть два домена, example.com и test.example.com. Я использую Route 53 в качестве DNS-провайдера.

Затем я обнаружил следующее:

Если вы используете Amazon Route 53 в качестве DNS-провайдера, вы можете добавить поддомен, но поддержка добавления корневого домена на данный момент недоступна.

Вот так облом. Поэтому example.com не будет работать. Я перенес тестовую среду с доменом test.example.com в App Runner, но мне придется сменить DNS-провайдера, чтобы заставить работать рабочий домен. Надеюсь, это будет исправлено в будущем.

Заключение

Я хотел перенести свое докеризованное приложение, работающее в Elastic Beanstalk, на App Runner. Начало работы с App Runner заняло у меня около часа, затем еще час я возился с настройками, и третий — чтобы разобраться с пользовательскими доменами. Неплохо!

Понравилось:

  • Начало работы было отличным.
  • Настройка авторазвертывания при изменении репозитория GitHub — это просто галочка. Не нужно ничего добавлять в мой CI-конвейер!

Не понравилось:

  • Тихий сбой развертывания. Мне потребовалось некоторое время, чтобы понять, где находятся соответствующие журналы. Они находились в CloudWatch.
  • Невозможность использовать корневой домен в качестве пользовательского домена при использовании Route 53. Это вынуждает меня менять поставщика DNS.

В целом ощущения от App Runner очень похожи на Elastic Beanstalk. Он просто лучше абстрагирует инфраструктуру и не требует отдельных затрат на запуск различных служб, таких как балансировщик нагрузки. У меня есть ощущение, что будут еще ограничения, с которыми я еще не сталкивался, но пока я доволен результатом!

Оцените статью
devanswers.ru
Добавить комментарий