Ответ
EC2 (Elastic Compute Cloud) — это сервис виртуальных серверов (инстансов), где вы полностью управляете операционной системой, устанавливаете ПО, настраиваете сеть и вручную занимаетесь масштабированием. Это инфраструктура как сервис (IaaS).
ECS (Elastic Container Service) — это сервис оркестрации контейнеров (контейнеры как сервис, CaaS). Он автоматизирует развертывание, управление и масштабирование контейнеризованных приложений, работающих поверх кластера EC2-инстансов или бессерверной платформы Fargate.
Ключевые отличия на практике:
- Уровень абстракции: EC2 — это виртуальная машина. ECS — платформа для запуска задач (Tasks) и сервисов (Services), состоящих из одного или нескольких контейнеров.
- Масштабирование: В EC2 вы масштабируете количество инстансов (Auto Scaling Groups). В ECS вы масштабируете количество копий задачи (desired count) в сервисе, а ECS сам распределяет их по инстансам кластера.
- Управление состоянием: Для stateful-нагрузок (базы данных) часто используют EC2. ECS в паре с Fargate идеально подходит для stateless-микросервисов.
- Пример использования: Веб-приложение на Node.js можно развернуть на инстансе EC2, установив Node.js и PM2. Тот же микросервис, упакованный в Docker-образ, будет запущен в ECS как задача, описанная в Task Definition.
Пример Task Definition для ECS (JSON):
{
"family": "api-service",
"networkMode": "awsvpc",
"containerDefinitions": [
{
"name": "app",
"image": "123456789.dkr.ecr.eu-west-1.amazonaws.com/my-api:latest",
"portMappings": [
{
"containerPort": 3000,
"protocol": "tcp"
}
],
"environment": [
{
"name": "DB_HOST",
"value": "prod-database.cluster-abc.eu-west-1.rds.amazonaws.com"
}
],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/ecs/api-service",
"awslogs-region": "eu-west-1",
"awslogs-stream-prefix": "ecs"
}
}
}
],
"requiresCompatibilities": ["FARGATE"],
"cpu": "512",
"memory": "1024"
}