メニュー
AWS Lambda
開発者ガイド

AWS Lambda を使用するアプリケーション構築の概要

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

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

     

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

     

  • ウェブサイト – ウェブサイトを作成して Lambda でバックエンドロジックをホストするとします。Amazon API Gateway を HTTP エンドポイントとして使用して、HTTP 経由で Lambda 関数を呼び出します。これで、ウェブクライアントが API を呼び出し、API ゲートウェイ がリクエストを 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) 内に維持されます。これは、ストリームベースのソース (Amazon Kinesis や DynamoDB ストリーム) を除くすべてのサポートされている AWS イベントソースに当てはまります。次の例では、ストリームベースのイベントソースを説明しています。

     

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

     

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

     

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

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

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

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

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

     

  2. AWS Lambda は継続してストリームをポーリングし、ストリームで新しいレコードを検出すると Lambda 関数を呼び出します。AWS Lambda は、Lambda に作成されたイベントソースマッピングに基づいて、ポーリングするストリームおよび呼び出す Lambda 関数を識別します。

     

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

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

  • ストリームベースのイベントソースを使用する場合:

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

       

    • AWS Lambda が Lambda 関数を呼び出します (プルモデルといいます)。

       

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

     

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

例 3: カスタムアプリケーションがイベントを発行し Lambda 関数を呼び出す

次の図は、アカウントでカスタムアプリケーションが Lambda 関数を呼び出す方法を示しています。

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

  1. カスタムアプリケーションは、AWS SDK を使用して Lambda 関数を呼び出します。

     

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

次の図は、カスタムモバイルアプリケーションがどのように Lambda 関数を呼び出すかを示しています。

  1. モバイルアプリケーションはリクエストを Amazon Cognito に送ります。リクエストには ID プール ID が含まれています (ID プールはセットアップの一部として作成)。

     

  2. Amazon Cognito が一時的なセキュリティ認証情報をアプリケーションに返します。

    Amazon Cognito は、ID プールに関連付けられたロールを引き受け、一時的な認証情報を生成します。

     

  3. モバイルアプリケーションは一時的な認証情報 (Cognito ID) を使用して Lambda 関数を呼び出します。

     

  4. AWS Lambda は実行ロールを引き受け、ユーザーの代わりに Lambda 関数を実行します。

     

  5. Lambda 関数が実行されます。

     

  6. AWS Lambda はモバイルアプリケーションに結果を返します。ただし、アプリケーションが RequestResponse の呼び出しタイプ (同期呼び出しといいます) を使用して Lambda 関数を呼び出したとします。

     

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

  • 以下は Lambda 関数をオンデマンドで呼び出す例です。オンデマンド呼び出しの場合は、AWS サービスの場合のようにイベントソースマッピングを事前設定する必要はありません。

     

  • この例では、カスタムアプリケーションは Lambda 関数を所有するアカウントと同じアカウント認証情報を使用しているため、関数を呼び出すためにアクセス権限を追加する必要はありません。

     

推奨事項

AWS Lambda を初めて使う場合、現時点でもこの「仕組み」の章のすべてのトピックを読み進めて詳細を知ることができます。また、先に「ご利用開始にあたって」実習を学習して Lambda 関数の作成とテストの経験を積んでから、この章のトピックを読むことも検討してください。

さらに、「Lambda 関数のビルド」には、技術的な詳細に移る前に知っておくと役に立つ入門情報が記載されています。