【问题标题】:Why is my aws step function's execution not started with the ARN I entered?为什么我输入的 ARN 未开始执行我的 aws step 函数?
【发布时间】:2019-10-29 23:43:51
【问题描述】:

我正在我正在处理的项目中使用 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'

这一步函数启动没有问题,并正确返回执行的Arn。

通过调试,我发现 AWS.config.region 在我调用 startExecution 的两个文件中都返回了 us-east-1。由于我现有的状态机已经在使用此配置,我认为它与错误无关,但我试图在调用之前将 AWS 区域“强制”为 eu-central-1:

    AWS.config.update({ region: 'eu-central-1' })
    const success = await stepfunctions.startExecution(params).promise()

但这并不能解决问题。我对 AWS 还很陌生,所以我可能在这里遗漏了一些东西(如果我忘记输入任何重要的代码/信息,请告诉我),但我真的对错误消息中的 Arn 感到困惑与输入中的不匹配,并且几乎相同的状态机工作正常,而我新创建的状态机不想启动。

那么我该如何解决这个问题呢?

【问题讨论】:

    标签: javascript node.js amazon-web-services aws-sdk aws-step-functions


    【解决方案1】:

    经过进一步调查,我发现步进函数的区域和端点可能与 AWS 不同。添加以下代码解决了这个问题:

    const stepfunctions = new AWS.StepFunctions({
      endpoint: 'https://states.eu-central-1.amazonaws.com',
      region: 'eu-central-1',
    })
    

    【讨论】:

      猜你喜欢
      • 2019-09-07
      • 2017-12-14
      • 2021-04-26
      • 2022-10-06
      • 1970-01-01
      • 1970-01-01
      • 2021-07-08
      • 2021-12-04
      • 2023-01-07
      相关资源
      最近更新 更多