Elastic Beanstalk — це дуже популярний інструмент для розгортання веб-додатків, його простота та можливості роблять його особливим.
У цьому посібнику ми подивимося, як ми можемо розгорнути контейнеризований проєкт в Elastic Beanstalk.
Терміни
AWS Elastic Beanstalk — це простий у використанні сервіс для розгортання та масштабування веб-додатків і служб.
AWS CodePipeline — це повністю керована служба безперервної доставки, яка допомагає автоматизувати ваші релізи.
Docker робить розробку ефективною та передбачуваною.
Починаємо
КРОК 1: Створення нового репозиторію для зберігання Docker-образу
- Перейдіть до Elastic Container Registry у консолі AWS.
- Створіть новий репозиторій (з опціями за замовчуванням).
- Скопіюйте URI реєстру створеного репозиторію для кроку 3.
КРОК 2: Створення проєкту для CodeBuild
- Перейдіть до консолі AWS.
- Перейдіть до CodeBuild.
- Запишіть ім'я роль сервісу, яку ви використовуєте на цьому кроці (воно буде використовуватися на кроці 6).
- Створіть новий проєкт для складання (з опціями за замовчуванням).
ПРИМІТКА: У нас буде вихідний артефакт, і переконайтесь, що ви активували збереження артефакта в S3.
- Вкажіть свій обліковий запис git (я використовував GitHub репозиторій).
- Вкажіть, що файл для складання (build spec) надається у вихідному репозиторії.
- Створіть проєкт для CodeBuild.
КРОК 3: Специфікації для складання
У вашому репозиторії додайте наступне в новий файл під назвою buildspec.yml (цей файл має бути в батьківській теці).
version: 0.2
phases:
pre_build:
commands:
- echo Logging in to Amazon ECR...
- echo $CODEBUILD_SOURCE_VERSION
- $(aws ecr get-login --region $AWS_DEFAULT_REGION --no-include-email)
- REPOSITORY_URI=**_<>_**
- COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
- IMAGE_TAG=build-$(echo $CODEBUILD_BUILD_ID | awk -F":" '{print $2}')
build:
commands:
- echo Build started on `date`
- echo Building the Docker image...
- docker build -t $REPOSITORY_URI:latest .
- docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG
post_build:
commands:
- echo Build completed on `date`
- echo Pushing the Docker images...
- docker push $REPOSITORY_URI:latest
- docker push $REPOSITORY_URI:$IMAGE_TAG
- echo Writing image definitions file...
- printf '{"AWSEBDockerrunVersion":"1","Image":{"Name":"%s","Update":"true"},"Ports":[{"ContainerPort":80,"HostPort":80}]}' $REPOSITORY_URI:$IMAGE_TAG > Dockerrun.aws.json
- cat Dockerrun.aws.json
artifacts:
files: Dockerrun.aws.json
Що робить ця специфікація: для кожного виконання складання коду вона будує Docker-контейнер за допомогою Dockerfile
в батьківській теці і пушить збудований образ в Elastic Container Registry з тегом latest
.
Нарешті, скрипт автоматично запише вихідні дані у файл під назвою Dockerrun.aws.json
, який буде використовуватися Elastic Beanstalk для запуску програмного забезпечення.
КРОК 4: Створення середовища Elastic Beanstalk
- Перейдіть до Elastic Beanstalk (в консолі AWS).
- Створіть новий додаток та середовище.
ПРИМІТКА: Ви можете створити кілька середовищ в одному додатку та мати різні проєкти для конвеєра, щоб розгортати в кожному середовищі. - Виберіть Docker як платформу та залиште все інше за замовчуванням.
КРОК 5: Створення конвеєра
- Перейдіть до AWS Codepipeline (в консолі AWS).
- Створіть новий конвеєр.
- На етапі складання виберіть проєкт для складання, який ви створили на кроці 2.
- На етапі розгортання виберіть Elastic Beanstalk і виберіть додаток та середовище, які ви створили на КРОЦІ 3.
КРОК 6: Налаштування дозволів
- Перейдіть до IAM і виберіть Roles (Ролі) (в лівій панелі).
- Виберіть роль, яку ви створили на кроці 2.
- Виберіть прикріпити політику та
AmazonEC2ContainerRegistryFullAccess
.
Час для тестування:
- Перейдіть до AWS Codepipeline і натисніть "release changes".
- Ви побачите, що всі три етапи будуть виконані.
Бум 🎉, ваш Docker-контейнер тепер розгорнуто і доступний для решти світу!
Перекладено з: CI/CD system with AWS Codepipeline and Elastic Beanstalk for any docker project