Я строю конвейер пошаговых функций для обработки данных с помощью 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