【发布时间】:2022-09-23 06:35:39
【问题描述】:
我已经将step-functions-local 和serverless-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