Модернізація додатків шляхом переходу від монолітних архітектур до мікросервісів та автоматизації процесів розгортання є критичним кроком на шляху до досягнення масштабованості та гнучкості. У цьому блозі я проведу вас через основні етапи побудови мікросервісів та налаштування CI/CD конвеєра з використанням сервісів AWS.
1. Проектування та оцінка вартості
Перший етап полягав у створенні діаграми архітектури, яка відображала перехід від монолітного до мікросервісного додатка. Для оцінки вартості був використаний AWS Pricing Calculator, щоб забезпечити відповідність бюджету.
2. Розуміння існуючого монолітного додатку
Монолітний додаток було проаналізовано та протестовано на функціональність. Це допомогло забезпечити плавний перехід до мікросервісів без порушення існуючих операцій.
3. Налаштування середовища розробки
AWS Cloud9 було використано як інтегровану середу розробки (IDE) для управління кодом та полегшення розробки мікросервісів. Ось як було налаштоване середовище:
Налаштування Cloud9
# Створення інстансу Cloud9
aws cloud9 create-environment-ec2 \
--name MicroservicesDevEnv \
--instance-type t2.micro \
--description "Development environment for microservices"
Ініціалізація Git-репозиторію
# Ініціалізація Git та пуш до AWS CodeCommit
git init
git remote add origin https://git-codecommit..amazonaws.com/v1/repos/microservices-repo
git add .
git commit -m "Initial commit for microservices"
git push -u origin main
4. Налаштування та тестування мікросервісів в Docker
Монолітний додаток було розділено на два мікросервіси: Customer та Employee. Кожен мікросервіс було контейнеризовано за допомогою Docker.
Dockerfile для мікросервісу Customer
# Dockerfile для мікросервісу customer
FROM node:16
# Встановлення робочого каталогу
WORKDIR /usr/src/app# Копіювання файлів додатку
COPY package*.json ./
RUN npm installCOPY . .
EXPOSE 3000
CMD ["npm", "start"]
Створення та тестування Docker-образу
# Створення Docker-образу
docker build -t customer-service .
# Запуск контейнера локально
docker run -p 3000:3000 customer-service
Аналогічно, мікросервіс для працівника (employee) слідував подібному процесу. Налаштування портів та коригування коду забезпечили коректну роботу кожного сервісу.
5. Розгортання з ECS та ECR
Docker-образи були завантажені до Amazon ECR і розгорнуті за допомогою Amazon ECS.
Пуш Docker-образу до Amazon ECR
# Аутентифікація Docker до вашого репозиторію ECR
aws ecr get-login-password --region | docker login --username AWS --password-stdin .dkr.ecr..amazonaws.com
# Тегування та пуш Docker-образу
docker tag customer-service:latest .dkr.ecr..amazonaws.com/customer-service
docker push .dkr.ecr..amazonaws.com/customer-service
Опис завдання для ECS
{
"family": "customer-service",
"containerDefinitions": [
{
"name": "customer-service-container",
"image": ".dkr.ecr..amazonaws.com/customer-service:latest",
"memory": 512,
"cpu": 256,
"portMappings": [
{
"containerPort": 3000,
"hostPort": 3000
}
]
}
]
}
6. Налаштування балансування навантаження
Було налаштовано Application Load Balancer (ALB) для маршрутизації трафіку до цільових груп, що представляють два мікросервіси.
Створення цільових груп
aws elbv2 create-target-group \
--name customer-service-target-group \
--protocol HTTP \
--port 3000 \
--vpc-id
7. Автоматизація розгортання за допомогою CI/CD
Для автоматизації розгортання були використані AWS CodePipeline та CodeDeploy.
Кожен мікросервіс мав свій власний CI/CD конвеєр.
Приклад конфігурації CodePipeline
{
"pipeline": {
"name": "customer-service-pipeline",
"roleArn": "arn:aws:iam:::role/AWS-CodePipeline-Service-Role",
"stages": [
{
"name": "Source",
"actions": [
{
"name": "Source",
"actionTypeId": {
"category": "Source",
"owner": "AWS",
"provider": "CodeCommit",
"version": "1"
},
"configuration": {
"RepositoryName": "microservices-repo",
"BranchName": "main"
}
}
]
},
{
"name": "Deploy",
"actions": [
{
"name": "Deploy",
"actionTypeId": {
"category": "Deploy",
"owner": "AWS",
"provider": "CodeDeploy",
"version": "1"
},
"configuration": {
"ApplicationName": "customer-service-app",
"DeploymentGroupName": "customer-service-group"
}
}
]
}
]
}
}
8. Ітеративні оновлення та масштабування
Оновлення коду мікросервісу запускало CI/CD конвеєр, автоматично розгортаючи нові зміни. Система також тестувалася на масштабованість шляхом коригування завдань сервісу ECS для високого навантаження.
Масштабування ECS сервісу
aws ecs update-service \
--cluster microservices-cluster \
--service customer-service \
--desired-count 3
Використані сервіси AWS
- Обчислення та контейнери: AWS Cloud9, Amazon ECS, Docker
- Зберігання та реєстр: Amazon ECR
- Мережеві сервіси: Application Load Balancer, Target Groups
- Контроль версій: AWS CodeCommit
- Автоматизація CI/CD: AWS CodePipeline, AWS CodeDeploy
- Безпека: Security Groups
Висновок
Завдяки використанню сервісів AWS, ми здійснили перехід від монолітного додатка до архітектури мікросервісів та побудували CI/CD конвеєр для автоматизації розгортань. Результатом став високомасштабований, відмовостійкий та ефективний сервіс, що підтримує сучасні методи розробки.
Розпочніть свою подорож з AWS та Docker сьогодні, щоб модернізувати свої додатки!
Перекладено з: Building Microservices and a CI/CD Pipeline with AWS