Розгортання Docker-контейнера на AWS з Elastic Beanstalk

pic

Огляд:

Elastic Beanstalk — це сервіс AWS, який використовує Amazon EC2 та S3 для розгортання, управління та масштабування ваших веб-додатків. Він використовує керовані контейнери, які підтримують Node.js, Java, Ruby, Docker та інші. Є кілька способів розгортання додатків за допомогою Elastic Beanstalk. Ви можете розгорнути за допомогою консолі керування, CLI або API. Найдивовижніше в Elastic Beanstalk полягає в тому, що після завантаження вашого додатка він автоматично обробляє такі процеси, як балансування навантаження, моніторинг стану, масштабування та інше. Дізнайтеся більше про Elastic Beanstalk! В цілому, Elastic Beanstalk будує ваш Docker-образ за допомогою завантаженого вихідного коду, а потім розгортає його на екземплярах EC2, що працюють в середовищі Elastic Beanstalk.

В цьому посібнику ми:

  • Розгорнемо наш Docker-контейнер за допомогою Elastic Beanstalk, використовуючи конфігурацію одного контейнера (запуск одного контейнера на кожному екземплярі EC2), використовуючи Elastic Beanstalk CLI. (Слідкуйте за іншими посібниками про розгортання за допомогою інших методів).
  • Використаємо Dockerfile для нашої конфігурації для простоти, замість файлу визначення Dockerrun.aws.json, який є ще однією конфігурацією Elastic Beanstalk.

Цей посібник складається з 3 частин: створення додатка, докеризація додатка та розгортання додатка за допомогою Elastic Beanstalk. Ви не обмежені використанням Node.js додатка, який я створюю в цьому посібнику. Ви можете пропустити частини 1 та 2, якщо у вас вже є докеризований додаток або якщо ви завантажите та налаштуєте Node.js додаток, який я надав на GitHub. Додаток, який я створюю нижче, це той самий додаток, який я надав на GitHub, але з деякими додатковими налаштуваннями Travis CI.

Передумови:

  1. Створіть акаунт в AWS. AWS пропонує безкоштовний тариф, який дає доступ до багатьох цікавих сервісів, таких як Amazon EC2 та S3.
  2. Завантажте командний інструмент Elastic Beanstalk (EB), який ми будемо використовувати в цьому посібнику для розгортання нашого Docker-контейнера вручну з нашого комп’ютера. Слідуйте цим інструкціям, щоб налаштувати EB CLI.
  3. Завантажте останню версію Node.js (якщо ви слідуєте частині 1).
  4. Завантажте Docker.
  5. Завантажте та встановіть Git. Git використовується EB CLI для розгортання вашого останнього закоміченого коду.
  6. Налаштуйте ваш улюблений текстовий редактор. Я люблю використовувати Visual Studio Code

Частина 1: Створення нашого додатка

Спочатку я створю дуже простий додаток на Node.js, який я докеризую в частині 2 посібника.

  • Створіть каталог для вашого додатка, я назвав його “elastic-beanstalk-tutorial”.
  • Відкрийте командний рядок і перейдіть в кореневий каталог вашого проекту. Ініціалізуйте ваш проект за допомогою команди npm init -f.. Після виконання ініціалізації, npm створить файл package.json для вас.
  • Створіть новий файл у кореневому каталозі вашого проекту, званий app.js.
    В файлі app.js додайте наступний вміст:

App.js містить код, який запускає дуже простий веб-сервер за допомогою express та записує запити за допомогою morgan.

  • Тепер потрібно встановити наші залежності за допомогою команди npm install --save express morgan, що встановить і додасть наші залежності в файл package.json.
  • Додайте скрипт запуску до секції скриптів в package.json, який нам знадобиться на етапі докеризації: "start": "node app.js"
  • Тепер, щоб переконатися, що все працює нормально, запустіть команду npm start, і ви повинні побачити в консолі повідомлення App running at http://localhost:8080. Відкрийте веб-браузер і ви повинні побачити текст hello world!! на екрані.

Частина 2: Докеризація нашого додатка

Тепер, коли у нас є дуже простий веб-сервер на Node.js, ми можемо почати докеризувати додаток у підготовку до розгортання на AWS.

  • Додайте новий файл до кореневого каталогу вашого проекту під назвою "Dockerfile". Dockerfile міститиме інструкції для створення вашого додатка в Docker-образ. Нижче наведено вміст Dockerfile для цього додатка:

