web-dev-qa-db-fra.com

Typescript pour les gestionnaires Lambda AWS HTTP API Gateway

Actuellement, j'utilise ce qui suit pour taper les fonctions lambda pour RestApi:

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

Cela ne fonctionne pas correctement avec la nouvelle API HTTP AWS Gateway, où la méthode HTTP peut être récupérée à l'aide de event.requestContext.http.method.

Y a-t-il d'autres types que je devrais utiliser?

7
Sammy

Y a-t-il d'autres types que je devrais utiliser?

Je ne pense pas. Les types sont disponibles via DefinitelyTyped. [1] En examinant certains des problèmes concernant les types "aws-lambda", vous remarquerez que les types de passerelle API ne sont pas fréquemment mis à jour. [2]

En outre, la version du format de la charge utile a changé pour API Gateway, voir [3]:

La version du format de charge utile spécifie le format des données envoyées par API Gateway à une intégration Lambda et la manière dont API Gateway interprète la réponse de Lambda. Si vous ne spécifiez pas de version de format de charge utile, AWS Management Console utilise la dernière version par défaut. Si vous créez une intégration Lambda à l'aide de l'AWS CLI, AWS CloudFormation ou un SDK, vous devez spécifier une payloadFormatVersion. Les valeurs prises en charge sont 1.0 et 2.0.

Je suppose que vous utilisez la dernière version qui est 2.0 . La version 2.0 fournit la méthode HTTP en tant que propriété requestContext.http.method.

La version 1.0 fournit la méthode HTTP sous la forme de propriété requestContext.httpMethod.

Solution

Vous pouvez soit 1.) écrire des typages pour la nouvelle version du format de charge utile et les soumettre à DefinatelyTyped via PR pour le package "@ types/aws-lambda" ou 2.) configurer votre API Gateway pour utiliser la version 1.0.

Honnêtement, je ne sais pas si l'utilisation de la version 1.0 de la charge utile est possible pour les API HTTP. Peut-être qu'AWS applique la dernière version sur les nouvelles API car il n'est pas nécessaire de prendre en charge l'ancien format.

Références

[1] https://github.com/DefinitelyTyped/DefinatelyTyped/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