web-dev-qa-db-ja.com

AWS HTTP API Gateway LambdaハンドラーのTypescript

現在、私は以下を使用してRestApiのラムダ関数を入力しています。

import { APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda';
export const handler = async (event: APIGatewayProxyEvent): Promise<APIGatewayProxyResult> => {}

これは、HTTPメソッドがevent.requestContext.http.methodを使用してフェッチできる新しいAWSゲートウェイHTTP APIでは正しく機能しません。

他に使用すべきタイプはありますか?

7
Sammy

他に使用すべきタイプはありますか?

そうは思わない。タイプはDefinitelyTypedを介して利用できます。 [1]「aws-lambda」タイプに関するいくつかの問題を調べると、API Gatewayタイプが頻繁に更新されていないことがわかります。 [2]

さらに、API Gatewayのペイロード形式のバージョンが変更されました。[3]を参照してください。

ペイロード形式のバージョンは、API GatewayがLambda統合に送信するデータの形式と、API GatewayがLambdaからの応答を解釈する方法を指定します。ペイロード形式のバージョンを指定しない場合、AWSマネジメントコンソールはデフォルトで最新バージョンを使用します。 AWS CLI、AWS CloudFormation、またはSDKを使用してLambda統合を作成する場合は、payloadFormatVersionを指定する必要があります。サポートされる値は1.0および2.0です。

2.0の最新バージョンを使用していると思います。バージョン2.0では、HTTPメソッドをプロパティrequestContext.http.methodとして提供しています。

バージョン1.0では、HTTPメソッドをプロパティrequestContext.httpMethodとして提供しています。

解決

1.)新しいペイロード形式バージョンのタイプを記述し、パッケージ "@ types/aws-lambda"のPRを介してDefinitelyTypedに送信するか、2)バージョン1.0を使用するようにAPI Gatewayを設定します。

正直なところ、ペイロードバージョン1.0をHTTP APIで使用できるかどうかはわかりません。古い形式をサポートする必要がないため、AWSが新しいAPIに最新バージョンを適用している可能性があります。

参考文献

[1] https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/aws-lambda/trigger/api-gateway-proxy.d.ts
[2] https://github.com/DefinitelyTyped/DefinitelyTyped/issues/38720#issuecomment-586051966
[3] https://docs.aws.Amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html

2
Martin Löper