Перший рядок вказує на використання базового образу node alpine. Alpine-образ відмінно підходить, якщо ви хочете створити найменший можливий образ, оскільки він займає всього близько 5MB, але ви можете використовувати будь-який образ, який бажаєте. Решта файлу містить стандартні Docker-команди з інструкціями щодо того, які файли потрібно скопіювати та як запустити веб-сервер тощо.

  • Тепер додайте новий файл під назвою .dockerignore до кореневого каталогу вашого проекту. Файл .dockerignore вказує, які файли та папки ігнорувати на етапі COPY. В .dockerignore додайте 2 рядки, щоб ігнорувати node_modules і npm debug log.

  • Тепер, коли наші Docker-конфігурації налаштовані, ми можемо побудувати та запустити наш образ для тестування перед розгортанням за допомогою Elastic Beanstalk. Відкрийте командний рядок у кореневому каталозі вашого додатка. Примітка: на платформах Windows можливо доведеться використовувати Docker Quickstart Terminal для виконання команд Docker, який поставляється з Docker-завантаженнями для Windows.

  • У вашому терміналі виконайте команду docker build -t eb-tutorial .. Ця команда побудує ваш образ і позначить його ім'ям "eb-tutorial". Ви можете позначити його будь-яким ім'ям. Якщо не було помилок при побудові образу, ви можете виконати команду docker images, і ваш образ має з'явитись у списку.

  • Щоб запустити контейнер з щойно створеного Docker-образу, використовуйте команду docker run -d -p 8080:8080 --name eb-tutorial eb-tutorial. Флаг -d запускає контейнер у від'єднаному режимі, -p вказує конфігурацію портів, а флаг name вказує ім'я контейнера. Тепер, виконуючи команду docker ps, ви побачите ваш працюючий контейнер. Перейдіть на http://localhost:8080, і ви знову повинні побачити повідомлення "hello world!!". Примітка: якщо ви працюєте на Windows, localhost може не працювати, потрібно перейти за адресою http://:8080/. IP-адреса зазвичай відображається, коли Docker Quickstart Terminal запускається.

Частина 3: Розгортання нашого додатка за допомогою Elastic Beanstalk CLI

Ура! Тепер, коли ми налаштували наш Node.js додаток і Docker, ми нарешті можемо розгорнути його на AWS за допомогою Elastic Beanstalk!

  • Відкрийте термінал у кореневому каталозі вашого додатка. Перша команда, яку ми виконаємо (якщо ви налаштували eb cli) — це eb init. Команда init налаштовує Elastic Beanstalk для вашого проекту.
  • Якщо це перший раз, коли ви використовуєте eb cli, перше, що він запитає, — це ваші облікові дані, тому вставте ваші ключі доступу. Якщо у вас немає ключів доступу, потрібно перейти до IAM/Users і створити нового користувача з повним доступом або вибраними ролями доступу для цього користувача. Потім переконайтеся, що завантажили ключі, коли вас запитають, і збережіть їх у безпечному місці, оскільки ви матимете лише один шанс завантажити їх.
    Вставте ці ключі в командний рядок.
  • Команда init потім запитає іншу інформацію, таку як регіон, ім'я додатка тощо... Просто дотримуйтесь підказок і введіть правильну інформацію. Примітка: CLI визначить, що ви використовуєте Docker, оскільки у вашому додатку є конфігурації Docker. Також я зазвичай відмовляюся від налаштування "code commit" і "ssh".
  • Після успішного виконання команди init зверніть увагу на нову директорію в вашому проекті, що має назву .elasticbeanstalk, яка містить згенеровані конфігурації. Тепер ми можемо створити нове середовище для розгортання за допомогою команди eb create. Слідуйте підказкам цієї команди. Якщо ви перейдете до сервісу Elastic Beanstalk у консольному керуванні AWS, ви побачите, що ваш новий додаток створюється, як показано нижче. Це має зайняти кілька хвилин, поки ваш додаток буде створено.

pic

очікуване розгортання

  • Після того, як ваш додаток буде успішно створений і розгорнутий, він повинен виглядати приблизно так:

pic

успішне розгортання

  • Важлива примітка: Я використовую git у цьому посібнику, і якщо git встановлений, EB CLI буде розгортати тільки останній зафіксований код. Іноді, якщо ви розгортаєте додаток і забуваєте зафіксувати код, розгортання вашого додатка може не вдатися, або додаток може працювати неналежним чином. EB CLI зазвичай попередить вас у командному рядку, якщо ви намагаєтесь розгорнути незакріплені зміни. Більше інформації про eb deploy тут.
  • Клікніть на ваш додаток і ви повинні побачити сторінку, подібну до наведеного нижче. Стан здоров'я має бути зеленим, має бути запущена конфігурація Docker. Якщо ви клікнете на URL, на якому працює ваш додаток, ви потрапите на ваш додаток і побачите те ж саме повідомлення "hello world!!", яке ви бачили, коли запускали ваш додаток локально.

pic

Ура! Ми успішно розгорнули наш додаток з Elastic Beanstalk!!

Як я згадував у розділі огляду цього посібника, ваш Docker контейнер працює на EC2 інстансі. Якщо ви хочете побачити свій працюючий EC2 інстанс, ви можете перейти до консолі EC2 у вашій консольній панелі керування і переглянути його там, де ви зможете отримати інформацію про інстанс, таку як тип, стан та іншу інформацію про ваш інстанс.

pic

Консоль EC2

Заключні нотатки:

І ось так, ми розгорнули наш додаток на AWS за допомогою кількох простих команд CLI! Вам не потрібно турбуватися про ручне налаштування EC2 інстансів, розподіл ресурсів чи масштабування — все це робиться за вас за допомогою Elastic Beanstalk!

Пам'ятайте, що з Elastic Beanstalk ви не обмежуєтесь лише використанням Docker або CLI! Elastic Beanstalk дає вам можливість використовувати кілька мов програмування та платформ, а також різні способи розгортання вашого додатка, що підходять під ваші потреби.

Не соромтеся давати мені поради щодо інших посібників по Elastic Beanstalk, які ви хочете побачити!

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

Відмова від відповідальності

Я є працівником IBM. Вигляд і думки, виражені в цьому блозі, є моїми і не обов'язково відображають позиції, стратегії чи думки компанії.

Перекладено з: Deploying a Docker Container to AWS with Elastic Beanstalk

Leave a Reply

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