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