クロスアカウントの Kinesis ストリームを使用して、私の Lambda 関数を呼び出す方法を教えてください?

最終更新日:2021-12-16

別の AWS アカウントにある Amazon Kinesis ストリームを使用して AWS Lambda 関数を呼び出す必要があります。これを設定するにはどうすればよいですか?

簡単な説明

現在のところ、Lambda は Kinesis またはストリームベースのソースからのクロスアカウントのトリガーをサポートしていません。

回避策として、Kinesis ストリームと同じアカウント (アカウント 1) に「ポーラー」Lambda 関数を作成できます。次に、もう一方のアカウント (アカウント 2) で 2 つ目の「プロセッサー」Lambda 関数を呼び出すように関数を設定します。

警告:この設定により、 Kinesis Data Streams を使用する利点の多くがなくなります。この手順の完了後は、シャード内でレコードをブロックしたり、順序付けを作成したりすることはできません。アプリケーションがこれらの特徴を使用する必要がない場合にのみ、この回避策を使用することをお勧めします。

解決方法

Kinesis ストリームと同じアカウント (アカウント 1) に「ポーラー」Lambda 関数を設定する

1.    アカウント1に実行ロールを含むLambda関数を作成します。

注意 : 関数は、Lambda コンソールを使用するか、独自のデプロイパッケージを構築してアップロードすることにより、作成できます。

2.    Kinesis ストリームに必要な許可を関数の実行ロールに追加します

3.    Kinesis ストリームを関数のイベントソースとして設定します

重要: イベントソースマッピングを作成するときには、Lambda 関数と Kinesis ストリームが同じアカウント内に存在することを確認してください。

2 番目のアカウント (アカウント 2) で「プロセッサー」Lambda 関数を設定します

1.    アカウント2に実行ロールを含むLambda関数を作成します

2.    アカウント2でAWS Identity and Access Management(IAM)ロール(呼び出しロール)を作成します

注:この呼び出しロールは、アカウント 1 の「ポーラー」関数がアカウント2の「プロセッサ」関数を呼び出すために引き受けます。

3.    アカウント 2の呼び出しロールのポリシーを以下の方法で変更します: 

  • アカウント 2 の「プロセッサー」Lambda 関数を (Lambda: invokeFunction アクションを使用して) 呼び出すための呼び出しロール許可を付与します。
  • 信頼関係を編集して、アカウント 1 の「ポーラー」Lambda 関数の実行ロールがアカウント 2 の呼び出しロールを引き受けることができるようにします。

詳細については、AWS Lambda のアイデンティティベースの IAM ポリシーを参照してください。AWS のサービスにアクセス許可を委任するロールを作成します。.

アカウント 1 の「ポーラー」Lambda 関数を設定して、アカウント 2 の呼び出しロールを引き受けます

1.    アカウント 1 の実行ロールポリシーに AssumeRole API を呼び出してアカウント 2 の呼び出しロールを引き受けるアクセス許可を付与します。sts: AssumeRole アクションを必ず使用してください。詳細については、「ロールを切り替えるための許可をユーザーに付与する」を参照してください。

2.    アカウント 1 の「ポーラー」関数を更新して、次のようにします:

  • アカウント 2 の呼び出しロールを引き受けます。手順については、「IAM ロールへの切り替え (AWS API)」を参照してください。
  • Kinesisからの入力イベントをアカウント2の「プロセッサ」関数に渡します。関数に入力イベントを渡すには、サービスクライアントをインスタンス化し、適切な SDK メソッドを使用して非同期呼び出し (Event 呼び出しタイプ) を要求します。
    注意: 呼び出す SDK メソッドを調べるには、使用するランタイムの SDK ドキュメントを参照してください。

3.    アカウント 2 の関数のデッドレターキュー (DLQ) を設定します。これにより、関数エラーが発生した場合に、見逃したイベントを調査または再試行できます。

失敗したイベントレコードの送信先を構成します

アカウント 1 の「ポーラー」関数用に設定されたイベントソースに対して、失敗したイベントレコードの送信先を設定します

注:失敗したイベントのレコードの宛先を構成すると、Lambdaは、破棄されたレコードに関する詳細を宛先のキューまたはトピックに送信するように指示されます。。