Архитектура интеграции ECS

Интеграция ECS опирается на CloudFormation для управления ресурсами AWS как атомарной операцией. В этом документе описывается сопоставление между моделью приложения Compose и компонентами AWS.

Обзор

На этой диаграмме показана модель компоновки и компоненты AWS на одной линии, которые создаются как эквивалентные ресурсы.

+----------+                                +-------------+                              +-------------------+
| Project  |  . . . . . . . . . . . . . .   | Cluster     |    . . . . . . .             | LoadBalancer      |
+-+--------+                                +-------------+                              +-------------------+
  |
  |    +----------+                         +-------------++-------------------+         +-------------------+
  +----+ Service  |   . . . . . . . . . .   | Service     || TaskDefinition    |         | TargetGroup       |
  |    +--+-------+                         +-------------++-------------------+-+       +-------------------+
  |       |                                                  | TaskRole          |
  |       |                                                  +-------------------+-+
  |       |  x-aws-role, x-aws-policies     . . . . . . . .    | TaskExecutionRole |
  |       |                                                    +-------------------+
  |       |  +---------+
  |       +--+ Deploy  |
  |       |  +---------+                    +-------------------+
  |       |  x-aws-autoscaling  . . . . . . | ScalableTarget    |
  |       |                                 +-------------------+---+
  |       |                                     | ScalingPolicy     |
  |       |                                     +-------------------+-+
  |       |                                       | AutoScalingRole   |
  |       |                                       +-------------------+
  |       |
  |       |  +---------+                    +-------------+                              +-------------------+
  |       +--+ Ports   |   . . . . . . .    | IngressRule +-----+                        | Listener          |
  |       |  +---------+                    +-------------+     |                        +-------------------+
  |       |                                                     |
  |       |  +---------+                    +---------------+ +------------------+
  |       +--+ Secrets |   . . . . . . .    | InitContainer | |TaskExecutionRole |
  |       |  +---------+                    +---------------+ +------------+-----+
  |       |                                                     |          |
  |       |  +---------+                                        |          |
  |       +--+ Volumes |                                        |          |
  |       |  +---------+                                        |          |
  |       |                                                     |          |
  |       |  +---------------+                                  |          |         +-------------------+
  |       +--+ DeviceRequest |  . . . . . . . . . . . . .  . .  | . . . .  | . . .   | CapacityProvider  |
  |          +---------------+                                  |          |         +-------------------+--------+
  |                                                             |          |                | AutoscalingGroup    |
  |   +------------+                        +---------------+   |          |                +---------------------+
  +---+ Networks   |   . . . . . . . . .    | SecurityGroup +---+          |                | LaunchConfiguration |
  |   +------------+                        +---------------+              |                +---------------------+
  |                                                                        |
  |   +------------+                        +---------------+              |
  +---+ Secret     |   . . . . . . . . .    | Secret        +--------------+
      +------------+                        +---------------+

Каждая служба приложения Compose сопоставляется с ECS Service. TaskDefinition создаётся в соответствии с определением компоновки. Фактическое картографирование ограничено как облачной платформой, так и ограничениями Fargate. Такой TaskDefinition устанавливается с одним контейнером в соответствии с моделью компоновки, которая не предлагает синтаксис для поддержки дополнительных контейнеров.

Роль IAM создаётся и настраивается как TaskRole для предоставления сервисному доступу к дополнительным ресурсам AWS при необходимости. Для этой цели пользователь может установить x-aws-policies или определить детальный документ роли x-aws-role IAM.

Порты службы сопоставляются с IngressRules группы безопасности и Listeners балансировщика нагрузки. Создаёт приложение только со службами HTTP (используя порты 80/443 или x-aws-protocol, установленные на http), создаёт балансировщик нагрузки приложения, в противном случае используется балансировщик сетевой нагрузки.

TargetGroup создаётся для каждой службы для распределения трафика балансировщиком нагрузки в соответствующие контейнеры.

Секреты, связанные со службой, переводятся в InitContainer, добавляемый к TaskDefinition службы. Данный контейнер инициализации отвечает за создание файла /run/secrets для секрета, который соответствует модели секрета Docker и делает код приложения переносимым. TaskExecutionRole также создаётся для каждой службы и обновляется для предоставления доступа к связанным секретам.

Службы, использующие GPU (DeviceRequest), получают Cluster, расширенный с помощью EC2 CapacityProvider, используя AutoscalingGroup для управления распределением ресурсов EC2 на основе LaunchConfiguration. Последний использует рекомендованный ECS AMI и тип машины для графического процессора.

Служба для объявления deploy.x-aws-autoscaling получает созданный ScalingPolicy таргетинг, указанный настроенной метрикой использования ЦП.