AWS Elastic Beanstalk - це простий у використанні програмний продукт, розроблений на Java для розгортання та масштабування веб-додатків та сервісів. Ви легко можете завантажити свій код, і Elastic Beanstalk повністю керує впровадженням, від оптимізації енергоспоживання, балансування навантаження, автоматичного масштабування до відстеження безпеки додатків.
Чому варто вибрати Elastic Beanstalk?
Beanstalk має ті ж елементи, що і ми використовуємо для мережі. Це переднє балансування навантаження в нашій системі, яке може бути ключем до вашої приватної мережі або вебсайту. Залежно від налаштувань кількість асоційованих інстансів може бути як змінною, так і сталою. Коли ви хочете мати велику кількість інстансів, ви можете масштабувати за будь-яким параметром, який можете собі уявити: CPU, RAM, I/O, запити до мережі, час та багато іншого. І, звісно, реляційна база даних може використовуватися як сховище даних. Це сховище підтримується RDS.
У цьому дописі ми проведемо вас через процес запуску Node-додатку з Docker на AWS Elastic Beanstalk.
Підготовка
- Обліковий запис AWS.
- Встановлений Node.
- Обліковий запис на Docker Hub.
- Встановлений Docker та деякий досвід роботи з ним.
- Обліковий запис на Buddy.
Крок 1: Створіть простий Node додаток.
Створіть і перейдіть в директорію:
$ mkdir node-docker-eb
$ cd node-docker-eb
Створіть файл package.json
, відповідаючи "так" на всі запитання:
$ yarn init --yes
Встановіть Express:
$ yarn add express
Створіть файл index.js
:
$ touch index.js
Додайте в файл index.js
наступне:
Тепер ви можете запустити додаток за допомогою цієї команди:
$ node index.js
Ви повинні побачити свій додаток на http://localhost:3000/
:
Крок 2: Dockerize ваш Node додаток.
Що таке Docker?
Docker — це платформа, яка спрощує створення, встановлення та запуск програм за допомогою контейнерів. Контейнери дозволяють програмісту зібрати і розповсюдити додаток як єдине ціле, включаючи всі його частини, такі як бібліотеки та інші залежності. Це дає змогу розробнику бути впевненим, що програма буде працювати на будь-якому іншому Linux-комп'ютері, незалежно від налаштувань, які можуть відрізнятися від системи, на якій писався і тестувався код.
Продовжимо і слідуємо нижчеописаним крокам для Dockerization вашого додатку:
Створіть файл Dockerfile
у вашій проектній директорії та заповніть його наступним кодом:
Тепер, створіть і тегуйте ваш образ за допомогою наступної команди (не забудьте вказати .
!):
$ docker build --tag=node-docker-eb .
Затем, виконайте команду ls
, щоб знайти створений образ:
$ docker image ls
REPOSITORY TAG IMAGE ID
node-docker-eb latest 57b318b00e74
Запустіть ваш образ за допомогою наступної команди: (Зверніть увагу, як порт 80
перенаправлено на порт 3000
за допомогою -p
)
$ docker run -p 80:3000 node-docker-eb
Якщо ви відкриєте браузер на http://localhost:80
(що є тим самим, що і http://localhost
), ви повинні побачити свій додаток знову:
Крок 3: Розгорніть ваш Node додаток на Elastic Beanstalk.
Перейдіть до AWS і відкрийте Elastic Beanstalk.
Якщо ви раніше не використовували цей сервіс, ваш екран має виглядати ось так:
Натискайте Get Started, надайте вашому додатку ім’я (ми назвали його node-docker-eb
), виберіть платформу Docker і оберіть Sample application, а потім натискайте Create application:
Через кілька хвилин ваш додаток буде готовий, і ви побачите повідомлення про успішне запускання:
Натискайте на надане URL (фіолетова стрілка вище), щоб переглянути зразковий додаток:
Крок 4: Замінити зразковий додаток на ваш Dockerized Node додаток
Для цього ми будемо дотримуватися наступного процесу:
- Розробити код локально (готово).
- Створити Docker-образ локально.
- Завантажити створений Docker-образ на Docker Hub.
- Завантажити файл
Dockerrun.aws.json
в Elastic Beanstalk. На цьому етапі Elastic Beanstalk завантажить ваш образ з Docker Hub і розгорне додаток.
Перейдіть на https://hub.docker.com/ і увійдіть у свій обліковий запис. Якщо у вас немає репозиторіїв, ви побачите це:
Натискайте Create a Repository, введіть ім’я репозиторію (ми вибрали node-docker-eb
), і натискайте Create:
Тепер поверніться до терміналу і побудуйте ваш образ. Зверніть увагу, як ми тегуємо наш образ за допомогою /
— замініть це на ваші власні дані.
$ docker build --tag **andrewbest/node-docker-eb**.
Далі, відправте образ, який ви щойно тегували, на Docker Hub (вам потрібно буде увійти в систему). Знову ж таки, замініть /
на ваші власні дані:
$ docker push **andrewbest/node-docker-eb**
Якщо все пройшло добре, повернувшись до Docker Hub, ви повинні побачити, що ваш репозиторій було нещодавно завантажено:
Наступний крок — отримати Elastic Beanstalk для завантаження вашого нового образу і заміни зразкового додатку.
Для цього Elastic Beanstalk використовує файл під назвою Dockerrun.aws.json
. Цей файл містить специфікацію того, як AWS має побудувати та запустити ваш додаток.
Щоб почати, створіть файл Dockerrun.aws.json
.
Цей файл потребує кількох даних:
AWSEBDockerrunVersion
: Встановіть на 1, оскільки ви використовуєте один Docker-контейнер.Image
: Вкажіть поле Name вашого Docker Hub репозиторію.Ports
: Вкажіть список портів, які ви хочете відкрити на вашому контейнері. Elastic Beanstalk використовуватиме передане значення для підключення контейнера до зворотного проксі на хості.
Мій файл Dockerrun.aws.json
виглядає так:
Останній крок — завантажити файл Dockerrun.aws.json
в Elastic Beanstalk. Перейдіть до вашого додатку та натискайте Upload and Deploy:
Виберіть лише файл Dockerrun.aws.json
і натискайте Deploy.
Elastic Beanstalk завантажить ваш образ і запустить його для вас. Після успішного розгортання додатку перейдіть за URL вашого додатку:
Ось і все, вітаємо! Ви успішно розгорнули свій Node додаток з Docker на AWS Elastic Beanstalk.
Щасливого кодування!!!!
Перекладено з: Learn about the elastic Beanstalk and how to deploy node application using this service