スポンサーリンク
前回に続いて、またもLambdaネタです。
aws-sdkを使えばLambdaからLambdaを呼び出せるんですが、VPC内のLambda から VPC内のLambdaを呼び出す際は追加で設定が必要となります。
ここでは必要となる設定方法を解説します!
試したコード
以下のようなコードでLambdaからLambdaを呼び出します。
const aws = require('aws-sdk');
const callLambda = async(arn, data) => {
aws.config.update({ region: 'ap-northeast-1'});
var lambda = new aws.Lambda({ apiVersion: '2015-03-31' });
const params = {
FunctionName: arn,
InvocationType: "RequestResponse",
Payload: JSON.stringify(data)
};
return new Promise((resolve, reject) => {
lambda.invoke(params, (err, data) => {
if (err) {
console.log(err, err.stack);
reject(err);
} else {
console.log(data);
resolve(data);
}
});
});
}
const main = async() => {
const arn = "呼び出すLambdaのARN";
const param = { key : "test" };
await callLambda(arn, param);
}
main();
普通に呼び出せそうな雰囲気なんですが、何も設定しない場合だとタイムアウトエラーになってしまいます・・・
スポンサーリンク
設定
VPCにエンドポイントを設定することで、LambdaからLambdaの呼び出しが可能になります。
まずはVPCを開いて、左のメニューから「エンドポイント」を選択します。
続いて、「エンドポイントの作成」をクリック。
エンドポイントの作成画面が出るので必要な情報を入力していきます。
長いので2分割。まずは上半分から。
主に入力するのは以下の項目です。
- サービス名・・・「lambda」で検索した結果を選択します。
- 東京リージョンの場合⇒ 「com.amazonaws.ap-northeast-1.lambda」
- サブネット・・・選択できるサブネットを選択します。
- プライベートDNS名を有効にする・・・とりあえずチェックを入れておきます。
続いて下半分です。
- セキュリティグループ・・・任意のグループを選択
- ポリシー・・・今回はフルアクセスを選択。(可能であればカスタムで対象を限定しましょう)
入力したら「エンドポイント作成」をクリックして設定完了です。
再度Lambdaを実行すれば問題なく呼び出せます!!
スポンサーリンク
まとめ
一見、普通に呼び出しできそうなLambda⇒Lambdaですが、一筋縄でいかないのがAWS。
意外とハマリどころでもあります。
S3などのリージョンサービスにVPC内からアクセスできない場合も同じようなケースが多いので、サービスにアクセスできないときはエンドポイントを疑ってみましょう(^ ^)
コメントを残す