AWS AppSync JavaScript referência da função de resolução para Lambda - AWS AppSync

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

AWS AppSync JavaScript referência da função de resolução para Lambda

Você pode usar AWS AppSync funções e resolvedores para invocar funções do Lambda localizadas em sua conta. Você pode moldar suas cargas de solicitação e a resposta de suas funções do Lambda antes de devolvê-las aos seus clientes. Também é possível especificar o tipo de operação a ser executada no seu objeto de solicitação. Esta seção descreve as solicitações para operações Lambda compatíveis.

Objeto de solicitação

O objeto de solicitação do Lambda manipula campos relacionados à sua função do Lambda:

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

Aqui está um exemplo que usa uma invoke operação com seus dados de carga útil sendo o getPost campo de um esquema GraphQL junto com seus argumentos do contexto:

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

Todo o documento de mapeamento é passado como entrada para sua função Lambda, de modo que o exemplo anterior agora tenha a seguinte aparência:

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

Operation

A fonte de dados Lambda permite definir duas operações no operation campo: e. Invoke BatchInvoke A Invoke operação permite AWS AppSync que você chame sua função Lambda para cada resolvedor de campo do GraphQL. BatchInvokeinstrui as solicitações em lote AWS AppSync para o campo GraphQL atual. O campo operation é obrigatório.

PoisInvoke, a solicitação resolvida corresponde à carga útil de entrada da função Lambda. Vamos modificar o exemplo acima:

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

Isso é resolvido e passado para a função Lambda, que pode ser mais ou menos assim:

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

PoisBatchInvoke, a solicitação é aplicada a cada resolvedor de campo no lote. Para ser conciso, AWS AppSync mescla todos os payload valores da solicitação em uma lista sob um único objeto correspondente ao objeto da solicitação. Veja um exemplo de mesclagem pelo manipulador de solicitação:

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

Essa solicitação é avaliada e resolvida no seguinte documento de mapeamento:

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

Cada elemento da payload lista corresponde a um único item do lote. Também se espera que a função Lambda retorne uma resposta em forma de lista correspondente à ordem dos itens enviados na solicitação:

[ { "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 ]

Carga útil

O payload campo é um contêiner usado para passar qualquer dado para a função Lambda. Se o operation campo estiver definido comoBatchInvoke, AWS AppSync agrupa os payload valores existentes em uma lista. O campo payload é opcional.

Tipo de invocação

A fonte de dados Lambda permite que você defina dois tipos de invocação: e. RequestResponse Event Os tipos de invocação são sinônimos dos tipos de invocação definidos no Lambda. API O tipo de RequestResponse invocação permite AWS AppSync chamar sua função Lambda de forma síncrona para aguardar uma resposta. A Event invocação permite que você invoque sua função Lambda de forma assíncrona. Para obter mais informações sobre como o Lambda lida com solicitações de tipo de Event invocação, consulte Invocação assíncrona. O campo invocationType é opcional. Se esse campo não for incluído na solicitação, o padrão AWS AppSync será o tipo de RequestResponse invocação.

Para qualquer invocationType campo, a solicitação resolvida corresponde à carga de entrada da função Lambda. Vamos modificar o exemplo acima:

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

Isso é resolvido e passado para a função Lambda, que pode ser mais ou menos assim:

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

Quando a BatchInvoke operação é usada em conjunto com o campo do tipo de Event invocação, AWS AppSync mescla o resolvedor de campo da mesma forma mencionada acima, e a solicitação é passada para sua função Lambda como um evento assíncrono, sendo uma lista de valores. payload A resposta de uma solicitação do tipo Event invocação resulta em um null valor sem um manipulador de resposta:

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

Recomendamos que você desabilite o cache do resolvedor para resolvedores do tipo Event invocação, pois eles não seriam enviados para o Lambda se houvesse uma ocorrência de cache.

Objeto da resposta

Assim como em outras fontes de dados, sua função Lambda envia uma resposta AWS AppSync que deve ser convertida em um tipo GraphQL. O resultado da função Lambda está contido na propriedade do context resultado ()context.result.

Se a forma da resposta da função Lambda corresponder à forma do tipo GraphQL, você poderá encaminhar a resposta usando o seguinte manipulador de resposta da função:

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

Não existem campos obrigatórios ou restrições de forma que se aplicam ao objeto de retorno. No entanto, como o GraphQL tem vários tipos, a resposta resolvida deve corresponder ao tipo do GraphQL esperado.

Resposta em lote da função do Lambda

Se o operation campo estiver definido comoBatchInvoke, AWS AppSync espera uma lista de itens de volta da função Lambda. Para AWS AppSync mapear cada resultado de volta ao item da solicitação original, a lista de respostas deve corresponder em tamanho e ordem. É válido ter null itens na lista de respostas; ctx.result é definido como nulo adequadamente.