Как создать этапы для конечного автомата AWS?
Я создал простой конечный автомат AWS с лямбда-функциями. Как ниже
{
"Comment":"Validates data",
"StartAt": "ChooseDocumentType",
"States": {
"ChooseDocumentType": {
"Type": "Choice",
"Choices":[
{
"Variable":"$.documentType",
"StringEquals":"RETURN",
"Next":"ValidateReturn"
},
{
"Variable":"$.documentType",
"StringEquals":"ASSESSMENT",
"Next":"ValidateAssessment"
}
],
"Default":"DefaultState"
},
"ValidateReturn":{
"Type":"Task",
"Resource":"arn:aws:lambda:us-west-2:111111111:function:ValidateReturn",
"Next":"DefaultState"
},
"ValidateAssessment":{
"Type":"Task",
"Resource":"arn:aws:lambda:us-west-2:111111111:function:ValidateAssessment",
"Next":"DefaultState"
},
"DefaultState":{
"Type":"Pass",
"End":true
}
}
}
Вопросы
1> Как мне создать этапы для этого конечного автомата. (как производство, разработка и т. д.)?
2> Каждая лямбда-функция имеет alias
указывая на разные версии. Так development
псевдоним всегда указывает на $latest
версия и production
псевдоним указывает, скажем, на версию 2
, Как динамически связать стадии конечного автомата с этим лямбда-псевдонимом? Итак, государственная машина в development
этап должен использовать лямбда-функцию с псевдонимом development
и так далее.
Я использую консоль AWS для управления конечными автоматами и лямбдами, и я не вижу никаких действий по созданию этапов для конечного автомата
1 ответ
Вы можете объявить псевдоним и версию в лямбда- ARN:
# default, $LATEST
arn:aws:lambda:us-west-2:111111111:function:ValidateAssessment
# using alias
arn:aws:lambda:us-west-2:111111111:function:ValidateAssessment:development
# using version
arn:aws:lambda:us-west-2:111111111:function:ValidateAssessment:2
Используйте их в определении функции шага в соответствии с вашими потребностями.
Re: # 2, если ваша основная задача - контролировать, какой псевдоним Lambda вызывается, есть способ сделать это с помощью одношаговой функции.
Определение состояния вашей ступенчатой функции будет примерно таким:
{
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Parameters": {
"InvocationType": "RequestResponse",
"FunctionName": "someFunction",
"Qualifier.$": "$.lambdaAlias",
"Payload": {}
},
}
Итак, если вы выполняете пошаговую функцию и указываете этап, если бы такая вещь была, вы должны передать lambdaAlias
параметр. (В этом имени нет ничего волшебного, вы можете извлечь его из любого входного параметра пошаговой функции.)
Полезные данные запроса к вашей Lambda войдут в Parameters.Payload
.
https://docs.aws.amazon.com/step-functions/latest/dg/connect-lambda.html