Lambda を使用した Amazon Kinesis Data Streams レコードの処理
Lambda を使用して Amazon Kinesis Data Streams レコードを処理するには、Lambda イベントソースマッピングを作成します。Lambda 関数は標準イテレーターか、拡張ファンアウトコンシューマーにマッピングすることができます。詳細については、「ポーリングストリームとバッチストリーム」を参照してください。
Kinesis イベントソースマッピングを作成する
データストリームからのレコードを使用して Lambda 関数を呼び出すには、イベントソースマッピングを作成します。複数のイベントソースマッピングを作成することで、複数の Lambda 関数で同じデータを処理したり、1 つの関数で複数のデータストリームの項目を処理したりできます。複数のストリームから項目を処理する場合、各バッチには 1 つのシャードまたはストリームのレコードのみが含まれます。
別の AWS アカウント のストリームからのレコードを処理するようにイベント ソース マッピングを構成できます。詳細についてはクロスアカウントのイベントソースマッピングの作成を参照してください。
イベントソースマッピングを作成する前に、Kinesis データストリームから読み取るためのアクセス許可を Lambda 関数に付与する必要があります。Lambda には、Kinesis データストリームに関連するリソースを管理するために次のアクセス許可が必要です。
AWS マネージドポリシー AWSLambdaKinesisExecutionRole には、これらのアクセス許可が含まれています。次の手順の説明に従って、この管理ポリシーを関数に追加します。
注記
-
Kinesis のイベントソースマッピングを作成および管理するための
kinesis:ListStreamsアクセス許可は必要ありません。ただし、コンソールでイベントソースマッピングを作成し、このアクセス許可がない場合、ドロップダウンリストから Kinesis ストリームを選択できず、コンソールにエラーが表示されます。イベントソースマッピングを作成するには、ストリームの Amazon リソースネーム (ARN) を手動で入力する必要があります。 -
Lambda は、失敗した呼び出しを再試行する際に
kinesis:GetRecordsおよびkinesis:GetShardIteratorAPI 呼び出しを行います。
必要なアクセス許可を設定した後、イベントソースマッピングを作成します。
ポーリングとストリームの開始位置
イベントソースマッピングの作成時および更新時のストリームのポーリングは、最終的に一貫性があることに注意してください。
-
イベントソースマッピングの作成時、ストリームからのイベントのポーリングが開始されるまでに数分かかる場合があります。
-
イベントソースマッピングの更新時、ストリームからのイベントのポーリングが停止および再開されるまでに数分かかる場合があります。
つまり、LATEST をストリームの開始位置として指定すると、イベントソースマッピングの作成または更新中にイベントを見逃す可能性があります。イベントを見逃さないようにするには、ストリームの開始位置を TRIM_HORIZON または AT_TIMESTAMP として指定します。
クロスアカウントのイベントソースマッピングの作成
Amazon Kinesis Data Streams は、リソースベースのポリシーをサポートします。このため、別のアカウントの Lambda 関数を使用して AWS アカウント のストリームに取り込まれたデータを処理できます。
別の AWS アカウント の Kinesis ストリームを使用して Lambda 関数のイベントソースマッピングを作成するには、リソースベースのポリシーを使用してストリームを設定し、Lambda 関数に項目を読み取るアクセス許可を付与する必要があります。クロスアカウントアクセスを許可するようにストリームを設定する方法については、「Amazon Kinesis Streams Developer guide」の「Sharing access with cross-account AWS Lambda functions」を参照してください。
Lambda 関数に必要なアクセス許可を付与するリソースベースのポリシーでストリームを設定したら、前のセクションで説明した方法のいずれかを使用してイベントソースマッピングを作成します。
Lambda コンソールでイベントソースマッピングを作成する場合は、ストリームの ARN を入力フィールドに直接貼り付けます。ストリームにコンシューマーを指定する場合、コンシューマーの ARN を貼り付けると、ストリームフィールドが自動的に入力されます。