0Pricing
AWS Solutions Architect · Урок

Кластеры ECS, определения задач и сервисы

Определите описания задач ECS с образами контейнеров и ограничениями ресурсов, зарегистрируйте их в кластере и создайте сервис для поддержания требуемого количества экземпляров.

«Кластеры ECS, определения задач и сервисы» — бесплатный урок AWS Solutions Architect на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AWS Solutions Architect, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AWS Solutions Architect содержит 4 уроков всего.

Зачем нужны контейнеры в AWS

Контейнеры объединяют приложение и все его зависимости в переносимый изолированный блок, который одинаково работает в разных средах. Amazon ECS (Elastic Container Service) — это полностью управляемая AWS-служба оркестрации контейнеров, запускающая контейнеры Docker без необходимости управлять плоскостью управления. ECS глубоко интегрирован со службами AWS (IAM, ALB, CloudWatch, Secrets Manager) и рекомендуется для запуска контейнеров в AWS без сложностей Kubernetes.

Кластеры ECS: единица группировки

Кластер ECS — это логическая группа вычислительных ресурсов, в которой запускаются контейнеры. Кластер может содержать экземпляры EC2 (тип запуска EC2), ресурсы Fargate (тип запуска Fargate) или оба вида ресурсов. В одном кластере можно разместить несколько служб и автономных задач. Кластеры относятся к одному региону, но охватывают несколько зон доступности. Распространённый подход — создавать по одному кластеру для каждой среды (разработка, тестирование и рабочая среда), размещая в каждом кластере несколько служб для разных микрослужб.

aws ecs create-cluster \
  --cluster-name 'MyAppCluster' \
  --capacity-providers FARGATE FARGATE_SPOT \
  --default-capacity-provider-strategy \
    capacityProvider=FARGATE,weight=1,base=1

Определения задач: схема запуска

Определение задачи — это схема запуска контейнеров в ECS, аналогичная файлу Docker Compose. В нём указываются: образы контейнеров (URI ECR или Docker Hub), выделение CPU и памяти, сопоставления портов, переменные среды, конфигурация журналирования, тома и роль задачи IAM. Определение задачи имеет версии, и каждая редакция неизменяема. В одной задаче можно определить несколько контейнеров для шаблонов с боковыми контейнерами (основное приложение, отправитель журналов и агент мониторинга).

{
  'family': 'myapp-task',
  'networkMode': 'awsvpc',
  'requiresCompatibilities': ['FARGATE'],
  'cpu': '512',
  'memory': '1024',
  'executionRoleArn': 'arn:aws:iam::123456789012:role/ecsTaskExecutionRole',
  'taskRoleArn': 'arn:aws:iam::123456789012:role/myAppTaskRole',
  'containerDefinitions': [{
    'name': 'myapp',
    'image': '123456789012.dkr.ecr.us-east-1.amazonaws.com/myapp:latest',
    'portMappings': [{'containerPort': 8080}]
  }]
}

Роль задачи и роль выполнения

Задачи ECS используют две отдельные роли IAM с разными назначениями. Роль выполнения задачи используется агентом ECS для загрузки образов контейнеров из ECR, отправки журналов в CloudWatch и получения секретов из Secrets Manager или Parameter Store при запуске задачи. Роль задачи используется кодом приложения внутри контейнера для вызова служб AWS (S3, DynamoDB, SQS). Всегда назначайте каждой роли минимально необходимые разрешения отдельно — никогда не предоставляйте роли выполнения разрешения, которые не нужны приложению.

Службы ECS для длительных рабочих нагрузок

Служба ECS поддерживает заданное количество одновременно работающих экземпляров задач (желаемое количество). Если задача завершается с ошибкой или останавливается, планировщик службы автоматически запускает замену. Службы также интегрируются с Elastic Load Balancing для распределения трафика и поддерживают поэтапные развёртывания и развёртывания blue/green. Используйте службу для любого длительного процесса (веб-сервера, сервера API или фонового обработчика). Для разовых заданий вместо этого запускайте автономную задачу.

aws ecs create-service \
  --cluster 'MyAppCluster' \
  --service-name 'MyAppService' \
  --task-definition 'myapp-task:5' \
  --desired-count 3 \
  --launch-type FARGATE \
  --network-configuration '{
    "awsvpcConfiguration": {
      "subnets": ["subnet-aaa111", "subnet-bbb222"],
      "securityGroups": ["sg-xyz"],
      "assignPublicIp": "DISABLED"
    }
  }'

Сетевые режимы: awsvpc и bridge

Сетевой режим awsvpc предоставляет каждой задаче ECS собственный сетевой интерфейс Elastic (ENI) и частный IP-адрес внутри Вашего VPC — как у экземпляра EC2. Это позволяет детально управлять группами безопасности для каждой задачи и обязательно для задач Fargate. Сетевой режим bridge использует встроенную виртуальную сеть Docker на узле с сопоставлением портов узла и контейнера; при этом задача использует ENI узлового экземпляра EC2. Для экзамена SAA-C03 запомните: Fargate всегда использует awsvpc, а тип запуска EC2 может использовать любой из двух режимов.

Подключение балансировщика нагрузки к службе ECS

