AWS AppSync JavaScript référence de la fonction de résolution pour Lambda - AWS AppSync

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

AWS AppSync JavaScript référence de la fonction de résolution pour Lambda

Vous pouvez utiliser des AWS AppSync fonctions et des résolveurs pour appeler les fonctions Lambda situées dans votre compte. Vous pouvez façonner les charges utiles de vos demandes et la réponse de vos fonctions Lambda avant de les renvoyer à vos clients. Vous pouvez également spécifier le type d'opération à effectuer dans votre objet de demande. Cette section décrit les demandes relatives aux opérations Lambda prises en charge.

Objet Requête

L'objet de requête Lambda gère les champs liés à votre fonction Lambda :

export type LambdaRequest = { operation: 'Invoke' | 'BatchInvoke'; invocationType?: 'RequestResponse' | 'Event'; payload: unknown; };

Voici un exemple qui utilise une invoke opération dont les données de charge utile sont le getPost champ d'un schéma GraphQL avec ses arguments issus du contexte :

export function request(ctx) { return { operation: 'Invoke', payload: { field: 'getPost', arguments: ctx.args }, }; }

L'intégralité du document de mappage est transmise en entrée à votre fonction Lambda, de sorte que l'exemple précédent ressemble désormais à ceci :

{ "operation": "Invoke", "payload": { "field": "getPost", "arguments": { "input": { "id": "postId1", } } } }

Opération

La source de données Lambda vous permet de définir deux opérations operation sur le terrain : Invoke et. BatchInvoke L'Invokeopération permet de AWS AppSync savoir d'appeler votre fonction Lambda pour chaque résolveur de champs GraphQL. BatchInvokeindique de regrouper AWS AppSync les requêtes pour le champ GraphQL actuel. Le champ operation est obligatoire.

En effetInvoke, la demande résolue correspond à la charge utile d'entrée de la fonction Lambda. Modifions l'exemple ci-dessus :

export function request(ctx) { return { operation: 'Invoke', payload: { field: 'getPost', arguments: ctx.args }, }; }

Ceci est résolu et transmis à la fonction Lambda, qui pourrait ressembler à ceci :

{ "operation": "Invoke", "payload": { "arguments": { "id": "postId1" } } }

En BatchInvoke effet, la demande est appliquée à chaque résolveur de champs du lot. Par souci de concision, AWS AppSync fusionne toutes les payload valeurs de demande dans une liste sous un seul objet correspondant à l'objet de la demande. L'exemple de gestionnaire de demandes suivant illustre la fusion :

export function request(ctx) { return { operation: 'Invoke', payload: ctx, }; }

Cette demande est évaluée et résolue dans le document de mappage suivant :

{ "operation": "BatchInvoke", "payload": [ {...}, // context for batch item 1 {...}, // context for batch item 2 {...} // context for batch item 3 ] }

Chaque élément de la payload liste correspond à un seul article du lot. La fonction Lambda devrait également renvoyer une réponse sous forme de liste correspondant à l'ordre des éléments envoyés dans la demande :

[ { "data": {...}, "errorMessage": null, "errorType": null }, // result for batch item 1 { "data": {...}, "errorMessage": null, "errorType": null }, // result for batch item 2 { "data": {...}, "errorMessage": null, "errorType": null } // result for batch item 3 ]

Charge utile

Le payload champ est un conteneur utilisé pour transmettre des données à la fonction Lambda. Si le operation champ est défini surBatchInvoke, AWS AppSync regroupe les payload valeurs existantes dans une liste. Le champ payload est facultatif.

Type d'invocation

La source de données Lambda vous permet de définir deux types d'invocation : et. RequestResponse Event Les types d'invocation sont synonymes des types d'invocation définis dans le Lambda. API Le type RequestResponse d'invocation permet d' AWS AppSync appeler votre fonction Lambda de manière synchrone pour attendre une réponse. L'Eventinvocation vous permet d'appeler votre fonction Lambda de manière asynchrone. Pour plus d'informations sur la façon dont Lambda gère les demandes de type Event invocation, consultez Invocation asynchrone. Le champ invocationType est facultatif. Si ce champ n'est pas inclus dans la demande, le type d'RequestResponseappel AWS AppSync sera défini par défaut.

Quel que soit invocationType le champ, la demande résolue correspond à la charge utile d'entrée de la fonction Lambda. Modifions l'exemple ci-dessus :

export function request(ctx) { return { operation: 'Invoke', invocationType: 'Event', payload: { field: 'getPost', arguments: ctx.args }, }; }

Ceci est résolu et transmis à la fonction Lambda, qui pourrait ressembler à ceci :

{ "operation": "Invoke", "invocationType": "Event", "payload": { "arguments": { "id": "postId1" } } }

Lorsque l'BatchInvokeopération est utilisée conjointement avec le champ de type d'Eventappel, elle AWS AppSync fusionne le résolveur de champ de la même manière que celle mentionnée ci-dessus, et la demande est transmise à votre fonction Lambda sous forme d'événement asynchrone sous la forme d'une liste de valeurs. payload La réponse d'une demande de type Event invocation aboutit à une null valeur sans gestionnaire de réponse :

{ "data": { "field": null } }

Nous vous recommandons de désactiver la mise en cache des résolveurs pour les résolveurs de type Event invocation, car ceux-ci ne seraient pas envoyés à Lambda en cas d'accès au cache.

Objet Réponse

Comme pour les autres sources de données, votre fonction Lambda envoie une réponse AWS AppSync qui doit être convertie en un type GraphQL. Le résultat de la fonction Lambda est contenu dans la propriété de context résultat ()context.result.

Si la forme de la réponse de votre fonction Lambda correspond à la forme du type GraphQL, vous pouvez transférer la réponse à l'aide du gestionnaire de réponse de fonction suivant :

export function response(ctx) { return ctx.result }

Aucun champ obligatoire ni aucune restriction de forme ne s'appliquent à l'objet de réponse. Cependant, comme GraphQL est fortement typé, la réponse résolue doit correspondre au type GraphQL attendu.

Réponse par lots de la fonction Lambda

Si le operation champ est défini surBatchInvoke, AWS AppSync attend une liste d'éléments en retour de la fonction Lambda. Afin de AWS AppSync faire correspondre chaque résultat à l'élément de demande d'origine, la liste de réponses doit correspondre en taille et en ordre. Il est valide d'avoir des null éléments dans la liste de réponses ; elle ctx.result est définie sur null en conséquence.