Amazon API Gateway API 用の AWS Lambda 関数を非同期で呼び出そうとしています。関数を同期的に呼び出すことは避けたいです。
解決策
REST API
Lambda の非プロキシ統合では、Lambda はデフォルトでバックエンド関数を同期的に呼び出します。バックエンド関数を非同期で呼び出すには、Lambda の呼び出しタイプを Event に設定します。
次の手順を実行します。
- API Gateway コンソールを開きます。
- [API] を選択し、該当する REST API を選択します。
- [リソース] で [GET] を選択してから、[統合リクエスト] を選択します。
- [統合タイプ] で [Lambda 関数] を選択します。
- [URL リクエストヘッダーのパラメータ] を展開し、[リクエストヘッダーのパラメータを追加] を選択します。
- [名前] に X-Amz-Invocation-Type と入力します。
- [マッピング元] に Event と入力します。
- REST API を再度デプロイします。
非同期または同期のオプションを指定して Lambda 関数を呼び出すには、InvocationType ヘッダーを追加します。
次の手順を実行します。
- API Gateway コンソールを開きます。
- [API] を選択し、該当する REST API を選択します。
- [リソース]で [GET] を選択し、[メソッドリクエスト] を選択します。
- [リクエストバリデーター] で [編集] アイコンをクリックします。
- ドロップダウンリストを展開し、[クエリ文字列パラメータとヘッダーの検証] を選択します。
- [保存] アイコンをクリックします。
- [HTTP リクエストヘッダー] を展開し、[ヘッダーを追加] を選択します。
- [名前] に InvocationType と入力し、[必須] を選択します。
- [統合リクエスト] で [URL リクエストヘッダーのパラメータ] を展開し、[リクエストヘッダーのパラメータを追加] を選択します。
- [名前] に X-Amz-Invocation-Type と入力します。
- [マッピング元] に method.request.header.InvocationType と入力します。
- REST API を再度デプロイします。
API リクエストにおいて、クライアントは、非同期呼び出しの場合は InvocationType: Event ヘッダーか、同期呼び出しの場合は InvocationType: RequestResponse ヘッダーを含めることができます。
HTTP API
HTTP API は、Lambda のプロキシ統合のみをサポートします。HTTP API の API Gateway 統合では、X-Amz-Invocation-Type ヘッダーを設定できません。代わりに、2 つの Lambda 関数を使用し、そのうちの 1 つをプロキシとして使用してください。ある Lambda 関数を別の関数から呼び出す場合は、Invoke API を使用し、1 番目の Lambda 関数で InvocationType を Event に設定します。
設定例
HTTP API が Lambda1 を同期的に呼び出した後、Lambda1 は Lambda2 を非同期的に呼び出します。