35
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

LambdaからLambdaを呼び出す

Last updated at Posted at 2019-06-17

LambdaからLambdaを呼び出したい時がある。
その場合はInvokeを使うことで解決できる。

Invokeとは

これ
Lambdaクラスのメソッドの一種。

使い方

Nodeの場合。
Nodeのバージョンは8.1。

const AWS = require('aws-sdk');
const lambda = new AWS.Lambda();

// ペイロード。呼び出すLambda関数に受け渡す引数的な。
let payload = {
    "number":number,
    "message":"ご来場ありがとうございました"
}

// ペイロードをStringにする。
payload = JSON.stringify(payload);
 
// params           
let params = {
    FunctionName:"SendSMS",
    InvocationType:"RequestResponse",
    Payload:payload
 }
            
try {
    // Lambda関数呼び出し
    let callLambda = await lambda.invoke(params).promise();
                
 } catch (e) {
    console.log("[ERROR]sendSMS/callLambda",e)
 }

上はSMS送信するLambda関数を呼び出しているソースコード。

呼び出されるLambdaに渡す引数をString形式にしてpayloadにセットし、
呼びだす関数名(FunctionName)と、どのように呼び出すか(InvocationType)を指定して呼び出す。

補足

InvocationTypeについて
InvocationTypeはRequestResponse、Event、DryRunがある。
ドキュメントに全部書いてあるが、簡単に要約するとこんな感じ。
・RequestResponse
同期的に他の関数を呼び出す。InvocationTypeを指定しなければこれがデフォルトとなる。
呼び出した関数から何かレスポンスが返ってくるか、タイムアウトになるまで呼び出し元の関数と呼び出し先の関数の間でコネクションを張る。
戻り値として呼び出した関数から値を得ることができる。

・Event
非同期に他の関数を呼び出す。
呼び出した関数からはステータスコードのみ返却される。
試行に失敗したら複数回イベントを送信する(?)

・DryRun
呼び出しパラメーター(ペイロードのこと?)と、関数を呼び出そうとしているユーザーまたはロールについて検証を行う。

呼び出した関数から何か値を得たい場合はRequestResponse、とりあえず実行できればいいだけの場合はEvent、諸々検証したい場合はDryRun?

payloadについて
呼び出し先に渡す値はJSON形式で記述するが、引数をセットしたjsonはバッファ、配列、Blob、文字列のいずれかの型に変換する。
普通にオブジェクトでjson作って、json.stringifyでStringに変換するのが一番楽かなと思う。

35
26
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?