Как повторно использовать определение состояния в конечных автоматах aws?

У меня есть конечный автомат, как показано ниже. Если у него есть 1000 сообщений для уведомления, он распределяет уведомления на 15 минут.

Теперь, если у меня есть TwoHourStateMachine с точно такими же потоками состояний, но со своим собственным набором лямбда-выражений, как я буду повторно использовать состояния, чтобы не дублировать определение снова?

Государственный аппарат:

 FifteenMinuteStateMachine:
 Type: "AWS::StepFunctions::StateMachine"
 Properties:
   StateMachineName: "FifteenMinuteStateMachine"
   DefinitionString:
     Fn::Sub: |-
       {
         "Comment": "A 15 minute state machine",
         "StartAt": "Initialize",
         "TimeoutSeconds": 900,
         "States": {
           "Initialize" : {
             "Type": "Task",
             "Resource": "${InitFifteenMinuteLambda.Arn}",
             "TimeoutSeconds": 15,
             "Retry": [ {
               "ErrorEquals": [ "States.Timeout", "Lambda.Unknown" ],
               "IntervalSeconds": 2,
               "MaxAttempts": 3,
               "BackoffRate": 2
             } ],
             "Catch": [{
               "ErrorEquals": ["States.ALL"],
               "ResultPath": "$.errorOutput",
               "Next": "Update Status"
             }],
             "Next": "Notification Job"
           },
           "Notification Job" : {
             "Type": "Task",
             "Resource": "${NotificationFifteenMinuteLambda.Arn}",
             "TimeoutSeconds": 15,
             "Retry": [ {
               "ErrorEquals": [ "States.Timeout", "Lambda.Unknown" ],
               "IntervalSeconds": 2,
               "MaxAttempts": 3,
               "BackoffRate": 2
             } ],
             "Catch": [{
               "ErrorEquals": ["States.ALL"],
               "ResultPath": "$.errorOutput",
               "Next": "Update Status"
             }],
             "Next": "All Notifications sent?"
           },
           "All Notifications sent?": {
             "Type": "Choice",
             "Choices": [
               {
                 "Variable": "$.status",
                 "StringEquals": "IN_PROGRESS",
                 "Next": "Wait X Seconds"
               },
               {
                 "Variable": "$.status",
                 "StringEquals": "SUCCEEDED",
                 "Next": "Update Status"
               }
             ],
             "Default": "Wait X Seconds"
           },
           "Wait X Seconds": {
             "Type": "Wait",
             "SecondsPath": "$.notificationIntervalInSeconds",
             "Next": "Notification Job"
           },
           "Update Status": {
             "Type": "Task",
             "Resource": "${StatusUpdateFifteenMinuteLambda.Arn}",
             "TimeoutSeconds": 15,
             "End": true
           }
         }
       }
   RoleArn: 
     Fn::GetAtt: [ StepFunctionExecutionRole, Arn ]

person Ashok    schedule 14.01.2018    source источник


Ответы (1)


Ашок,

Если вы можете сформулировать проблему с помощью 1 набора лямбда-функций, я считаю, что решение уже сделано для вас в вашем примере. Вам нужно вызывать разные лямбда-функции? В идеале вы можете повторно использовать одну и ту же лямбда-функцию и повторно использовать ее в определении. К сожалению, в настоящее время вы не можете использовать переменные ARN во время выполнения, о чем, я думаю, вы и просите.

Надеюсь это поможет!

person SunnyD    schedule 02.02.2018