Интеграция с ECS

В этом документе описывается преобразовывает приложения, определённого в файле Compose, в ресурсы AWS. Каждая служба сопоставляется со службой ECS в кластере проекта.

Compose сопоставления полей

В таблице далее перечислены поддерживаемые поля файла Compose и их аналоги AWS.

Легенда:

  • ✓: Реализовано

  • n: ещё не реализовано

  • x: Неприменимо / нет доступных преобразований

Ключи

Карта

Примечания

Сервис

service.service.build

x

Игнорируется. Нет поддержки сборки образов на AWS.

service.cap_add, cap_drop

Поддерживается с Ограничения Фаргейта

service.command

service.configs

x

service.cgroup_paren t

x

service.container_na me

x

service.credential_s pec

x

service.deploy

service.deploy.endpo int_mode

x

service.deploy.mode

x

service.deploy.repli cas

Устанавливает начальный масштаб службы. Автоматическое масштабирование, если оно включено, сделает это динамическим

service.deploy.place

Используется с поддержкой EC2 для выбора типа машины и AMI

service.deploy.updat e_config

service.deploy.resources

Ресурс Fargate выбирается с наименьшим типом экземпляра для настроенной памяти и процессора

service.deploy.resta rt_policy

service.deploy.label s

service.devices

x

service.depends_on

Реализовано с помощью CloudFormation Depends_on

service.dns

x

service.dns_search

x

service.domainname

x

сервис.tmpfs

x

Не поддерживается в Fargate, см. https://github.com/docker/compose-cli/issues/839

service.entrypoint

service.env_file

service.environment

service.expose

x

service.extends

service.external_links

x

service.extra_hosts

x

service.group_add

x

service.healthcheck

Это настраивает проверку работоспособности на уровне контейнера, как сообщается на консоли ECS. Application Load Balancer также проверит работоспособность службы HTTP, обратившись к / и ожидая код состояния HTTP 200.

service.hostname

x

service.image

Частные образы будут доступны при передаче x-aws-pull_policy с ARN секретного имени пользователя и пароля.

service.isolation

x

service.labels

x

service.links

x

service.logging

Можно использовать для настройки конфигурации журналов CloudWatch.

service.network_mode

x

service.networks

x

Связь между сервисами реализуется SecurityGroups внутри приложения VPC.

service.pid

x

service.ports

В ECS поддерживается только симметричное сопоставление портов. См. Открытие портов.

service.secrets

См. Секреты.

service.security_opt

x

service.stop_grace_p период

x

service.stop_signal

x

service.sysctls

x

сервис.ulimits

Поддерживается только ulimit nofile из-за ограничений Fargate.

service.userns_mode

x

сервис.тома

Сопоставляется с файловыми системами EFS. См. Постоянные тома.

сервис.перезапустить

x

Заменено на service.deployment.restart_policy

Объём

x

драйвер

См. Постоянные тома.

driver_opts

внешний

name должен быть идентификатором файловой системы EFS.

labels

x

Секрет

x

внешний

name должен быть установлен на ARN секрета

file

содержимое файла будет загружено в AWS Secret Manager

Конфигурация

x

Журналы

Журналы приложений можно получает контейнером с кодом docker compose logs. Интеграция Docker ECS использует журналы AWS CloudWatch для сбора журналов из всех контейнеров. CloudWatch можно настроить, установив службу logging.driver_opts, передав атрибуты конфигурации с префиксом awslogs-.

test:
    image: mycompany/webapp
    logging:
      driver-opts:
        awslogs-datetime-pattern: "some-pattern"

Открытие портов

Когда одна или несколько служб предоставляют порты, для приложения создаётся балансировщик нагрузки. Поскольку все службы предоставляются через один и тот же балансировщик нагрузки, только одна служба может предоставлять данный номер порта. Исходный и целевой порты, определённые в файле Compose, ДОЛЖНЫ быть одинаковыми, поскольку связь между службами не проходит через балансировщик нагрузки и не может использовать абстракцию прослушивателей для назначения отдельного опубликованного порта.

Если службы в файле Compose предоставляют только порты 80 или 443, создаётся Application Load Balancer, в противном случае интеграция ECS предоставит Network Load Balancer. Службы HTTP, использующие разные порты, могут принудительно использовать ALB, заявляя протокол http с пользовательским расширением x-aws-protocol в объявлении порта:

test:
    image: mycompany/webapp
    ports:
      - target: 8080
        x-aws-protocol: http

Постоянные тома

Тома Docker сопоставляются с файловыми системами EFS. Тома могут быть внешними (в этом случае name должен быть установлен на идентификатор файловой системы) или будут созданы при первом развертывании приложения. docker compose down НЕ удалит файловую систему, и она будет повторно присоединена к приложению при будущих запусках. driver_opts можно использовать для настройки файловой системы EFS.

Монтирование тома можно настроить для обхода проблем с разрешениями файловой системы Posix, установив идентификаторы пользователей и групп, которые будут использоваться для записи в файловую систему, независимо от того, какой пользователь настроен для запуска контейнера.

services:
    myservice:
        image: mycompany/webapp
        volumes:
        - mydata:/mount/testvolumes

volumes:
  mydata:
    driver_opts:
      performance-mode: maxIO
      throughput-mode: bursting
      uid: 0
      gid: 0

Секреты

Секреты можно определить в compose-файлах, и потребуются секретные файлы, доступные во время развертывания рядом с compose-файлом. Содержимое секретного файла будет доступно внутри выбранных контейнеров, по умолчанию в /run/secrets/<SECRET_NAME>. Внешние секреты также поддерживаются, тогда name должен быть установлен на ARN секрета.

services:
    nginx:
        image: mycompany/webapp
        secrets:
          - mysecret

secrets:
  mysecret:
    file: ./my_secret1.txt

Контейнерные ресурсы

Ограничения ЦП и памяти могут быть установлены в compose. Они используются для выбора минимального Размер Фаргейта, который будет соответствовать этим ограничениям.

services:
    nginx:
        image: mycompany/webapp
        deploy:
          resources:
            limits:
              cpus: '0.5'
              memory: 2Gb