Почему выполнение моей функции шага aws не началось с ARN, который я ввел? - PullRequest
0 голосов
/ 28 октября 2019

Я создаю новый конечный автомат с функциями AWS Step в проекте, над которым я работаю. Но когда я пытаюсь запустить выполнение функции шага с помощью aws-sdk, я получаю сообщение об ошибке «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'

Что я не понимаю здесь, так это то, что Арн из ввода иАрн от ошибки не совпадает. Мне кажется, что 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'

Этот шаг функции запускается без проблем и правильновернуть Арн исполнения.

Отладкой я обнаружил, что AWS.config.region возвращает us-east-1 в обоих файлах, где я вызываю startExecution. Так как мой существующий конечный автомат уже работает с этой конфигурацией, я думаю, что это не связано с ошибкой, но я попытался «заставить» Регион AWS к eu-central-1 в любом случае непосредственно перед вызовом, как это:

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

Но это не решает проблему. Я довольно новичок в AWS, так что, возможно, я чего-то упускаю здесь (дайте мне знать, если я забыл ввести какой-либо важный код / ​​информацию), но я действительно смущен фактами, что Arn в сообщении об ошибкене совпадает с указанным во входных данных, и что почти идентичный конечный автомат работает нормально, в то время как мой недавно созданный не хочет запускаться.

Так, как я могу исправить эту проблему?

1 Ответ

0 голосов
/ 29 октября 2019

После дальнейшего изучения я выяснил, что область и конечная точка пошаговых функций могут отличаться от AWS. Добавление следующего кода решило проблему:

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