Как создать этапы для конечного автомата 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

Другие вопросы по тегам