AWS Lambda から Lambda の実行

技術情報
公開: 2023年04月28日

概要

呼び出し元の Lambda が VPC 内にあるかどうかで必要な設定が変わる。
vpc 内 Lambda から Lambda を呼ぶ( invoke する)場合、public subnet や private subnet などのパターン別に呼べるか検証してみた

  • 呼び出し元の Lambda が VPC 外: IAMロールの設定(AWSLambdaRole)が必要
  • 呼び出し元の Lambda が VPC 内:セキュリティグループの作成、VPC エンドポイントの作成、 IAMロールの設定(AWSLambdaRole、AWSLambdaVPCAccessExecutionRole)が必要

VPC 外 Lambda から Lambda を呼ぶ

呼び出される側(testFunction02)

特に考慮は不要

def lambda_handler(event, context):
    print('[testFunction02] Called by testFunction01')
    return {'message': 'called by testFunction01'}

呼び出されたログは以下に出力される。 CloudWatch > ロググループ > /aws/lambda/testFunction02

print の出力内容も CloudWatch のログに出力される。

呼び出し側(testFunction01)

最小コード

import boto3

def lambda_handler(event, context):
    boto3.client('lambda').invoke(
        FunctionName = 'testFunction02',
        InvocationType='RequestResponse'
        )

IAMロールの設定

  • Lambda > 関数 > 作成した Lambda
  • 設定 > アクセス権限 > 実行ロール > 編集
  • 既存のロールのリンクをクリック
  • 許可ポリシーに以下を追加
    • AWSLambdaRole

VPC 内 Lambda から Lambda を呼ぶ

1. セキュリティグループを作成

  • VPC > セキュリティグループ > 「セキュリティグループを作成」ボタン
  • いったん作成し、インバウンドルールを追加
    • タイプ: すべてのトラフィック
    • ソース: カスタム(自身のセキュリティグループを設定)

2. VPC エンドポイントを作成

  • VPC > エンドポイント > 「エンドポイントを作成」ボタン
  • エンドポイントを作成
    • エンドポイントの設定
      • サービスカテゴリ: AWS のサービス
    • サービス: com.amazonaws.ap-northeast-1.lambda
    • VPC: VPC 内 Lambda の VPC を選択
    • サブネット: VPC 内 Lambda の サブネットを選択
    • セキュリティグループ: 1. で作成したセキュリティグループ
    • 「エンドポイントを作成」ボタン

3. VPC 内 Lambda の作成

  • Lambda > 「関数の作成」ボタン
  • 関数の作成
    • 詳細設定
      • VPC を有効化にチェック
      • VPC: 2. と同じ内容
      • サブネット: 2. と同じ内容
      • セキュリティグループ: 2. と同じ内容
    • 「関数の作成」ボタン

4. IAMロールの設定

  • Lambda > 関数 > 作成した Lambda
  • 設定 > アクセス権限 > 実行ロール > 編集
  • 既存のロールのリンクをクリック
  • 許可ポリシーに以下を追加
    • AWSLambdaRole
    • AWSLambdaVPCAccessExecutionRole

参考

VPC エンドポイントを使用する方法
vpc 内 Lambda から Lambda を呼ぶ( invoke する)場合、public subnet や private subnet などのパターン別に呼べるか検証してみた

NAT Gateway を使用する方法(課金注意)
(AWS)Lambda からLambdaの実行

InvocationType のオプション(同期/非同期)
AWS Lambdaのトリガーについて

SQS をトリガーにする例
SQSのキューをトリガーにしてLambdaでメッセージを受信する(Python)
Boto3(AWS SDK for Python)でSQSに送信したメッセージをLambdaでポーリングして受信してみた
Amazon SQS での Lambda の使用