Интеграция с 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, обратившись к |
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 |
service.userns_mode |
x |
|
сервис.тома |
✓ |
Сопоставляется с файловыми системами EFS. См. Постоянные тома. |
сервис.перезапустить |
x |
Заменено на service.deployment.restart_policy |
Объём |
x |
|
драйвер |
✓ |
См. Постоянные тома. |
driver_opts |
✓ |
|
внешний |
✓ |
|
labels |
x |
|
Секрет |
x |
|
внешний |
✓ |
|
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