Зарегистрируйте службу ECS в целевой группе ALB, чтобы распределять трафик между экземплярами задач. При запуске новой задачи ECS автоматически регистрирует её в целевой группе, а при остановке удаляет её из группы. Настройте период ожидания перед проверкой работоспособности (например, 60–120 секунд), чтобы контейнеры успели запуститься до начала проверок. Без этого периода ALB может пометить медленно запускающийся контейнер как неработоспособный ещё до его готовности, что приведёт к циклической замене задач.

aws ecs create-service \
  --cluster 'MyAppCluster' \
  --service-name 'MyAppService' \
  --load-balancers \
    'targetGroupArn=arn:aws:elasticloadbalancing:...,containerName=myapp,containerPort=8080' \
  --health-check-grace-period-seconds 120 \
  --task-definition 'myapp-task:5' \
  --desired-count 3

Поэтапное и blue/green-развёртывание

Службы ECS поддерживают две стратегии развёртывания: поэтапное обновление постепенно заменяет старые задачи новыми. Его параметры задаются с помощью minimumHealthyPercent (нижняя граница) и maximumPercent (верхняя граница). Значения 100/200 означают, что старые задачи продолжают работать, пока запускаются новые: требуется 100% работоспособных задач, а доступная ёмкость может достигать 200%. Развёртывание blue/green (через AWS CodeDeploy) создаёт новый набор задач рядом со старым, постепенно переключает трафик с помощью взвешенной маршрутизации ALB и завершает старые задачи после проверки. Blue/green поддерживает откат без простоя.

Журналирование ECS в CloudWatch

Настройте драйвер журналов awslogs в определении задачи, чтобы напрямую отправлять стандартный вывод и стандартный поток ошибок контейнера в CloudWatch Logs. Укажите группу журналов, регион и префикс потока. Роли выполнения задачи необходимы разрешения logs:CreateLogStream и logs:PutLogEvents. Для централизованного сбора журналов из нескольких служб рассмотрите FireLens (боковой контейнер с Fluent Bit или Fluentd), который направляет журналы в S3, OpenSearch или сторонние системы журналирования.

'logConfiguration': {
    'logDriver': 'awslogs',
    'options': {
        'awslogs-group': '/ecs/myapp',
        'awslogs-region': 'us-east-1',
        'awslogs-stream-prefix': 'myapp'
    }
}

Обнаружение служб ECS с помощью Cloud Map

Когда микрослужбам в ECS необходимо взаимодействовать друг с другом, жёстко заданные IP-адреса не подходят, поскольку задачи недолговечны и получают новые IP-адреса при каждом запуске. Используйте AWS Cloud Map (обнаружение служб ECS), чтобы регистрировать IP-адрес и порт каждой задачи в пространстве имён DNS. Другие службы разрешают имя myservice.namespace.local в текущие IP-адреса работоспособных задач. ECS автоматически регистрирует новые задачи и удаляет неисправные, поддерживая записи DNS в актуальном состоянии без ручного управления.

Секреты в определениях задач ECS

Никогда не встраивайте учётные данные в определения задач. Вместо этого ссылайтесь в определении задачи на секреты Secrets Manager или Parameter Store — ECS внедряет их в качестве переменных среды при запуске задачи. Роли выполнения задачи необходимы разрешения на получение секретов. Для Secrets Manager используйте secretsmanager:GetSecretValue, а для Parameter Store — ssm:GetParameters. Секреты извлекаются один раз при запуске контейнера; для получения новых значений после ротации секретов требуется заменить задачу.

'secrets': [
    {
        'name': 'DB_PASSWORD',
        'valueFrom': 'arn:aws:secretsmanager:us-east-1:123456789012:secret:myapp/db-password-AbCdEf'
    },
    {
        'name': 'API_KEY',
        'valueFrom': 'arn:aws:ssm:us-east-1:123456789012:parameter/myapp/api-key'
    }
]

Быстрая проверка

Проверьте своё понимание концепций AWS Solutions Architect (SAA-C03) из этого урока.

Итоги урока

В этом уроке Вы узнали, что кластеры ECS группируют вычислительные ресурсы, в которых запускаются задачи; определения задач задают образы контейнеров, CPU и память, роли и журналирование в виде версионируемых схем; а службы ECS поддерживают желаемое количество задач, интегрируются с ALB для распределения трафика и поддерживают поэтапные или blue/green-развёртывания. Далее мы сравним тип запуска EC2 с бессерверным типом запуска Fargate.

Часто задаваемые вопросы

Урок «Кластеры ECS, определения задач и сервисы» бесплатный?

Да — полный текст урока «Кластеры ECS, определения задач и сервисы» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AWS Solutions Architect, подпишись на CoddyKit PRO. Курс AWS Solutions Architect содержит 4 уроков всего.

Чему я научусь в уроке «Кластеры ECS, определения задач и сервисы»?

Определите описания задач ECS с образами контейнеров и ограничениями ресурсов, зарегистрируйте их в кластере и создайте сервис для поддержания требуемого количества экземпляров. Ты практикуешь AWS Solutions Architect с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать AWS Solutions Architect?

Предыдущий опыт не требуется. AWS Solutions Architect на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Кластеры ECS, определения задач и сервисы»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке AWS Solutions Architect?

Да. Каждый урок AWS Solutions Architect включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Кластеры ECS, определения задач и сервисы
  2. Тип запуска EC2 и Fargate
  3. ECR: хранение и извлечение образов контейнеров
  4. Автоматическое масштабирование сервисов ECS и балансировка нагрузки
← Назад к AWS Solutions Architect