Перезапустите контейнеры в ECS, когда определенный контейнер развернут - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть проект, который запускает несколько GO сервисов с использованием ECS. Например, у меня есть 3 контейнера, A, B, C, а затем контейнер D содержит конфигурацию и прочее для других контейнеров. Есть ли способ, что когда контейнер D обновляется или перезапускается, я могу затем перезапустить другие контейнеры в ECS, чтобы они могли использовать новые данные из контейнера D?

Я думал о том, чтобы иметь вещь типа pub / sub и сообщая другим контейнерам, что была выпущена новая версия, но я подумал, что должен быть более простой способ, не требующий никакого дополнительного кода.

Я также хотел бы сделать это для моего локального docker - составьте стек, если это возможно.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2020

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

https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ContainerDependency.html

Это позволяет добавить зависимости для разных работающих контейнеров.

Например:

  "containerDefinitions": [
    {
      "name": "app",
      "image": "application_image",
      "portMappings": [
        {
          "containerPort": 9080,
          "hostPort": 9080,
          "protocol": "tcp"
        }
      ],
      "essential": true,
      "dependsOn": [
        {
          "containerName": "container-a",
          "condition": "HEALTHY"
        }
      ]
    },

Очень полезно.

0 голосов
/ 25 апреля 2020

В ECS вы можете определить все контейнеры A, B, C и D в одной и той же задаче, если между ними есть зависимости (все из них есть в определении вашей задачи). Если один контейнер выходит из строя в рамках задачи - все контейнеры задачи останавливаются (вместо этого запускается новая задача). Развертывание находится на уровне задачи - поэтому развертывание новой задачи заменит все контейнеры в ней.

Если вы хотите большей гибкости (имея отдельное развертывание для A, B, C), вы можете создать 3 разных задач, у каждого есть два контейнера - один из A / B / C и D (в качестве боковой панели):

  • Task_A - запуск обоих контейнеров A и D.
  • Task_B - запуск обоих контейнеров B & D.
  • Task_ C - запуск обоих контейнеров C & D.

В docker-compose вы можете запустить docker-compose up --abort-on-container-exit, так что когда один контейнер не работает, все также идет вниз.

...