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 fonction de résolution pour Lambda
Vous pouvez utiliser des AWS AppSync fonctions et des résolveurs pour invoquer les fonctions Lambda situées dans votre compte. Vous pouvez modifier 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 l'objet de votre 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 tant qu'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 etBatchInvoke. L'Invokeopération permet de AWS AppSync savoir d'appeler votre fonction Lambda pour chaque résolveur de champs GraphQL. BatchInvokedemande de AWS AppSync traiter par lots les requêtes pour le champ GraphQL actuel. Le champ operation est obligatoire.
PourInvoke, la demande résolue correspond à la charge utile en 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" } } }
PourBatchInvoke, 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 demande. L'exemple de gestionnaire de requêtes suivant montre 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 de lot. La fonction Lambda devrait également renvoyer une réponse sous forme de liste correspondant à l'ordre des éléments envoyés dans la requête :
[ { "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.
Types d’invocation
La source de données Lambda vous permet de définir deux types d'invocation : RequestResponse et. Event Les types d'appel sont synonymes des types d'appel définis dans l'API Lambda. 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'invoquer votre fonction Lambda de manière asynchrone. Pour plus d'informations sur la façon dont Lambda gère les demandes de type d'Eventappel, consultez Invocation asynchrone. Le champ invocationType est facultatif. Si ce champ n'est pas inclus dans la demande, le type d'RequestResponseinvocation AWS AppSync sera utilisé par défaut.
Pour tous les invocationType champs, la demande résolue correspond à la charge utile en 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'Eventinvocation, 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 la forme d'un événement asynchrone, sous la payload forme d'une liste de valeurs. La réponse à une demande de type d'Eventinvocation se traduit par une null valeur sans gestionnaire de réponse :
{ "data": { "field": null } }
Nous vous recommandons de désactiver la mise en cache des 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 type GraphQL. Le résultat de la fonction Lambda est contenu dans la propriété context result (context.result).
Si la forme de la réponse de votre fonction Lambda correspond à la forme du type GraphQL, vous pouvez transmettre 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, étant donné que 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 champ operation est défini sur BatchInvoke, AWS AppSync attend une liste d'éléments renvoyée par la fonction Lambda. Pour que chaque résultat corresponde AWS AppSync à l'élément de demande d'origine, la liste de réponses doit correspondre en taille et en ordre. La présence d'nulléléments dans la liste de réponses est valide ; elle ctx.result est définie sur null en conséquence.