Архитектура интеграции 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.
Порты службы сопоставляются с IngressRule
s группы безопасности и Listener
s балансировщика нагрузки. Создаёт приложение только со службами 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
таргетинг, указанный настроенной метрикой использования ЦП.