AWS Lambda
開発者ガイド

AWS Lambda 関数の呼び出し

AWS Lambda でアプリケーション (サーバーレスアプリケーションを含む) を構築する場合のコアコンポーネントは、Lambda 関数とイベントソースです。イベントソースは AWS サービスまたはイベントを発行するカスタムアプリケーションであり、Lambda 関数はイベントを処理するカスタムコードです。説明のため、以下のシナリオを想定してください。

  • ファイル処理 – 写真共有アプリケーションがあるとします。ユーザーはこのアプリケーションを使用して写真をアップロードし、アプリケーションはユーザーの写真を Amazon S3 バケットに保存します。そこで、アプリケーションは各ユーザーの写真のサムネイルバージョンを作成し、ユーザーのプロフィールページに表示します。このシナリオでは、自動的にサムネイルを作成する Lambda 関数の作成を選択できます。Amazon S3 は AWS イベントでサポートされるソースであり、オブジェクト作成イベントを発行して Lambda 関数を呼び出すことができます。Lambda 関数コードは S3 バケットから写真オブジェクトを読み込み、サムネイルバージョンを作成して、それを別の S3 バケットに保存できます。

  • データと分析 – 分析アプリケーションを構築して、raw データを DynamoDB テーブルに保存するとします。テーブル内の項目を書き込み、更新、または削除した場合、DynamoDB ストリームは項目の更新イベントをテーブルに関連付けられたストリームに発行できます。この場合、イベントデータは、項目キー、イベント名 (挿入、更新、削除など)、その他関連する詳細情報を提供します。raw データを集約することでカスタムメトリクスを生成する Lambda 関数を記述できます。

  • ウェブサイト – ウェブサイトを作成して Lambda でバックエンドロジックをホストするとします。Amazon API Gateway を HTTP エンドポイントとして使用して、HTTP 経由で Lambda 関数を呼び出します。これで、ウェブクライアントが API を呼び出し、API Gateway がリクエストを Lambda にルーティングできるようになります。

  • モバイルアプリケーション – イベントを処理するカスタムモバイルアプリケーションがあるとします。カスタムアプリケーションによって発行されるイベントを処理するための Lambda 関数を作成できます。たとえば、このシナリオの場合、カスタムモバイルアプリケーション内のクリックを処理する Lambda 関数を設定できます。

それぞれのイベントソースは、イベントデータに特定の形式を使用します。詳細については、「イベントソースによって公開されたサンプルイベント」を参照してください。Lambda 関数が呼び出される際、イベントを Lambda 関数のパラメーターとして受信します。

AWS Lambda では、イベントソースとして、多くの AWS サービスをサポートしています。詳細については、「サポートされているイベントソース」を参照してください。これらのイベントソースを Lambda 関数をトリガーするように設定する場合、Lambda 関数はイベントが発生すると自動的に呼び出されます。イベントソースマッピングを定義して、追跡して Lambda 関数を呼び出すイベントを識別できます。

サポート対象の AWS サービスに加えて、ユーザーアプリケーションでイベントを生成することもできます。つまり、カスタムイベントソースを構築できます。カスタムイベントソースは AWS Lambda の Invoke オペレーションを使用して Lambda 関数を呼び出します。クライアント、モバイル、ウェブアプリケーションなどのユーザーアプリケーションは、AWS SDK または AWS Mobile SDK for Android などの AWS Mobile SDK を使用してイベントを発行し、Lambda 関数をオンデマンドで呼び出すことができます。

以下に、イベントソースの入門例およびエンドツーエンドエクスペリエンスの動作を説明します。

例 1: Amazon S3 プッシュイベントと Lambda 関数の呼び出し

Amazon S3 は、PUT、POST、COPY、および DELETE オブジェクトイベントなど異なる種類のイベントをバケットに発行できます。バケットの通知機能を使用して、特定のタイプのイベントが発生した場合に Lambda 関数を呼び出すように Amazon S3 に指示するイベントソースマッピングを設定できます。

図は、以下のシーケンスを示します。

  1. ユーザーはバケット内にオブジェクトを作成します。

  2. Amazon S3 がオブジェクト作成イベントを検出します。

  3. Amazon S3 が、実行ロールによって付与されたアクセス権限を使用して Lambda 関数を呼び出します。実行ロールについての詳細は、「AWS Lambda アクセス許可」を参照してください。Amazon S3 は、バケット通知設定に保存されたイベントソースマッピングに基づいて呼び出す Lambda 関数を確認します。

  4. AWS Lambda はイベントをパラメーターとして指定して、Lambda 関数を実行します。

