Шаговая функция AWS ожидает, пока не будет назначен частный IP-адрес контейнера ECS Fargate - PullRequest
0 голосов
/ 06 июня 2019

Я строю конвейер пошаговых функций для обработки данных с помощью ElasticSearch, Logstash и GoogleBigQuery. Мой первый шаг - это долго работающий контейнерasticsearch, который выполняется асинхронно, и его вывод отправляется на второй шаг, который ожидает privateIP как переменную ENV, однако, как только первый шаг инициируется асинхронно, IP-адрес сразу не появляется, он требуется некоторое время для того, чтобы IP был назначен контейнеру. Есть ли способ подождать, пока IP-адрес не станет доступен, а затем продолжить выполнение на следующем шаге?

Я попытался выполнить шаг синхронно с ecs: runTask.waitForTaskToken и отправить токен SendTaskSuccess через интерфейс командной строки, но безуспешно, поскольку вывод переопределен. Было бы хорошо, если бы мне не пришлось использовать еще одну лямбда-функцию.

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

Часть пошаговых функций, как образец

  "StartAt": "start_cluster",
  "States": {
    "start_cluster": {
      "Type": "Task",
      "Resource": "arn:aws:states:::ecs:runTask.waitForTaskToken", //ecs:runTask 
      "InputPath": "$",
      "ResultPath": "$",
      "OutputPath": "$",
      "Parameters": {
        "LaunchType": "FARGATE",
        "Cluster": "arn:aws:ecs:REGION:ID:cluster/CLUSTER NAME",
        "TaskDefinition": "arn:aws:ecs:REGION:ID:task-definition/TASK DEFINITION",
        "NetworkConfiguration": {
          "AwsvpcConfiguration": {
            "AssignPublicIp": "ENABLED",
            "Subnets": [
              "subnet-XXX",
              "subnet-XXX"
            ]
          }
        },
        "Overrides": {
          "ContainerOverrides": [
            {
              "Name": "CONTAINER NAME",
              "Environment": [
                {
                  "Name": "ES_HOST_IP",
                  "Value.$": "$.output.Tasks.Containers.NetworkInterfaces.privateIP"
                },
                {
                  "Name": "TOKEN",
                  "Value.$": "$$.Task.Token"
                }
              ]
            }
          ]
        }
      },
      "Next": "wait_one_minute",
      "TimeoutSeconds": 420
    },
    "wait_one_minute": {
      "Type": "Wait",
      "Seconds": 60,
      "Next": "NEXT_STEP"
    },
    "NEXT_STEP": {
    }
  }
}```

I expect to continue on the next step once the privateIP is available
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...