AWS Elastic Beanstalk з файлом docker-compose.yml

Запуск ваших додатків (multi-container) на платформі Docker на Amazon Linux 2 Amazon Machine Images (AMI) з файлом docker-compose.yml за допомогою AWS Elastic Beanstalk Command Line Interface (EB CLI).

pic

Що таке AWS Elastic Beanstalk?

AWS Elastic Beanstalk — це сервіс, який дозволяє розгортати додатки/сервіси, написані на певних мовах програмування, а також додатки на Docker і з використанням певних серверів додатків. Він підтримує веб-сервери, такі як Nginx, Apache, Passenger і Internet Information Services (IIS). На початку 2022 року платформи, доступні в AWS Elastic Beanstalk, включають .Net Core на Linux, .Net на Windows Server, Docker, Glassfish, Go, Java, Node.js, Python, PHP, Ruby, Tomcat.

Коли код завантажується, AWS Elastic Beanstalk займається розгортанням згідно з деякими значеннями конфігурацій за замовчуванням. Після завершення розгортання ви можете змінити свою конфігурацію. У цьому практичному керівництві ми будемо використовувати EB CLI для створення додатку WordPress (контейнери WordPress і MySQL), який працює на платформі Docker на Amazon Linux 2 Amazon Machine Images (AMI) з файлом docker-compose.yml. EB CLI надає інтерактивні команди, що полегшують створення, оновлення та моніторинг середовищ з локального репозиторію.

Необхідні умови:

* Обліковий запис AWS,  
* Права IAM,  
* AWS CLI,  
* pip  
* aws configure з AWS Credentials та регіоном,  
* EB CLI (pip install awsebcli --upgrade --user)  
* Docker Desktop

Відкрийте термінал і виконайте команду нижче, щоб перевірити, чи встановлено EB CLI, використання команди "eb", доступні команди та опції для використання з командою "eb".

eb

pic

Перша команда для ініціалізації поточної директорії за допомогою EB CLI та створення додатку — це "eb init".

mkdir ~/ebsdemo && cd ~/ebsdemoeb init

Виберіть ваш регіон (us-east-1) для AWS Elastic Beanstalk додатку, вкажіть ім'я додатку (myapp — ім'я поточної директорії встановлено за замовчуванням) і виберіть платформу (Docker), на якій буде працювати додаток.

pic

Виберіть гілку платформи (Docker, що працює на 64-розрядному Amazon Linux 2), на якій будуть працювати Docker контейнери. Якщо ви хочете підключити екземпляри, які створює AWS Elastic Beanstalk, виберіть ключову пару.

pic

У поточній директорії (~/ebsdemo), команда "eb init" створює директорії .gitignore та .elasticbeanstalk. Перейдіть до директорії .elasticbeanstalk і перевірте файл config.yml. Ви побачите загальну конфігурацію додатку WordPress у файлі config.yml.

cd ~/ebsdemo/.elasticbeanstalkcat config.yml

Завантажте Docker образи з DockerHub за допомогою наступних команд. Використовуйте ці образи у файлі docker-compose.yml після правильного їх тегування.

docker pull amd64/wordpress && docker pull mysql --platform linux/x86_64

Ми створимо два репозиторії ECR для Docker образів WordPress та MySQL.

aws ecr create-repository --repository-name wordpress  
aws ecr create-repository --repository-name mysql

Щоб отримати URI репозиторіїв ECR, виконайте команду нижче і скопіюйте “repositoryUri” для репозиторіїв WordPress та MySQL. Потім тегуйте локальні образи для завантаження в репозиторії ECR.

aws ecr describe-repositories | grep repositoryUridocker tag  docker tag mysql:latest 609374022227.dkr.ecr.us-east-1.amazonaws.com/mysql:latest && docker tag amd64/wordpress:latest 609374022227.dkr.ecr.us-east-1.amazonaws.com/wordpress:latest

Для входу в репозиторії ECR потрібен токен авторизації.
Запустіть команди нижче для входу в репозиторії ECR та завантаження образів у репозиторії ECR. Після виконання команди "aws ecr get-login-password …" ви повинні побачити "Login Succeeded" в терміналі.

aws ecr get-login-password --region  | docker login --username AWS --password-stdin docker push  && docker push aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 609374022227.dkr.ecr.us-east-1.amazonaws.comdocker push 609374022227.dkr.ecr.us-east-1.amazonaws.com/mysql:latest && docker push 609374022227.dkr.ecr.us-east-1.amazonaws.com/wordpress:latest

Створіть файл docker-compose.yml з наступним вмістом або клонувати його з GitHub репозиторію. Цей файл docker-compose.yml створить контейнер WordPress як фронтенд і контейнер MySQL як бекенд. Змініть значення образів на правильно теговані образи WordPress та MySQL.

cd ~/ebsdemovim docker-compose.yml''  
version: "3.9"  

services:  
 db:  
 image: 609374022227.dkr.ecr.us-east-1.amazonaws.com/mysql:latest  
 volumes:  
 - db_data:/var/lib/mysql  
 - "${EB_LOG_BASE_DIR}/db:/var/log/mysql"  
 restart: always  
 environment:  
 MYSQL_ROOT_PASSWORD: wordpress1234  
 MYSQL_DATABASE: wordpress  
 MYSQL_USER: admin  
 MYSQL_PASSWORD: wordpress12  

 wordpress:  
 depends_on:  
 - db  
 image: 609374022227.dkr.ecr.us-east-1.amazonaws.com/wordpress:latest  
 volumes:  
 - wordpress_data:/var/www/html  
 - "${EB_LOG_BASE_DIR}/wordpress:/var/log/wordpress"  
 ports:  
 - "80:80"  
 restart: always  
 environment:  
 WORDPRESS_DB_HOST: db  
 WORDPRESS_DB_USER: admin  
 WORDPRESS_DB_PASSWORD: wordpress12  
 WORDPRESS_DB_NAME: wordpress  
volumes:  
 db_data: {}  
 wordpress_data: {}  
''

Наступний крок — створити середовище, в якому буде працювати додаток. Створіть середовище, використовуючи команду “eb create name-of-the-environment”.

cd ~/ebsdemoeb create dev-env

Це заархівує файли з поточної директорії (~/ebsdemo), завантажить їх у S3 бакет з ім’ям elasticbeanstalk-- разом з іменем додатку. Потім почнеться створення середовища для додатку. Середовище буде складатися з Security Group для EC2 інстансів, Classic Load Balancer, Security Group для Load Balancer, Auto Scaling Group, двох політик Auto Scaling та їх CloudWatch сповіщення, Launch Configuration і ролей IAM. Якщо ваша IAM роль EC2 інстансу не має політики доступу AmazonEC2ContainerRegistryFullAccess, додайте її до IAM ролі EC2 для доступу до репозиторіїв ECR. Ви можете відкрити ваш додаток за URL-адресою середовища dev-env з консолі управління Elastic Beanstalk або просто виконати команду “eb open” з терміналу. Ви можете підключитися до вашого EC2 інстансу через SSH і перевірити, чи працюють Docker контейнери. Ви також можете змінити конфігурацію середовища з консолі управління Elastic Beanstalk.

eb open

Очистка

Виконайте наступну команду, щоб видалити ваш CloudFormation стек, який був створений EB CLI.

eb terminate

Вам також потрібно видалити репозиторії ECR через CLI або консоль управління AWS.

aws ecr delete-repository --repository-name wordpress --force   
aws ecr delete-repository --repository-name mysql --force

Висновки

AWS Elastic Beanstalk та EB CLI легко використовуються для розгортання додатків/сервісів без необхідності турбуватися про інфраструктуру. У цій статті ми використали файл docker-compose.yml для нашого додатку та репозиторії ECR для Docker образів. Під час створення додатку за допомогою EB CLI, ми вибрали регіон “us-east-1”, ім'я додатку “myapp”, платформу “Docker” та гілку платформи “Docker running on 64bit Amazon Linux 2”.
Після того як ми витягли образи, які використовували у файлі docker-compose.yml, з DockerHub, ми створили репозиторії в ECR, правильно тегували образи та завантажили їх у репозиторії ECR. Потім ми створили файл docker-compose.yml в директорії ~/ebsdemo і запустили середовище за допомогою команди “eb create dev-env”. AWS Elastic Beanstalk взяв на себе всі питання інфраструктури у середовищі dev-env і виконав команди docker-compose на EC2-екземплярі. Нарешті, ми перевірили, що наші контейнери з файлу docker-compose.yml працюють на EC2-екземплярі та отримали доступ до додатку через браузер.

Перекладено з: AWS Elastic Beanstalk with docker-compose.yml file

Leave a Reply

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