次の点に注意してください。

  • イベントソースマッピングはイベントソースのサービス (このシナリオでは Amazon S3) 内に維持されます。これは、ポーリングベースのソース (Kinesis および DynamoDB ストリーム、または Amazon SQS キュー) を除くすべてのサポートされている AWS イベントソースに当てはまります。次の例では、ポーリングベースのイベントソースを説明しています。

  • イベントソース (Amazon S3) が Lambda 関数を呼び出します (プッシュモデルといいます)。これも、ポーリングベースのイベントソースを除くすべてのサポート対象の AWS サービスに当てはまります。

  • イベントソース (Amazon S3) が Lambda 関数を呼び出すには、Lambda 関数に添付されたアクセス権限ポリシーを使用してアクセス権限を付与する必要があります。

例 2: AWS Lambda での Kinesis ストリームからのイベント取り出しと Lambda 関数呼び出し

ポーリングベースのイベントソースの場合、AWS Lambda がソースをポーリングし、ソースでレコードが検出されると、Lambda 関数が呼び出されます。ポーリングベースのソースでは、イベントソースのマッピング情報は AWS Lambda に保存されます。AWS Lambda では、前述のイベントソースマッピングを作成して管理するための API を提供します。

次の図は、カスタムアプリケーションが Kinesis ストリームにどのようにレコードを書き込むか示しています。

図は、以下のシーケンスを示します。

  1. カスタムアプリケーションは Kinesis ストリームにレコードを書き込みます。

  2. AWS Lambda はストリームのポーリングを継続し、サービスによってストリームに新しいレコードが検出されると Lambda 関数を呼び出します。AWS Lambda は、どのストリームをポーリングし、どの Lambda 関数を呼び出すかを、Lambda でユーザーが作成したイベントソースマッピングに基づいて判断します。

  3. Lambda 関数は、受信イベントに伴って呼び出されます。

次の点に注意してください。

  • ストリームベースのイベントソースを使用する場合、以下が該当します。

    • AWS Lambda でイベントソースマッピングを作成します。

    • AWS Lambda は Lambda 関数を同期的に呼び出します (プルモデルと呼ばれます)。

  • AWS Lambda では、Lambda 関数の呼び出しにアクセス権限は必要ありません。そのため、Lambda 関数に添付されたアクセス権限ポリシーに権限を追加する必要はありません。

  • Lambda ロールにはストリームから読み取るためのアクセス権限が必要です。

例 3: AWS Lambda で Amazon SQS キューからイベントを取り出し Lambda 関数を呼び出す

ポーリングベースのイベントソースの場合、AWS Lambda がソースをポーリングし、ソースでレコードが検出されると、Lambda 関数が呼び出されます。ポーリングベースのソースでは、イベントソースのマッピング情報は AWS Lambda に保存されます。AWS Lambda では、前述のイベントソースマッピングを作成して管理するための API を提供します。

次の図は、カスタムアプリケーションが Amazon SQS キューにどのようにレコードを作成するかを示します。

図は、以下のシーケンスを示します。

  1. カスタムアプリケーションは Amazon SQS キューにレコードを作成します。

  2. AWS Lambda はキューのポーリングを継続し、サービスによって新しいレコードが検出されると Lambda 関数を呼び出します。AWS Lambda は、どのキューをポーリングし、どの Lambda 関数を呼び出すかを、Lambda でユーザーが作成したイベントソースマッピングに基づいて判断します。

  3. Lambda 関数は、受信イベントに伴って呼び出されます。

次の点に注意してください。

  • ポーリングベースのイベントを使用する場合、以下が該当します。

    • AWS Lambda でイベントソースマッピングを作成します。

    • AWS Lambda は Lambda 関数を同期的に呼び出します (プルモデルと呼ばれます)。

  • AWS Lambda では、Lambda 関数の呼び出しにアクセス権限は必要ありません。そのため、Lambda 関数に添付されたアクセス権限ポリシーに権限を追加する必要はありません。

  • Lambda ロールにはキューおよびキュー属性から読み取るためのアクセス権限が必要です。

このページの内容: