1

3つのラムダ関数を連鎖させ、手動で実行を作成するときに完璧に動作するAWSステップ関数ステートマシンを設定しました。 API Gatewayからの入力を受け取り、ステップ関数に渡したいものを渡し、新しい実行を開始するために4番目のラムダ関数を作成しました。ラムダ関数がAWS状態マシンで実行を開始しないのはなぜですか?

私はこれについてオンラインで見つけることができるすべてのアドバイスに従ったと信じていますが、何を試しても、ラムダ関数は常に(API Gatewayから呼び出されてもテストされたとしても)私はconsole.logの行を関数のほぼすべての点に移動したにもかかわらず、CloudWatchには何の誤りもない。 stepfunctions.StartExecution行は決して実際には呼び出されないように見えますが、関数は決して返されません(callbackがstepfunctionブロック内にあるかどうかにかかわらず)。

は、ここでラムダ関数です:

'use strict'; 
const AWS = require('aws-sdk'); 
const moment = require('moment'); 

exports.postArchive = (event, context, callback) => { 
    const parsedInput = JSON.parse(event.body); 
    const stepInput = JSON.stringify({ "thingId": parsedInput.thingId }); 
    const rightNow = moment().format('YYYYMMDD-hhmmss'); 
    const params = { 
     stateMachineArn: 'arn:aws:states:us-east-1:ACCOUNT_ID:stateMachine:create-archive', 
     input: stepInput, 
     name: `ArchiveAt${rightNow}` 
    }; 
    console.log(JSON.stringify(params)); 
    const stepfunctions = new AWS.StepFunctions({apiVersion: '2016-11-23'}); 

    stepfunctions.startExecution(params, function (err, data) { 
     if (err) { 
      console.log(err, err.stack); 
      callback(err, null); 
      return; 
     } 
     const response = { 
      statusCode: 200, 
      headers: { 
       "Content-Type": "application/json" 
      }, 
      body: JSON.stringify({ 
       message: "State Machine started successfully.", 
       result: data 
      }) 
     }; 
     callback(null, response); 
    }); 
}; 

また、ラムダIAMロールにはAWSのステップ機能へのフルアクセス権を持っているので、私はそこに問題があるとは思いません。

+0

デフォルトのLambdaタイムアウトを3秒間使用している可能性はありますか? タイムアウトを1〜300秒の任意の値に設定できます。 – jarmod

+0

いいえ、タイムアウトは現在60秒に設定されていますが、何回も使用しないように数回設定しています。 –

答えて

0

Lambda関数にステートマシンでの実行を開始するために使用していたVPC /サブネット/セキュリティグループのコンボの1つまたはすべてに明らかに問題がありました。

これについて私が見つけることができるドキュメントはありませんので、間違っているか間違っているかもしれませんが、これが私のために働いています。プライベートサブネット内のデータベースと実際にやり取りするすべての関数を実行し、ステップ関数でそれらを連鎖させることができるので、おそらく大丈夫です。

関連する問題