Дізнайтеся про Elastic Beanstalk та як розгорнути Node додаток за допомогою цього сервісу.

pic

AWS Elastic Beanstalk - це простий у використанні програмний продукт, розроблений на Java для розгортання та масштабування веб-додатків та сервісів. Ви легко можете завантажити свій код, і Elastic Beanstalk повністю керує впровадженням, від оптимізації енергоспоживання, балансування навантаження, автоматичного масштабування до відстеження безпеки додатків.

Чому варто вибрати Elastic Beanstalk?

pic

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/:

pic

Крок 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), ви повинні побачити свій додаток знову:

pic

Крок 3: Розгорніть ваш Node додаток на Elastic Beanstalk.

Перейдіть до AWS і відкрийте Elastic Beanstalk.
Якщо ви раніше не використовували цей сервіс, ваш екран має виглядати ось так:

pic

Натискайте Get Started, надайте вашому додатку ім’я (ми назвали його node-docker-eb), виберіть платформу Docker і оберіть Sample application, а потім натискайте Create application:

pic

Через кілька хвилин ваш додаток буде готовий, і ви побачите повідомлення про успішне запускання:

pic

Натискайте на надане URL (фіолетова стрілка вище), щоб переглянути зразковий додаток:

pic

Крок 4: Замінити зразковий додаток на ваш Dockerized Node додаток

Для цього ми будемо дотримуватися наступного процесу:

  1. Розробити код локально (готово).
  2. Створити Docker-образ локально.
  3. Завантажити створений Docker-образ на Docker Hub.
  4. Завантажити файл Dockerrun.aws.json в Elastic Beanstalk. На цьому етапі Elastic Beanstalk завантажить ваш образ з Docker Hub і розгорне додаток.

Перейдіть на https://hub.docker.com/ і увійдіть у свій обліковий запис. Якщо у вас немає репозиторіїв, ви побачите це:

pic

Натискайте Create a Repository, введіть ім’я репозиторію (ми вибрали node-docker-eb), і натискайте Create:

pic

pic

Тепер поверніться до терміналу і побудуйте ваш образ. Зверніть увагу, як ми тегуємо наш образ за допомогою / — замініть це на ваші власні дані.

$ docker build --tag **andrewbest/node-docker-eb**.

Далі, відправте образ, який ви щойно тегували, на Docker Hub (вам потрібно буде увійти в систему). Знову ж таки, замініть / на ваші власні дані:

$ docker push **andrewbest/node-docker-eb**

Якщо все пройшло добре, повернувшись до Docker Hub, ви повинні побачити, що ваш репозиторій було нещодавно завантажено:

pic

Наступний крок — отримати 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:

pic

Виберіть лише файл Dockerrun.aws.json і натискайте Deploy.

pic

Elastic Beanstalk завантажить ваш образ і запустить його для вас. Після успішного розгортання додатку перейдіть за URL вашого додатку:

pic

pic

Ось і все, вітаємо! Ви успішно розгорнули свій Node додаток з Docker на AWS Elastic Beanstalk.

Щасливого кодування!!!!

pic

Перекладено з: Learn about the elastic Beanstalk and how to deploy node application using this service

Leave a Reply

Your email address will not be published. Required fields are marked *