Будівництво мікросервісів та CI/CD конвеєра з AWS

Модернізація додатків шляхом переходу від монолітних архітектур до мікросервісів та автоматизації процесів розгортання є критичним кроком на шляху до досягнення масштабованості та гнучкості. У цьому блозі я проведу вас через основні етапи побудови мікросервісів та налаштування CI/CD конвеєра з використанням сервісів AWS.

pic

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

Leave a Reply

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