クロスアカウントの Kinesis ストリームを使用して Lambda 関数を呼び出すにはどうすればよいですか?

最終更新日: 2020 年 9 月 25 日

別の AWS アカウントにある Amazon Kinesis ストリームを使用して AWS Lambda 関数を呼び出す必要があります。

簡単な説明

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

回避策として、Kinesis ストリームと同じアカウント (アカウント A) で「ポーラー」Lambda 関数を使用して、別のアカウント (アカウント B) の「プロセッサ」Lambda 関数を呼び出すことができます。

警告 : この構成では 、シーケンシャルな順序やシャード内のレコードのブロックなど、Kinesis データストリームを使用するメリットの多くが失われます。この回避策は、これらの機能を使用する必要がない場合にのみ使用することをお勧めします。

解決方法

アカウント A で Lambda 関数を設定する

  1. アカウント A で Lambda 関数を作成し、実行ロールを与えます。
    注意 : 関数は、Lambda コンソールを使用するか、独自のデプロイパッケージを構築してアップロードすることにより、作成できます。
  2. アカウント A の実行ロールに、Kinesis ストリームに関連するアクセス許可を付与します。
  3. Kinesis ストリームをイベントソースとして設定します
    重要: イベントソースマッピングを作成するときには、Lambda 関数と Kinesis ストリームが同じアカウント内に存在することを確認してください。

アカウント B で Lambda 関数を設定する

  1. アカウント B で Lambda 関数を作成し、実行ロールを与えます。
  2. アカウント B で AWS Identity and Access Management (IAM) ロールを作成します。この「呼び出し側ロール」は、アカウント A の関数でアカウントの B で関数を呼び出すために使用されます。
  3. 呼び出し側で次のようにポリシーを変更します
    ポリシーに同じアカウント (アカウント B) 内の Lambda 関数の呼び出しアクセス権限を与えます (lambda:InvokeFunction アクションを使用します)。
    アカウント A の実行ロールが呼び出しロールを引き受けられるように信頼関係を編集します

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

設定を更新する

  1. アカウント A の実行ロールのポリシーを変更します。ポリシーに AssumeRole API を呼び出すためのアクセス許可を付与して (sts:AssumeRole アクションを使用します)、アカウント B の実行ロールを引き受けられるようにします。詳細については、ユーザーにロールを切り替えるアクセス許可を付与するを参照してください。
  2. アカウント A の Lambda 関数を更新して、アカウント B の呼び出しロールを引き受けるようにします。詳細と例については、IAM ロールへの切り替え (AWS API) を参照してください。さらに、アカウント A は、サービスクライアントをインスタンス化し、適切な SDK メソッドを使用して非同期呼び出し (呼び出しタイプ Event) を要求することによって、関数 A からアカウント B の関数に入力イベントを渡します。
    注意: 呼び出す SDK メソッドを調べるには、使用するランタイムの SDK ドキュメントを参照してください。
  3. アカウント B の関数のためにデッドレターキュー (DLQ) を設定します。これにより、関数エラーが発生した場合、失われたイベントを調べ、再試行することができます。