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

イベントソースマッピング

AWS Lambda では、Lambda 関数およびイベントソースは AWS Lambda の主な構成要素です。イベントソースはイベントを発行するエンティティであり、Lambda 関数はそのイベントを処理するカスタムコードです。サポートされているイベントソースとは、AWS Lambda で使用できるように事前設定された AWS サービスのことです。設定はイベントソースマッピングといい、イベントソースを Lambda 関数にマッピングします。これにより、イベントが発生した場合に Lambda 関数の自動呼び出しが可能になります。

各イベントソースマッピングは、発行するイベントのタイプおよびイベント発生時に呼び出す Lambda 関数を識別します。その後、特定の Lambda 関数がイベント情報をパラメーターとして受信し、Lambda 関数コードがイベントを処理できるようになります。

イベントソースに関して以下の点に注意してください。これらのイベントソースは、以下のいずれかです。

  • AWS サービス – AWS Lambda で使用するように事前設定できる、サポートされている AWS サービスがあります。これらのサービスを、常用 AWS サービスまたはストリームベースのサービスとしてグループ化できます。Amazon Kinesis Streams および Amazon DynamoDB Streams はストリームベースのイベントソースであり、そのほかの AWS サービスはストリームベースのイベントソースを使用しません。イベントソースマッピングを維持する場合、および Lambda 関数の呼び出し方法は、ストリームベースのイベントソースを使用しているかどうかによって異なります。

  • カスタムアプリケーション – イベントの発行や Lambda 関数の呼び出しに、カスタムアプリケーションを使用できます。

イベントマッピング情報をどこに維持するか迷うことがあるかもしれません。AWS Lambda 内のイベントソース内に維持すればいいのでしょうか?次のセクションでは、これらイベントソースのカテゴリごとにイベントソースマッピングについて説明します。このセクションでは、Lambda 関数の呼び出し方法および Lambda 関数の呼び出しを許可するアクセス権限の管理についても説明します。

AWS サービス向けのイベントソースマッピング

ストリームベースの AWS サービス (Amazon Kinesis Streams および DynamoDB ストリーム) を除いて、サポート対象の AWS サービスはイベントを発行し、また Lambda 関数を呼び出すことができます (プッシュモデルといいます)。プッシュモデルは、以下に注意してください。

  • イベントソースマッピングは、イベントソース内に保持されます。イベントソース内の関連 API サポートを使用して、イベントソースマッピングを作成および管理できます。たとえば、Amazon S3 はバケット通知設定 API を提供します。この API を使用して、発行するバケットイベントと呼び出す Lambda 関数を識別するイベントソースマッピングを設定できます。

  • イベントソースは Lambda 関数を呼び出すため、リソースベースのポリシー (Lambda 関数ポリシーといいます) を使用してイベントソースに必要なアクセス権限を付与する必要があります。詳細については、「AWS Lambda アクセス権限モデル」を参照してください。

以下の例では、このモデルの仕組みを示しています。

例 - Amazon S3 がイベントをプッシュし Lambda 関数の呼び出す

オブジェクト作成バケットイベントごとに、AWS Lambda 関数を呼び出すとします。バケットの通知設定に必要なイベントソースマッピングを追加します。

図はフローを示しています。

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

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

  3. Amazon S3 がバケット通知設定に記述されたイベントソースマッピングに従って Lambda 関数を呼び出します。

  4. AWS Lambda が Lambda 関数に添付されたアクセス権限ポリシーを検証して、その Amazon S3 に必要なアクセス権限があることを確認します。アクセス権限ポリシーの詳細については、「AWS Lambda に対する認証とアクセスコントロール」を参照してください。

  5. AWS Lambda で添付されたアクセス権限ポリシーが確認されると、Lambda 関数が実行されます。Lambda 関数はパラメーターとしてイベントを受け取ることに留意してください。

AWS ストリームベースのサービス向けのイベントソースマッピング

Amazon Kinesis Streams ストリームと DynamoDB ストリームは、AWS Lambda で使用するようにあらかじめ設定できるストリームベースのサービスです。必要なイベントソースをマッピングすると、AWS Lambda はストリームをポーリングして、Lambda 関数を呼び出します (プルモデルといいます)。プルモデルは、以下に注意してください。

  • イベントソースマッピングは、AWS Lambda 内に維持されます。AWS Lambda はイベントソースマッピングを作成、管理するための関連 API を提供します。詳細については、「CreateEventSourceMapping」を参照してください。

  • AWS Lambda に、ストリームをポーリングして、レコードを読み取るアクセス権限が必要となります。これらのアクセス権限は、Lambda 関数の作成時に指定したロールに関連付けられたアクセス権限ポリシーを使用して、実行ロールを経由して付与します。AWS Lambda には、Lambda 関数を呼び出すためのアクセス権限は必要ありません。

以下の例では、このモデルの仕組みを示しています。

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

次の図は、Amazon Kinesis ストリームにレコードを書き込むカスタムアプリケーションおよび AWS Lambda がストリームをポーリングする方法を示します。AWS Lambda がストリームで新規レコードを検出すると、Lambda 関数を呼び出します。

Amazon Kinesis ストリームにレコードを作成するカスタムアプリケーションがあるとします。ストリームで新しいレコードが検出されると、Lambda 関数が呼び出されるようにします。Lambda 関数と必要なイベントソースマッピングを AWS Lambda に作成します。

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

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

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

  3. 添付されたアクセス権限ポリシー (AWS Lambda にストリームのポーリングを許可するもの) が検証されると、AWS Lambda は Lambda 関数を実行します。アクセス権限ポリシーの詳細については、「AWS Lambda に対する認証とアクセスコントロール」を参照してください。

例では Amazon Kinesis ストリーミングを使用しますが、DynamoDB ストリームを使用するときも同様です。

カスタムアプリケーションのイベントソースマッピング

イベントを発行して処理するカスタムアプリケーションがある場合は、これらのイベントを処理する Lambda 関数を作成できます。この場合、事前設定は必要ありません。つまり、イベントソースマッピングをセットアップする必要はありません。代わりに、イベントソースは AWS Lambda の Invoke API を使用します。アプリケーションおよび Lambda 関数が異なる AWS アカウントによって所有されている場合、Lambda 関数を所有する AWS アカウントは Lambda 関数に関連付けられるアクセス権限ポリシーでクロスアカウント権限を許可する必要があります。

以下の例では、このしくみを示しています。

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

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

次の例では、ユーザーアプリケーションおよび Lambda 関数は、さまざまな AWS アカウントによって所有されています。この場合、Lambda 関数を所有する AWS アカウントは、Lambda 関数に関連付けられたアクセス権限ポリシーに、クロスアカウントアクセス権限がある必要があります。詳細については、「AWS Lambda アクセス権限モデル」を参照してください。

推奨事項

AWS Lambda を初めて使用する場合は、「仕組み」セクションのすべてのトピックに目を通し、Lambda の内容を確認しておくことをお勧めします。次のトピックは「サポートされているイベントソース」です。

「仕組み」セクションのすべてのトピックに目を通した後は、Lambda 関数のビルドを確認して、ご利用開始にあたっての実習を体験し、ユースケースについて学習することをお勧めします。各ユースケースには、エンドツーエンドエクスペリエンスを体験できるエンドツーエンドの説明が記載されています。