【问题标题】:step-functions-local: Can't start state machine within state machinestep-functions-local:无法在状态机中启动状态机
【发布时间】:2022-09-23 06:35:39
【问题描述】:

我已经将step-functions-localserverless-offline 配置为测试一个状态机(我们称之为#1),它会触发项目中定义的另一个状态机(#2)。

当我使用sls offline start --stage dev 启动本地服务器时,两者都显示为已创建:

[Serverless Step Functions Local] 2022-07-29 11:03:59.867: [200] CreateStateMachine <=
{\"sdkResponseMetadata\":null,\"sdkHttpMetadata\":null,\"stateMachineArn\":\"arn:aws:states:us-east-1:123:stateMachine:Foo\",
\"creationDate\":1659117839863}

[Serverless Step Functions Local] 2022-07-29 11:03:59.883: [200] CreateStateMachine <=
{\"sdkResponseMetadata\":null,\"sdkHttpMetadata\":null,\"stateMachineArn\":
\"arn:aws:states:us-east-1:123:stateMachine:Bar\",\"creationDate\":1659117839882}

然后我使用以下命令测试#1:

aws stepfunctions --endpoint http://localhost:8083 start-execution --state-machine \\
arn:aws:states:us-east-1:123:stateMachine:Foo --name local-test-$RANDOM --input <JSON string payload>

#1成功执行了几个步骤,包括读/写S3操作,直到到达触发#2的步骤;那时,它失败了,但部分内容如下:

\"Error\":\"StepFunctions- StateMachineDoesNotExistException\",
\"Cause\":\"State Machine Does Not Exist: \'arn:aws:states:us-east-1:123:stateMachine:Bar\' 
(Service: AWSStepFunctions; Status Code: 400; Error Code: StateMachineDoesNotExist

以下是 #1 .yml 文件中如何定义启动状态机 #1 的步骤:

 BarStateMachine:
      Type: Task
      Resource: \"arn:aws:states:::states:startExecution.sync:2\"
      Parameters:
        StateMachineArn:
          arn:aws:states:us-east-1:123:stateMachine:Bar

如果不是指向本地创建的 #2 的 arn,而是将其指向已部署版本的 arn,我可以让 #1 工作。然而,这个部署的版本当然是一个远程资源,这有点违背本地测试的目的。关于如何正确执行#2 的本地版本的任何想法?

  • 不是 100% 确定,但可以肯定的是,您列出的命令在它们自己的本地环境中创建了每个状态机,它们无法相互通信。您必须通过一个命令部署它们,以便它们位于同一个本地“空间”中

标签: serverless-framework state-machine aws-step-functions state-machine-workflow serverless-framework-step-functions


【解决方案1】:

您可以让 step 函数调用 lambda,然后在代码中调用 step 函数,例如

sfn_client = boto3.client(
    "stepfunctions",
    region_name="us-west-2",
    endpoint_url="http://localhost:8083"
)

response = sfn_client.start_sync_execution(
    stateMachineArn=...
    input=...
)

(我个人不喜欢这个答案。我遇到了同样的问题。你有没有找到更好的解决方案?)

【讨论】:

    猜你喜欢
    • 2021-05-15
    • 2020-07-26
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    相关资源
    最近更新 更多