Примеры составных файлов интеграции с ECS

Услуга

Сопоставление службы может определять образ Docker, ограничения времени выполнения и требования к контейнеру.

services:
  test:
    image: "image"
    command: "command"
    entrypoint: "entrypoint"
    environment:
      - "FOO=BAR"
    cap_add:
      - SYS_PTRACE
    cap_drop:
      - SYSLOG
    init: true
    user: "user"
    working_dir: "working_dir"

Размер задачи

Устанавливает ограничения ресурсов, которые будут преобразованы в значения размера задачи Fargate:

services:
  test:
    image: nginx
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 2048M

IAM-роли

Назначает существующую роль пользователя задаче:

services:
  test:
    x-aws-policies:
      - "arn:aws:iam::aws:policy/AmazonS3FullAccess"

IAM-политики

Назначает встроенную IAM-политику задаче:

services:
  test:
    x-aws-role:
        Version: '2012-10-17'
        Statement:
        - Effect: Allow
          Action: sqs:*
          Resource: arn:aws:sqs:us-east-1:12345678:myqueue

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

Передать параметры драйверу awslogs

services:
  foo:
    image: nginx
    logging:
      options:
        awslogs-datetime-pattern: "FOO"

x-aws-logs_retention: 10

Автомасштабирование

Устанавливает целевой процент ЦП

services:
  foo:
    image: nginx
    deploy:
      x-aws-autoscaling:
        cpu: 75

графический процессор

Устанавливает generic_resources для служб, которым требуются ускорители в качестве графических процессоров.

services:
  learning:
    image: tensorflow/tensorflow:latest-gpus
    deploy:
      resources:
        reservations:
          memory: 32Gb
          cpus: "32"
          generic_resources:
            - discrete_resource_spec:
                kind: gpus
                value: 2

Балансировщики нагрузки

Когда служба в compose-файле предоставляет порт, балансировщик нагрузки создаётся и настраивается для распределения трафика между всеми контейнерами.

Существует 2 типа балансировщиков нагрузки, которые можно создать. Для службы, предоставляющей не-http порт/протокол, создаётся Network Load Balancer (NLB). Службы с портами/протоколами http/https получают Application Load Balancer (ALB).

Для стека Compose создан/настроен только один балансировщик нагрузки. Если в стеке компоновки настроены оба порта http/non-http для служб, создаётся балансировка сетевой нагрузки.

В приведённом далее compose-файле настроен только порт http, поэтому при развертывании создаётся ALB.

services:
  app:
    image: nginx
    ports:
      - 80:80

NLB создан для не-http порта

services:
  app:
    image: nginx
    ports:
      - 8080:8080

Чтобы использовать протокол http с настраиваемыми портами и получает ALB, используйте свойство порта x-aws-protocol.

services:
  test:
    image: nginx
    ports:
      - target: 8080
        x-aws-protocol: http

Чтобы повторно использовать внешний балансировщик нагрузки и не создавать выделенный, устанавливает свойство верхнего уровня x-aws-loadbalancer, как показано далее:

x-aws-loadbalancer: "LoadBalancerName"
services:
  app:
    image: nginx
    ports:
      - 80:80

Точно так же можно повторно использовать внешние VPC и Cluster:

x-aws-vpc: "vpc-25435e"
x-aws-cluster: "ClusterName"

services:
  app:
    image: nginx
    ports:
      - 80:80

Имейте в виду, что управление внешними ресурсами не является частью жизненного цикла стека компоновки.

Тома

services:
  app:
    image: nginx
    volumes:
      - data:/test
volumes:
  data:

Чтобы использовать ранее созданный внешний том, устанавливает его идентификатор/ARN в качестве имени:

services:
  app:
    image: nginx
    volumes:
      - data:/test

volumes:
  data:
    external: true
    name: "fs-f534645"

Настраивает конфигурацию тома через driver_opts

services:
  test:
    image: nginx
volumes:
  db-data:
    driver_opts:
        backup_policy: ENABLED
        lifecycle_policy: AFTER_30_DAYS
        performance_mode: maxIO
        throughput_mode: provisioned
        provisioned_throughput: 1024

сети

Сети сопоставляются с группами безопасности.

services:
  test:
    image: nginx
networks:
  default:

Использование внешней сети/группы безопасности:

services:
  test:
    image: nginx
networks:
  default:
    external: true
    name: sg-123abc

Секреты

Секреты хранятся в AWS SecretsManager в виде строк и монтируются в контейнеры под кодом /run/secrets/.

services:
  app:
    image: nginx
    ports:
      - 80:80
    secrets:
      - mysecret

secrets:
  mysecret:
    file: ./secrets/mysecret.txt

При использовании внешних секретов задаёт допустимый секрет ARN в свойстве name:

services:
  app:
    image: nginx
    secrets:
      - foo_bar

secrets:
  foo_bar:
    name: "arn:aws:secretsmanager:eu-west-3:xxx:secret:foo_bar"
    external: true

Доступ к приватным образам

Если служба настроена с использованием образа из частного репозитория в Docker Hub, убедиться, что вы правильно настроили учетные данные для извлечения, прежде чем развертывать стек Compose.

Чтобы создать учетные данные для извлечения, создаёт файл со следующим содержимым:

$ cat creds.json
{
  "username":"DockerHubID",
  "password":"GeneratedHubTokenOrPassword"
}

Чтобы создать учетные данные для извлечения и получает ARN/ID для использования в файле создания, выполняет:

$ docker secret create pullcred /path/to/creds.json
arn:aws:secretsmanager:eu-west-3:xxx:secret:pullcred

Используйте ARN в выходных данных, чтобы установить свойство службы x-aws-pull_credentials, как показано далее:

services:
  app:
    image: DockerHubID/privateimage
    x-aws-pull_credentials: arn:aws:secretsmanager:eu-west-3:xxx:secret:pullcred
    ports:
      - 80:80