为什么我的 aws step 函数不是从我输入的 ARN 开始执行的?
Why is my aws step function's execution not started with the ARN I entered?
我正在我正在处理的项目中使用 AWS Step 函数创建一个新的状态机。但是,当我尝试使用 aws-sdk 开始执行 step 函数时,出现 "StateMachineDoesNotExist" 错误。似乎我作为输入传递的 stateMachineArn 与 startExecution 函数使用的不同。
以下是我尝试开始执行的方式:
const AWS = require('aws-sdk')
const stepfunctions = new AWS.StepFunctions()
const params = {
stateMachineArn: process.env.ORDER_ACCEPTED_MACHINE_ARN,
name: `${orderId}-${moment().unix()}`,
input: JSON.stringify({
orderAcceptedTimestamp: moment(createdAt).add(1, 'minutes').toISOString(),
orderId,
}),
}
const success = await stepfunctions.startExecution(params).promise()
return success.executionArn
我的 stateMachineArn 是这样定义的:
process.env.ORDER_ACCEPTED_MACHINE_ARN = 'arn:aws:states:eu-central-1:935080471983:stateMachine:orderAcceptedMachine-dev'
这是我在 运行 代码时收到的错误消息:
State Machine Does Not Exist: 'arn:aws:states:us-east-1:935080471983:stateMachine:orderAcceptedMachine-dev'
这里我不明白的是,输入的Arn和错误的Arn不一样。在我看来,startExecution 似乎修改了输入 stateMachineArn 并以某种方式更改了它的区域(即使 Arn 作为字符串传递?!)。
我在项目中已经有一个类似的步骤功能,我以同样的方式开始:
const params = {
stateMachineArn: process.env.ORDER_TIMEOUT_MACHINE_ARN,
name: `${orderId}-${moment().unix()}`,
input: JSON.stringify({
orderTimeoutTimestamp: timeout.toISOString(),
orderId,
}),
}
const success = await stepfunctions.startExecution(params).promise()
return success.executionArn
Arn 定义与另一个在同一个文件中,定义如下:
process.env.ORDER_TIMEOUT_MACHINE_ARN = 'arn:aws:states:eu-central-1:935080471983:stateMachine:orderTimeoutMachine-dev'
此步骤功能启动没有问题,并且正确 return 执行的 Arn。
通过调试我发现在我调用 startExecution 的两个文件中 AWS.config.region returns us-east-1。由于我现有的状态机已经在使用此配置,因此我认为它与错误无关,但我在调用之前尝试 'force' AWS 区域到 eu-central-1,如下所示:
AWS.config.update({ region: 'eu-central-1' })
const success = await stepfunctions.startExecution(params).promise()
但这并不能解决问题。我是 AWS 的新手,所以我可能在这里遗漏了一些东西(如果我忘了放任何重要的东西,请告诉我 code/info),但我真的很困惑 Arn 在错误消息与输入中的不匹配,并且几乎相同的状态机工作正常,而我新创建的状态机不想启动。
那么我该如何解决这个问题呢?
经过进一步调查,我发现步骤函数的区域和端点可能与 AWS 不同。添加以下代码解决了问题:
const stepfunctions = new AWS.StepFunctions({
endpoint: 'https://states.eu-central-1.amazonaws.com',
region: 'eu-central-1',
})
我正在我正在处理的项目中使用 AWS Step 函数创建一个新的状态机。但是,当我尝试使用 aws-sdk 开始执行 step 函数时,出现 "StateMachineDoesNotExist" 错误。似乎我作为输入传递的 stateMachineArn 与 startExecution 函数使用的不同。
以下是我尝试开始执行的方式:
const AWS = require('aws-sdk')
const stepfunctions = new AWS.StepFunctions()
const params = {
stateMachineArn: process.env.ORDER_ACCEPTED_MACHINE_ARN,
name: `${orderId}-${moment().unix()}`,
input: JSON.stringify({
orderAcceptedTimestamp: moment(createdAt).add(1, 'minutes').toISOString(),
orderId,
}),
}
const success = await stepfunctions.startExecution(params).promise()
return success.executionArn
我的 stateMachineArn 是这样定义的:
process.env.ORDER_ACCEPTED_MACHINE_ARN = 'arn:aws:states:eu-central-1:935080471983:stateMachine:orderAcceptedMachine-dev'
这是我在 运行 代码时收到的错误消息:
State Machine Does Not Exist: 'arn:aws:states:us-east-1:935080471983:stateMachine:orderAcceptedMachine-dev'
这里我不明白的是,输入的Arn和错误的Arn不一样。在我看来,startExecution 似乎修改了输入 stateMachineArn 并以某种方式更改了它的区域(即使 Arn 作为字符串传递?!)。
我在项目中已经有一个类似的步骤功能,我以同样的方式开始:
const params = {
stateMachineArn: process.env.ORDER_TIMEOUT_MACHINE_ARN,
name: `${orderId}-${moment().unix()}`,
input: JSON.stringify({
orderTimeoutTimestamp: timeout.toISOString(),
orderId,
}),
}
const success = await stepfunctions.startExecution(params).promise()
return success.executionArn
Arn 定义与另一个在同一个文件中,定义如下:
process.env.ORDER_TIMEOUT_MACHINE_ARN = 'arn:aws:states:eu-central-1:935080471983:stateMachine:orderTimeoutMachine-dev'
此步骤功能启动没有问题,并且正确 return 执行的 Arn。
通过调试我发现在我调用 startExecution 的两个文件中 AWS.config.region returns us-east-1。由于我现有的状态机已经在使用此配置,因此我认为它与错误无关,但我在调用之前尝试 'force' AWS 区域到 eu-central-1,如下所示:
AWS.config.update({ region: 'eu-central-1' })
const success = await stepfunctions.startExecution(params).promise()
但这并不能解决问题。我是 AWS 的新手,所以我可能在这里遗漏了一些东西(如果我忘了放任何重要的东西,请告诉我 code/info),但我真的很困惑 Arn 在错误消息与输入中的不匹配,并且几乎相同的状态机工作正常,而我新创建的状态机不想启动。
那么我该如何解决这个问题呢?
经过进一步调查,我发现步骤函数的区域和端点可能与 AWS 不同。添加以下代码解决了问题:
const stepfunctions = new AWS.StepFunctions({
endpoint: 'https://states.eu-central-1.amazonaws.com',
region: 'eu-central-1',
})