Referencia de las plantillas de mapeo de solucionador para DynamoDB - AWS AppSync

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Referencia de las plantillas de mapeo de solucionador para DynamoDB

nota

Ahora admitimos de forma básica el tiempo de ejecución APPSYNC_JS y su documentación. Considere la opción de utilizar el tiempo de ejecución APPSYNC_JS y sus guías aquí.

El solucionador de DynamoDB de AWS AppSync permite utilizar GraphQL para almacenar y recuperar datos de tablas de Amazon DynamoDB ya existentes en su cuenta. Para funcionar, este solucionador permite mapear una solicitud de GraphQL entrante a una llamada de DynamoDB y, a continuación, mapear la respuesta de DynamoDB a GraphQL. En esta sección se describen las distintas plantillas de mapeo para las operaciones de DynamoDB admitidas.

GetItem

El documento de mapeo de solicitudes de GetItem le permite indicar al solucionador de DynamoDB de AWS AppSync que realice una solicitud GetItem a DynamoDB, así como especificar lo siguiente:

  • La clave del elemento de DynamoDB.

  • Si se utiliza una lectura consistente o no.

El documento de mapeo de GetItem tiene la siguiente estructura:

{ "version" : "2017-02-28", "operation" : "GetItem", "key" : { "foo" : ... typed value, "bar" : ... typed value }, "consistentRead" : true, "projection" : { ... } }

Los campos se definen de la siguiente manera:

Campos GetItem

version

La versión de la definición de plantilla 2017-02-28 y 2018-05-29 se admiten actualmente. Este valor es obligatorio.

operation

La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB GetItem, este valor se debe establecer en GetItem. Este valor es obligatorio.

key

La clave del elemento de DynamoDB. Los elementos de DynamoDB pueden tener solo una clave hash o una clave hash y una clave de clasificación, dependiendo de la estructura de la tabla. Para obtener más información sobre cómo especificar un “valor con tipo”, consulte Sistema de tipos (mapeo de solicitud). Este valor es obligatorio.

consistentRead

Indica si se realizará o no una lectura lectura altamente coherente con DynamoDB. Este valor es opcional y de forma predeterminada es false.

projection

Proyección que se utiliza para especificar los atributos que se devolverán de la operación de DynamoDB. Para obtener más información acerca de las proyecciones, consulte la sección Proyecciones. Este campo es opcional.

El elemento que se devuelve desde DynamoDB se convierte automáticamente a tipos primitivos de GraphQL y JSON, y se encuentra disponible en el contexto del mapeo ($context.result).

Para obtener más información sobre la conversión de tipos de DynamoDB, consulte la sección Sistema de tipos (mapeo de respuestas).

Para obtener más información acerca de las plantillas de mapeo de respuesta, consulte Información general sobre las plantillas de mapeo de solucionador.

Ejemplo

A continuación se muestra una plantilla de mapeo de una consulta de GraphQL getThing(foo: String!, bar: String!):

{ "version" : "2017-02-28", "operation" : "GetItem", "key" : { "foo" : $util.dynamodb.toDynamoDBJson($ctx.args.foo), "bar" : $util.dynamodb.toDynamoDBJson($ctx.args.bar) }, "consistentRead" : true }

Para obtener más información sobre la API GetItem de DynamoDB, consulte la documentación de la API de DynamoDB.

PutItem

El documento de mapeo de solicitudes de PutItem le permite indicar al solucionador de DynamoDB de AWS AppSync que realice una solicitud PutItem a DynamoDB, así como especificar lo siguiente:

  • La clave del elemento de DynamoDB.

  • El contenido completo del elemento (compuesto de key y attributeValues).

  • Condiciones para que la operación se lleve a cabo correctamente.

El documento de mapeo de PutItem tiene la siguiente estructura:

{ "version" : "2018-05-29", "operation" : "PutItem", "customPartitionKey" : "foo", "populateIndexFields" : boolean value, "key": { "foo" : ... typed value, "bar" : ... typed value }, "attributeValues" : { "baz" : ... typed value }, "condition" : { ... }, "_version" : 1 }

Los campos se definen de la siguiente manera:

Campos PutItem

version

La versión de la definición de plantilla 2017-02-28 y 2018-05-29 se admiten actualmente. Este valor es obligatorio.

operation

La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB PutItem, este valor se debe establecer en PutItem. Este valor es obligatorio.

key

La clave del elemento de DynamoDB. Los elementos de DynamoDB pueden tener solo una clave hash o una clave hash y una clave de clasificación, dependiendo de la estructura de la tabla. Para obtener más información sobre cómo especificar un “valor con tipo”, consulte Sistema de tipos (mapeo de solicitud). Este valor es obligatorio.

attributeValues

El resto de los atributos del elemento que debe colocarse en DynamoDB. Para obtener más información sobre cómo especificar un “valor con tipo”, consulte Sistema de tipos (mapeo de solicitud). Este campo es opcional.

condition

Una condición para determinar si la solicitud debe realizarse correctamente o no, en función del estado del objeto ya incluido en DynamoDB. Si no se especifica ninguna condición, la solicitud PutItem sobrescribe todas las entradas existentes para dicho elemento. Para obtener más información sobre las condiciones, consulte Expresiones de condición. Este valor es opcional.

_version

Valor numérico que representa la última versión conocida de un elemento. Este valor es opcional. Este campo se utiliza para detectar conflictos y solo se admite en orígenes de datos con control de versiones.

customPartitionKey

Cuando se habilita, este valor de cadena modifica el formato de los registros ds_sk y ds_pk que utiliza la tabla Delta Sync una vez habilitado el control de versiones (para obtener más información, consulte el artículo sobre detección de conflictos y sincronización en la Guía para desarrolladores de AWS AppSync). Cuando se habilita, también lo hace el procesamiento de la entrada populateIndexFields. Este campo es opcional.

populateIndexFields

Valor booleano que, cuando se habilita junto con la customPartitionKey, crea nuevas entradas para cada registro de la tabla Delta Sync, específicamente en las columnas gsi_ds_pk y gsi_ds_sk. Para obtener más información, consulte el artículo sobre detección de conflictos y sincronización en la Guía para desarrolladores de AWS AppSync. Este campo es opcional.

El elemento que se escribe en DynamoDB se convierte automáticamente a los tipos primitivos de GraphQL y JSON, y está disponible en el contexto de mapeo ($context.result).

Para obtener más información sobre la conversión de tipos de DynamoDB, consulte la sección Sistema de tipos (mapeo de respuestas).

Para obtener más información acerca de las plantillas de mapeo de respuesta, consulte Información general sobre las plantillas de mapeo de solucionador.

Ejemplo 1

El siguiente ejemplo muestra una plantilla de mapeo de una mutación de GraphQL updateThing(foo: String!, bar: String!, name: String!, version: Int!).

Si no existe ningún elemento con la clave especificada, dicho elemento se crea. Si ya existe un elemento con la clave especificada, dicho elemento se sobrescribe.

{ "version" : "2017-02-28", "operation" : "PutItem", "key": { "foo" : $util.dynamodb.toDynamoDBJson($ctx.args.foo), "bar" : $util.dynamodb.toDynamoDBJson($ctx.args.bar) }, "attributeValues" : { "name" : $util.dynamodb.toDynamoDBJson($ctx.args.name), "version" : $util.dynamodb.toDynamoDBJson($ctx.args.version) } }

Ejemplo 2

El siguiente ejemplo muestra una plantilla de mapeo de una mutación de GraphQL updateThing(foo: String!, bar: String!, name: String!, expectedVersion: Int!).

En este ejemplo se comprueba que el elemento que actualmente se encuentra en DynamoDB tenga en el campo version definido con el valor expectedVersion.

{ "version" : "2017-02-28", "operation" : "PutItem", "key": { "foo" : $util.dynamodb.toDynamoDBJson($ctx.args.foo), "bar" : $util.dynamodb.toDynamoDBJson($ctx.args.bar) }, "attributeValues" : { "name" : $util.dynamodb.toDynamoDBJson($ctx.args.name), #set( $newVersion = $context.arguments.expectedVersion + 1 ) "version" : $util.dynamodb.toDynamoDBJson($newVersion) }, "condition" : { "expression" : "version = :expectedVersion", "expressionValues" : { ":expectedVersion" : $util.dynamodb.toDynamoDBJson($expectedVersion) } } }

Para obtener más información sobre la API PutItem de DynamoDB, consulte la documentación de la API de DynamoDB.

UpdateItem

El documento de mapeo de solicitudes de UpdateItem le permite indicar al solucionador de DynamoDB de AWS AppSync que realice una solicitud UpdateItem a DynamoDB, así como especificar lo siguiente:

  • La clave del elemento de DynamoDB.

  • Una expresión de actualización que describe cómo se actualiza el elemento de DynamoDB.

  • Condiciones para que la operación se lleve a cabo correctamente.

El documento de mapeo de UpdateItem tiene la siguiente estructura:

{ "version" : "2018-05-29", "operation" : "UpdateItem", "customPartitionKey" : "foo", "populateIndexFields" : boolean value, "key": { "foo" : ... typed value, "bar" : ... typed value }, "update" : { "expression" : "someExpression", "expressionNames" : { "#foo" : "foo" }, "expressionValues" : { ":bar" : ... typed value } }, "condition" : { ... }, "_version" : 1 }

Los campos se definen de la siguiente manera:

Campos UpdateItem

version

La versión de la definición de plantilla 2017-02-28 y 2018-05-29 se admiten actualmente. Este valor es obligatorio.

operation

La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB UpdateItem, este valor se debe establecer en UpdateItem. Este valor es obligatorio.

key

La clave del elemento de DynamoDB. Los elementos de DynamoDB pueden tener solo una clave hash o una clave hash y una clave de clasificación, dependiendo de la estructura de la tabla. Para obtener más información sobre cómo especificar un “valor con tipo”, consulte Sistema de tipos (mapeo de solicitud). Este valor es obligatorio.

update

La sección update permite especificar una expresión de actualización que describe cómo se actualiza el elemento en DynamoDB. Para obtener más información sobre el modo de escribir expresiones de actualización, consulte la documentación de DynamoDB UpdateExpressions. Esta sección es obligatoria.

La sección update tiene tres componentes:

expression

La expresión de actualización. Este valor es obligatorio.

expressionNames

Las sustituciones de los marcadores de posición de nombre de atributo de expresión, en forma de pares de clave-valor. La clave corresponde a un marcador de posición de nombre usado en la expression y el valor tiene que ser una cadena que corresponda al nombre de atributo del elemento en DynamoDB. Este campo es opcional y solo debe rellenarse con las sustituciones de marcadores de posición de nombre de atributo de expresión que se usen en la expression.

expressionValues

Las sustituciones de los marcadores de posición de valor de atributo de expresión, en forma de pares de clave-valor. La clave corresponde a un marcador de posición de valor usado en la expression y el valor tiene que ser un valor con tipo. Para obtener más información sobre cómo especificar un “valor con tipo”, consulte Sistema de tipos (mapeo de solicitud). Este valor debe especificarse. Este campo es opcional y solo debe rellenarse con las sustituciones de los marcadores de posición de valor de atributo de expresión que se usen en la expression.

condition

Una condición para determinar si la solicitud debe realizarse correctamente o no, en función del estado del objeto ya incluido en DynamoDB. Si no se especifica ninguna condición, la solicitud UpdateItem actualiza todas las entradas existentes independientemente de su estado actual. Para obtener más información sobre las condiciones, consulte Expresiones de condición. Este valor es opcional.

_version

Valor numérico que representa la última versión conocida de un elemento. Este valor es opcional. Este campo se utiliza para detectar conflictos y solo se admite en orígenes de datos con control de versiones.

customPartitionKey

Cuando se habilita, este valor de cadena modifica el formato de los registros ds_sk y ds_pk que utiliza la tabla Delta Sync una vez habilitado el control de versiones (para obtener más información, consulte el artículo sobre detección de conflictos y sincronización en la Guía para desarrolladores de AWS AppSync). Cuando se habilita, también lo hace el procesamiento de la entrada populateIndexFields. Este campo es opcional.

populateIndexFields

Valor booleano que, cuando se habilita junto con la customPartitionKey, crea nuevas entradas para cada registro de la tabla Delta Sync, específicamente en las columnas gsi_ds_pk y gsi_ds_sk. Para obtener más información, consulte el artículo sobre detección de conflictos y sincronización en la Guía para desarrolladores de AWS AppSync. Este campo es opcional.

El elemento que se actualiza en DynamoDB se convierte automáticamente a los tipos primitivos de GraphQL y JSON, y está disponible en el contexto de mapeo ($context.result).

Para obtener más información sobre la conversión de tipos de DynamoDB, consulte la sección Sistema de tipos (mapeo de respuestas).

Para obtener más información acerca de las plantillas de mapeo de respuesta, consulte Información general sobre las plantillas de mapeo de solucionador.

Ejemplo 1

El siguiente ejemplo muestra una plantilla de mapeo de la mutación de GraphQL upvote(id: ID!).

En este ejemplo, se han incrementado en 1 los campos upvotes y version de un elemento de DynamoDB.

{ "version" : "2017-02-28", "operation" : "UpdateItem", "key" : { "id" : $util.dynamodb.toDynamoDBJson($ctx.args.id) }, "update" : { "expression" : "ADD #votefield :plusOne, version :plusOne", "expressionNames" : { "#votefield" : "upvotes" }, "expressionValues" : { ":plusOne" : { "N" : 1 } } } }

Ejemplo 2

El siguiente ejemplo muestra una plantilla de mapeo de una mutación de GraphQL updateItem(id: ID!, title: String, author: String, expectedVersion: Int!).

Se trata de un ejemplo complejo que inspecciona los argumentos y genera de manera dinámica la expresión de actualización que solo incluye los argumentos que ha proporcionado el cliente. Por ejemplo, si se omiten title y author, no se actualizan. Si se especifica un argumento pero su valor es null, ese campo se elimina del objeto en DynamoDB. Por último, la operación tiene una condición que comprueba si el elemento que está actualmente en DynamoDB tiene el campo version establecido en expectedVersion:

{ "version" : "2017-02-28", "operation" : "UpdateItem", "key" : { "id" : $util.dynamodb.toDynamoDBJson($ctx.args.id) }, ## Set up some space to keep track of things we're updating ** #set( $expNames = {} ) #set( $expValues = {} ) #set( $expSet = {} ) #set( $expAdd = {} ) #set( $expRemove = [] ) ## Increment "version" by 1 ** $!{expAdd.put("version", ":newVersion")} $!{expValues.put(":newVersion", { "N" : 1 })} ## Iterate through each argument, skipping "id" and "expectedVersion" ** #foreach( $entry in $context.arguments.entrySet() ) #if( $entry.key != "id" && $entry.key != "expectedVersion" ) #if( (!$entry.value) && ("$!{entry.value}" == "") ) ## If the argument is set to "null", then remove that attribute from the item in DynamoDB ** #set( $discard = ${expRemove.add("#${entry.key}")} ) $!{expNames.put("#${entry.key}", "$entry.key")} #else ## Otherwise set (or update) the attribute on the item in DynamoDB ** $!{expSet.put("#${entry.key}", ":${entry.key}")} $!{expNames.put("#${entry.key}", "$entry.key")} #if( $entry.key == "ups" || $entry.key == "downs" ) $!{expValues.put(":${entry.key}", { "N" : $entry.value })} #else $!{expValues.put(":${entry.key}", { "S" : "${entry.value}" })} #end #end #end #end ## Start building the update expression, starting with attributes we're going to SET ** #set( $expression = "" ) #if( !${expSet.isEmpty()} ) #set( $expression = "SET" ) #foreach( $entry in $expSet.entrySet() ) #set( $expression = "${expression} ${entry.key} = ${entry.value}" ) #if ( $foreach.hasNext ) #set( $expression = "${expression}," ) #end #end #end ## Continue building the update expression, adding attributes we're going to ADD ** #if( !${expAdd.isEmpty()} ) #set( $expression = "${expression} ADD" ) #foreach( $entry in $expAdd.entrySet() ) #set( $expression = "${expression} ${entry.key} ${entry.value}" ) #if ( $foreach.hasNext ) #set( $expression = "${expression}," ) #end #end #end ## Continue building the update expression, adding attributes we're going to REMOVE ** #if( !${expRemove.isEmpty()} ) #set( $expression = "${expression} REMOVE" ) #foreach( $entry in $expRemove ) #set( $expression = "${expression} ${entry}" ) #if ( $foreach.hasNext ) #set( $expression = "${expression}," ) #end #end #end ## Finally, write the update expression into the document, along with any expressionNames and expressionValues ** "update" : { "expression" : "${expression}" #if( !${expNames.isEmpty()} ) ,"expressionNames" : $utils.toJson($expNames) #end #if( !${expValues.isEmpty()} ) ,"expressionValues" : $utils.toJson($expValues) #end }, "condition" : { "expression" : "version = :expectedVersion", "expressionValues" : { ":expectedVersion" : $util.dynamodb.toDynamoDBJson($ctx.args.expectedVersion) } } }

Para obtener más información sobre la API UpdateItem de DynamoDB, consulte la documentación de la API de DynamoDB.

DeleteItem

El documento de mapeo de solicitudes de DeleteItem le permite indicar al solucionador de DynamoDB de AWS AppSync que realice una solicitud DeleteItem a DynamoDB, así como especificar lo siguiente:

  • La clave del elemento de DynamoDB.

  • Condiciones para que la operación se lleve a cabo correctamente.

El documento de mapeo de DeleteItem tiene la siguiente estructura:

{ "version" : "2018-05-29", "operation" : "DeleteItem", "customPartitionKey" : "foo", "populateIndexFields" : boolean value, "key": { "foo" : ... typed value, "bar" : ... typed value }, "condition" : { ... }, "_version" : 1 }

Los campos se definen de la siguiente manera:

Campos DeleteItem

version

La versión de la definición de plantilla 2017-02-28 y 2018-05-29 se admiten actualmente. Este valor es obligatorio.

operation

La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB DeleteItem, este valor se debe establecer en DeleteItem. Este valor es obligatorio.

key

La clave del elemento de DynamoDB. Los elementos de DynamoDB pueden tener solo una clave hash o una clave hash y una clave de clasificación, dependiendo de la estructura de la tabla. Para obtener más información sobre cómo especificar un “valor con tipo”, consulte Sistema de tipos (mapeo de solicitud). Este valor es obligatorio.

condition

Una condición para determinar si la solicitud debe realizarse correctamente o no, en función del estado del objeto ya incluido en DynamoDB. Si no se especifica ninguna condición, la solicitud DeleteItem elimina un elemento independientemente de su estado actual. Para obtener más información sobre las condiciones, consulte Expresiones de condición. Este valor es opcional.

_version

Valor numérico que representa la última versión conocida de un elemento. Este valor es opcional. Este campo se utiliza para detectar conflictos y solo se admite en orígenes de datos con control de versiones.

customPartitionKey

Cuando se habilita, este valor de cadena modifica el formato de los registros ds_sk y ds_pk que utiliza la tabla Delta Sync una vez habilitado el control de versiones (para obtener más información, consulte el artículo sobre detección de conflictos y sincronización en la Guía para desarrolladores de AWS AppSync). Cuando se habilita, también lo hace el procesamiento de la entrada populateIndexFields. Este campo es opcional.

populateIndexFields

Valor booleano que, cuando se habilita junto con la customPartitionKey, crea nuevas entradas para cada registro de la tabla Delta Sync, específicamente en las columnas gsi_ds_pk y gsi_ds_sk. Para obtener más información, consulte el artículo sobre detección de conflictos y sincronización en la Guía para desarrolladores de AWS AppSync. Este campo es opcional.

El elemento que se elimina de DynamoDB se convierte automáticamente a los tipos primitivos de GraphQL y JSON, y está disponible en el contexto de mapeo ($context.result).

Para obtener más información sobre la conversión de tipos de DynamoDB, consulte la sección Sistema de tipos (mapeo de respuestas).

Para obtener más información acerca de las plantillas de mapeo de respuesta, consulte Información general sobre las plantillas de mapeo de solucionador.

Ejemplo 1

El siguiente ejemplo muestra una plantilla de mapeo de una mutación de GraphQL deleteItem(id: ID!). Si ya existe un elemento con este ID, se eliminará.

{ "version" : "2017-02-28", "operation" : "DeleteItem", "key" : { "id" : $util.dynamodb.toDynamoDBJson($ctx.args.id) } }

Ejemplo 2

El siguiente ejemplo muestra una plantilla de mapeo de una mutación de GraphQL deleteItem(id: ID!, expectedVersion: Int!). Si ya existe un elemento con este ID, se eliminará, pero solo si su campo version está establecido en expectedVersion:

{ "version" : "2017-02-28", "operation" : "DeleteItem", "key" : { "id" : $util.dynamodb.toDynamoDBJson($ctx.args.id) }, "condition" : { "expression" : "attribute_not_exists(id) OR version = :expectedVersion", "expressionValues" : { ":expectedVersion" : $util.dynamodb.toDynamoDBJson($expectedVersion) } } }

Para obtener más información sobre la API DeleteItem de DynamoDB, consulte la documentación de la API de DynamoDB.

Consulta

El documento de mapeo de solicitudes de Query le permite indicar al solucionador de DynamoDB de AWS AppSync que realice una solicitud Query a DynamoDB, así como especificar lo siguiente:

  • Expresión de clave.

  • Qué índice utilizar.

  • Todos los filtros adicionales.

  • Cuántos elementos deben devolverse.

  • Si se utilizarán lecturas coherentes.

  • Dirección de consulta (hacia delante o hacia atrás).

  • Token de paginación

El documento de mapeo de Query tiene la siguiente estructura:

{ "version" : "2017-02-28", "operation" : "Query", "query" : { "expression" : "some expression", "expressionNames" : { "#foo" : "foo" }, "expressionValues" : { ":bar" : ... typed value } }, "index" : "fooIndex", "nextToken" : "a pagination token", "limit" : 10, "scanIndexForward" : true, "consistentRead" : false, "select" : "ALL_ATTRIBUTES" | "ALL_PROJECTED_ATTRIBUTES" | "SPECIFIC_ATTRIBUTES", "filter" : { ... }, "projection" : { ... } }

Los campos se definen de la siguiente manera:

Campos de consulta

version

La versión de la definición de plantilla 2017-02-28 y 2018-05-29 se admiten actualmente. Este valor es obligatorio.

operation

La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB Query, este valor se debe establecer en Query. Este valor es obligatorio.

query

La sección query permite especificar una expresión de condición de clave que describe qué elementos deben recuperarse de DynamoDB. Para obtener más información sobre cómo escribir expresiones de condición de clave, consulte DynamoDB KeyConditions documentation. Esta sección debe especificarse.

expression

La expresión de la consulta. Este campo debe especificarse.

expressionNames

Las sustituciones de los marcadores de posición de nombre de atributo de expresión, en forma de pares de clave-valor. La clave corresponde a un marcador de posición de nombre usado en la expression y el valor tiene que ser una cadena que corresponda al nombre de atributo del elemento en DynamoDB. Este campo es opcional y solo debe rellenarse con las sustituciones de marcadores de posición de nombre de atributo de expresión que se usen en la expression.

expressionValues

Las sustituciones de los marcadores de posición de valor de atributo de expresión, en forma de pares de clave-valor. La clave corresponde a un marcador de posición de valor usado en la expression y el valor tiene que ser un valor con tipo. Para obtener más información sobre cómo especificar un “valor con tipo”, consulte Sistema de tipos (mapeo de solicitud). Este valor es obligatorio. Este campo es opcional y solo debe rellenarse con las sustituciones de los marcadores de posición de valor de atributo de expresión que se usen en la expression.

filter

Un filtro adicional que se puede utilizar para filtrar los resultados de DynamoDB antes de que se devuelvan. Para obtener más información acerca de los filtros, consulte Filtros. Este campo es opcional.

index

El nombre del índice que se consultará. La operación de consulta de DynamoDB permite escanear en índices secundarios locales y globales, además de hacerlo en el índice de clave principal de una clave hash. Si se especifica, indica a DynamoDB que debe consultar el índice especificado. Si se omite, se consultará el índice de clave principal.

nextToken

El token de paginación para continuar una consulta anterior. Se debe obtener de una consulta anterior. Este campo es opcional.

limit

Número máximo de elementos que se van a evaluar, que no es necesariamente el número de elementos coincidentes. Este campo es opcional.

scanIndexForward

Valor booleano que indica si se debe consultar hacia delante o hacia atrás. Este campo es opcional y de forma predeterminada es true.

consistentRead

Valor booleano que indica si se utilizarán lecturas coherentes al consultar DynamoDB. Este campo es opcional y de forma predeterminada es false.

select

De forma predeterminada, el solucionador de DynamoDB de AWS AppSync solo devuelve los atributos que se proyectan en el índice. Si se necesitan más atributos, puede configurar este campo. Este campo es opcional. Los valores admitidos son:

ALL_ATTRIBUTES

Devuelve todos los atributos de elementos de la tabla o el índice especificados. Si consulta un índice secundario local, DynamoDB recupera todo el elemento de la tabla principal para cada elemento coincidente en el índice. Si el índice está configurado para proyectar todos los atributos de los elementos, todos los datos se pueden obtener del índice secundario local y no es necesario efectuar una recuperación.

ALL_PROJECTED_ATTRIBUTES

Permitido solo al consultar un índice. Recupera todos los atributos que se han proyectado en el índice. Si el índice está configurado para proyectar todos los atributos, este valor de retorno equivale a especificar ALL_ATTRIBUTES.

SPECIFIC_ATTRIBUTES

Devuelve solo los atributos que aparecen en la expression de la projection. Este valor devuelto equivale a especificar la expression de la projection sin especificar ningún valor para Select.

projection

Proyección que se utiliza para especificar los atributos que se devolverán de la operación de DynamoDB. Para obtener más información acerca de las proyecciones, consulte la sección Proyecciones. Este campo es opcional.

Los resultados de DynamoDB se convierten automáticamente a los tipos primitivos de GraphQL y JSON, y están disponibles en el contexto de mapeo ($context.result).

Para obtener más información sobre la conversión de tipos de DynamoDB, consulte la sección Sistema de tipos (mapeo de respuestas).

Para obtener más información acerca de las plantillas de mapeo de respuesta, consulte Información general sobre las plantillas de mapeo de solucionador.

Los resultados tienen la estructura siguiente:

{ items = [ ... ], nextToken = "a pagination token", scannedCount = 10 }

Los campos se definen de la siguiente manera:

items

Una lista que contiene los elementos que devuelve la consulta de DynamoDB.

nextToken

Si hubiera más resultados, nextToken contiene un token de paginación que puede usar en otra solicitud. Observe que AWS AppSync cifra y oculta el token de paginación devuelto de DynamoDB. Esto evita que los datos de las tablas se filtren accidentalmente al intermediario. Además, tenga en cuenta que estos tokens de paginación no se pueden utilizar en diferentes solucionadores.

scannedCount

El número de elementos que coincidían con la expresión de condición de consulta antes de aplicar una expresión de filtro (si la hay).

Ejemplo

El siguiente ejemplo muestra una plantilla de mapeo de una consulta de GraphQL getPosts(owner: ID!).

En este ejemplo, se consulta un índice secundario global en una tabla para que devuelva todas las publicaciones que pertenecen al ID especificado.

{ "version" : "2017-02-28", "operation" : "Query", "query" : { "expression" : "ownerId = :ownerId", "expressionValues" : { ":ownerId" : $util.dynamodb.toDynamoDBJson($context.arguments.owner) } }, "index" : "owner-index" }

Para obtener más información sobre la API Query de DynamoDB, consulte la documentación de la API de DynamoDB.

Examen

El documento de mapeo de solicitudes de Scan le permite indicar al solucionador de DynamoDB de AWS AppSync que realice una solicitud Scan a DynamoDB, así como especificar lo siguiente:

  • Un filtro para excluir resultados

  • Qué índice utilizar.

  • Cuántos elementos deben devolverse.

  • Si se utilizarán lecturas coherentes.

  • Token de paginación

  • Exámenes en paralelo

El documento de mapeo de Scan tiene la siguiente estructura:

{ "version" : "2017-02-28", "operation" : "Scan", "index" : "fooIndex", "limit" : 10, "consistentRead" : false, "nextToken" : "aPaginationToken", "totalSegments" : 10, "segment" : 1, "filter" : { ... }, "projection" : { ... } }

Los campos se definen de la siguiente manera:

Campos de Scan

version

La versión de la definición de plantilla 2017-02-28 y 2018-05-29 se admiten actualmente. Este valor es obligatorio.

operation

La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB Scan, este valor se debe establecer en Scan. Este valor es obligatorio.

filter

Un filtro que se puede utilizar para filtrar los resultados de DynamoDB antes de que se devuelvan. Para obtener más información acerca de los filtros, consulte Filtros. Este campo es opcional.

index

El nombre del índice que se consultará. La operación de consulta de DynamoDB permite escanear en índices secundarios locales y globales, además de hacerlo en el índice de clave principal de una clave hash. Si se especifica, indica a DynamoDB que debe consultar el índice especificado. Si se omite, se consultará el índice de clave principal.

limit

El número máximo de elementos que se evalúan en una sola vez. Este campo es opcional.

consistentRead

Valor booleano que indica si se utilizarán lecturas coherentes al consultar DynamoDB. Este campo es opcional y de forma predeterminada es false.

nextToken

El token de paginación para continuar una consulta anterior. Se debe obtener de una consulta anterior. Este campo es opcional.

select

De forma predeterminada, el solucionador de DynamoDB de AWS AppSync solo devuelve los atributos que se proyecten en el índice. Si se necesitan más atributos, este campo se puede configurar. Este campo es opcional. Los valores admitidos son:

ALL_ATTRIBUTES

Devuelve todos los atributos de elementos de la tabla o el índice especificados. Si consulta un índice secundario local, DynamoDB recupera todo el elemento de la tabla principal para cada elemento coincidente en el índice. Si el índice está configurado para proyectar todos los atributos de los elementos, todos los datos se pueden obtener del índice secundario local y no es necesario efectuar una recuperación.

ALL_PROJECTED_ATTRIBUTES

Permitido solo al consultar un índice. Recupera todos los atributos que se han proyectado en el índice. Si el índice está configurado para proyectar todos los atributos, este valor de retorno equivale a especificar ALL_ATTRIBUTES.

SPECIFIC_ATTRIBUTES

Devuelve solo los atributos que aparecen en la expression de la projection. Este valor devuelto equivale a especificar la expression de la projection sin especificar ningún valor para Select.

totalSegments

El número de segmentos para dividir en particiones la tabla al realizar un examen paralelo. Este campo es opcional, pero debe especificarse si se indica segment.

segment

El segmento de tabla de esta operación al realizar un examen en paralelo. Este campo es opcional, pero debe especificarse si se indica totalSegments.

projection

Proyección que se utiliza para especificar los atributos que se devolverán de la operación de DynamoDB. Para obtener más información acerca de las proyecciones, consulte la sección Proyecciones. Este campo es opcional.

Los resultados que devuelve el análisis de DynamoDB se convierten automáticamente a los tipos primitivos de GraphQL y JSON, y están disponibles en el contexto de mapeo ($context.result).

Para obtener más información sobre la conversión de tipos de DynamoDB, consulte la sección Sistema de tipos (mapeo de respuestas).

Para obtener más información acerca de las plantillas de mapeo de respuesta, consulte Información general sobre las plantillas de mapeo de solucionador.

Los resultados tienen la estructura siguiente:

{ items = [ ... ], nextToken = "a pagination token", scannedCount = 10 }

Los campos se definen de la siguiente manera:

items

Una lista que contiene los elementos que devuelve el análisis de DynamoDB.

nextToken

Si hubiera más resultados, nextToken contiene un token de paginación que puede usar en otra solicitud. AWS AppSync cifra y oculta el token de paginación devuelto de DynamoDB. Esto evita que los datos de las tablas se filtren accidentalmente al intermediario. Además, estos tokens de paginación no se pueden utilizar en diferentes solucionadores.

scannedCount

El número de elementos que DynamoDB ha recuperado antes de aplicar una expresión de filtro (en caso de incluirse).

Ejemplo 1

El siguiente ejemplo muestra una plantilla de mapeo de una consulta de GraphQL: allPosts.

En este ejemplo, se devuelven todas las entradas de la tabla.

{ "version" : "2017-02-28", "operation" : "Scan" }

Ejemplo 2

El siguiente ejemplo muestra una plantilla de mapeo de una consulta de GraphQL: postsMatching(title: String!).

En este ejemplo, todas las entradas de la tabla se devuelven donde el título comienza con el argumento title.

{ "version" : "2017-02-28", "operation" : "Scan", "filter" : { "expression" : "begins_with(title, :title)", "expressionValues" : { ":title" : $util.dynamodb.toDynamoDBJson($context.arguments.title) }, } }

Para obtener más información sobre la API Scan de DynamoDB, consulte la documentación de la API de DynamoDB.

Sync (Sincronizar)

El documento de mapeo de solicitudes de Sync permite recuperar todos los resultados de una tabla de DynamoDB y, a continuación, recibir tan solo los datos alterados desde la última consulta (las actualizaciones delta). Únicamente se pueden realizar solicitudes Sync a orígenes de datos con control de versiones de DynamoDB. Puede especificar lo siguiente:

  • Un filtro para excluir resultados

  • Cuántos elementos deben devolverse.

  • Token de paginación

  • Cuando se inició la última operación Sync

El documento de mapeo de Sync tiene la siguiente estructura:

{ "version" : "2018-05-29", "operation" : "Sync", "basePartitionKey": "Base Tables PartitionKey", "deltaIndexName": "delta-index-name", "limit" : 10, "nextToken" : "aPaginationToken", "lastSync" : 1550000000000, "filter" : { ... } }

Los campos se definen de la siguiente manera:

Campos de Sync

version

La versión de la definición de plantilla. Solo se admite 2018-05-29 actualmente. Este valor es obligatorio.

operation

La operación de DynamoDB que se ha de realizar. Para ejecutar la operación Sync de , en este valor debe establecerse Sync. Este valor es obligatorio.

filter

Un filtro que se puede utilizar para filtrar los resultados de DynamoDB antes de que se devuelvan. Para obtener más información acerca de los filtros, consulte Filtros. Este campo es opcional.

limit

El número máximo de elementos que se evalúan en una sola vez. Este campo es opcional. Si se omite, el límite predeterminado se establecerá en 100 elementos. El valor máximo de este campo son 1000 elementos.

nextToken

El token de paginación para continuar una consulta anterior. Se debe obtener de una consulta anterior. Este campo es opcional.

lastSync

El momento, en milisegundos transcurridos desde la fecha de inicio, en el que comenzó la última operación Sync que se ha realizado correctamente. Si se especifica, solo se devuelven los elementos que han cambiado después de lastSync. Este campo es opcional y solo debe rellenarse después de haber recuperado todas las páginas de una operación Sync inicial. Si se omite, se devolverán los resultados de la tabla Base; de lo contrario, se devolverán los resultados de la tabla Delta.

basePartitionKey

Clave de partición de la tabla Base utilizada al realizar una operación Sync. Este campo permite realizar una operación Sync cuando la tabla utiliza una clave de partición personalizada. Se trata de un campo opcional.

deltaIndexName

Índice utilizado para la operación Sync. Este índice es necesario para habilitar una operación Sync en toda la tabla de almacenamiento Delta cuando la tabla utiliza una clave de partición personalizada. La operación Sync se realizará en el GSI (creado en gsi_ds_pk y gsi_ds_sk). Este campo es opcional.

Los resultados que devuelve la sincronización de DynamoDB se convierten automáticamente a los tipos primitivos de GraphQL y JSON, y están disponibles en el contexto de mapeo ($context.result).

Para obtener más información sobre la conversión de tipos de DynamoDB, consulte la sección Sistema de tipos (mapeo de respuestas).

Para obtener más información acerca de las plantillas de mapeo de respuesta, consulte Información general sobre las plantillas de mapeo de solucionador.

Los resultados tienen la estructura siguiente:

{ items = [ ... ], nextToken = "a pagination token", scannedCount = 10, startedAt = 1550000000000 }

Los campos se definen de la siguiente manera:

items

Una lista que contiene los elementos que devuelve la sincronización.

nextToken

Si hubiera más resultados, nextToken contiene un token de paginación que puede usar en otra solicitud. AWS AppSync cifra y oculta el token de paginación devuelto de DynamoDB. Esto evita que los datos de las tablas se filtren accidentalmente al intermediario. Además, estos tokens de paginación no se pueden utilizar en diferentes solucionadores.

scannedCount

El número de elementos que DynamoDB ha recuperado antes de aplicar una expresión de filtro (en caso de incluirse).

startedAt

El momento, en milisegundos transcurridos desde la fecha de inicio, en el que comenzó la operación de sincronización que puede almacenar localmente y usar en otra solicitud como argumento de lastSync. Si se incluyó un token de paginación en la solicitud, este valor será el mismo que el devuelto por la solicitud para la primera página de resultados.

Ejemplo 1

El siguiente ejemplo muestra una plantilla de mapeo de una consulta de GraphQL: syncPosts(nextToken: String, lastSync: AWSTimestamp).

En este ejemplo, si se omite lastSync, se devuelven todas las entradas de la tabla base. Si se proporciona lastSync, solo se devuelven las entradas de la tabla Delta Sync que han cambiado desde lastSync.

{ "version" : "2018-05-29", "operation" : "Sync", "limit": 100, "nextToken": $util.toJson($util.defaultIfNull($ctx.args.nextToken, null)), "lastSync": $util.toJson($util.defaultIfNull($ctx.args.lastSync, null)) }

BatchGetItem

El documento de mapeo de solicitudes de BatchGetItem permite indicar al solucionador de DynamoDB de AWS AppSync que realice una solicitud BatchGetItem a DynamoDB para recuperar varios elementos, posiblemente de varias tablas. Para esta plantilla de solicitud, debe especificar lo siguiente:

  • Los nombres de tabla de los que recuperar los elementos

  • Las claves de los elementos que recuperar de cada tabla

Se aplican los límites de BatchGetItem de DynamoDB y no puede proporcionar ninguna expresión de condición.

El documento de mapeo de BatchGetItem tiene la siguiente estructura:

{ "version" : "2018-05-29", "operation" : "BatchGetItem", "tables" : { "table1": { "keys": [ ## Item to retrieve Key { "foo" : ... typed value, "bar" : ... typed value }, ## Item2 to retrieve Key { "foo" : ... typed value, "bar" : ... typed value } ], "consistentRead": true|false, "projection" : { ... } }, "table2": { "keys": [ ## Item3 to retrieve Key { "foo" : ... typed value, "bar" : ... typed value }, ## Item4 to retrieve Key { "foo" : ... typed value, "bar" : ... typed value } ], "consistentRead": true|false, "projection" : { ... } } } }

Los campos se definen de la siguiente manera:

Campos BatchGetItem

version

La versión de la definición de plantilla. Solo se admite 2018-05-29. Este valor es obligatorio.

operation

La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB BatchGetItem, este valor se debe establecer en BatchGetItem. Este valor es obligatorio.

tables

Las tablas de DynamoDB de las que recuperar los elementos. El valor es un mapa en el que se especifican los nombres de las tablas como claves del mapa. Al menos debe proporcionarse una tabla. Este valor tables es obligatorio.

keys

Lista de claves de DynamoDB que representan la clave principal de los elementos que se van a recuperar. Los elementos de DynamoDB pueden tener solo una clave hash o una clave hash y una clave de clasificación, dependiendo de la estructura de la tabla. Para obtener más información sobre cómo especificar un “valor con tipo”, consulte Sistema de tipos (mapeo de solicitud).

consistentRead

Si se utiliza una lectura consistente a la hora de ejecutar una operación GetItem. Este valor es opcional y de forma predeterminada es falso.

projection

Proyección que se utiliza para especificar los atributos que se devolverán de la operación de DynamoDB. Para obtener más información acerca de las proyecciones, consulte la sección Proyecciones. Este campo es opcional.

Cosas que tener en cuenta:

  • Si un elemento no se ha recuperado de la tabla, aparece un elemento nulo en el bloque de datos para esa tabla.

  • Los resultados de invocación se ordenan por tabla, según el orden en el que se hayan proporcionado dentro de la plantilla de mapeo de solicitud.

  • Cada comando Get dentro de un BatchGetItem es atómico; sin embargo, un lote se puede procesar parcialmente. Si un lote se procesa parcialmente debido a un error, la claves sin procesar se devuelven como parte del resultado de invocación dentro del bloque unprocessedKeys.

  • BatchGetItem está limitado a 100 claves.

Para la siguiente plantilla de mapeo de solicitud de ejemplo:

{ "version": "2018-05-29", "operation": "BatchGetItem", "tables": { "authors": [ { "author_id": { "S": "a1" } }, ], "posts": [ { "author_id": { "S": "a1" }, "post_id": { "S": "p2" } } ], } }

El resultado de invocación disponible en $ctx.result es el siguiente:

{ "data": { "authors": [null], "posts": [ # Was retrieved { "author_id": "a1", "post_id": "p2", "post_title": "title", "post_description": "description", } ] }, "unprocessedKeys": { "authors": [ # This item was not processed due to an error { "author_id": "a1" } ], "posts": [] } }

El $ctx.error contiene detalles acerca del error. Está garantizado que los datos de claves, unprocessedKeys y cada clave de tabla que se le proporcionó en la plantilla de mapeo de solicitud estarán presentes en el resultado de invocación. Los elementos que se han eliminado aparecen en el bloque de datos. Los elementos que no se hayan procesado se marcan como null dentro del bloque de datos y se colocan dentro del bloque unprocessedKeys.

Para obtener un ejemplo más completo, siga el tutorial de lotes de DynamoDB con AppSync aquí Tutorial: Solucionadores por lotes de DynamoDB.

BatchDeleteItem

El documento de mapeo de solicitudes de BatchDeleteItem permite indicar al solucionador de DynamoDB de AWS AppSync que realice una solicitud BatchWriteItem a DynamoDB para eliminar varios elementos, posiblemente en varias tablas. Para esta plantilla de solicitud, debe especificar lo siguiente:

  • Los nombres de tabla de los que eliminar los elementos

  • Las claves de los elementos que eliminar de cada tabla

Se aplican los límites de BatchWriteItem de DynamoDB y no puede proporcionar ninguna expresión de condición.

El documento de mapeo de BatchDeleteItem tiene la siguiente estructura:

{ "version" : "2018-05-29", "operation" : "BatchDeleteItem", "tables" : { "table1": [ ## Item to delete Key { "foo" : ... typed value, "bar" : ... typed value }, ## Item2 to delete Key { "foo" : ... typed value, "bar" : ... typed value }], "table2": [ ## Item3 to delete Key { "foo" : ... typed value, "bar" : ... typed value }, ## Item4 to delete Key { "foo" : ... typed value, "bar" : ... typed value }], } }

Los campos se definen de la siguiente manera:

Campos BatchDeleteItem

version

La versión de la definición de plantilla. Solo se admite 2018-05-29. Este valor es obligatorio.

operation

La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB BatchDeleteItem, este valor se debe establecer en BatchDeleteItem. Este valor es obligatorio.

tables

Las tablas de DynamoDB de las que eliminar los elementos. Cada tabla es una lista de claves de DynamoDB que representan la clave principal de los elementos que se van a eliminar. Los elementos de DynamoDB pueden tener solo una clave hash o una clave hash y una clave de clasificación, dependiendo de la estructura de la tabla. Para obtener más información sobre cómo especificar un “valor con tipo”, consulte Sistema de tipos (mapeo de solicitud). Al menos debe proporcionarse una tabla. El valor tables es obligatorio.

Cosas que tener en cuenta:

  • Al contrario que en la operación DeleteItem, el elemento completamente eliminado no se devuelve en la respuesta. Solo se devuelve la clave pasada.

  • Si un elemento no se ha eliminado de la tabla, aparece un elemento nulo en el bloque de datos para esa tabla.

  • Los resultados de invocación se ordenan por tabla, según el orden en el que se hayan proporcionado dentro de la plantilla de mapeo de solicitud.

  • Cada comando Delete dentro de un BatchDeleteItem es atómico. Sin embargo, un lote puede procesarse parcialmente. Si un lote se procesa parcialmente debido a un error, la claves sin procesar se devuelven como parte del resultado de invocación dentro del bloque unprocessedKeys.

  • BatchDeleteItem está limitado a 25 claves.

Para la siguiente plantilla de mapeo de solicitud de ejemplo:

{ "version": "2018-05-29", "operation": "BatchDeleteItem", "tables": { "authors": [ { "author_id": { "S": "a1" } }, ], "posts": [ { "author_id": { "S": "a1" }, "post_id": { "S": "p2" } } ], } }

El resultado de invocación disponible en $ctx.result es el siguiente:

{ "data": { "authors": [null], "posts": [ # Was deleted { "author_id": "a1", "post_id": "p2" } ] }, "unprocessedKeys": { "authors": [ # This key was not processed due to an error { "author_id": "a1" } ], "posts": [] } }

El $ctx.error contiene detalles acerca del error. Está garantizado que los datos de claves, unprocessedKeys y cada clave de tabla que se le proporcionó en la plantilla de mapeo de solicitud estarán presentes en el resultado de invocación. Los elementos que se han eliminado están presentes en el bloque de datos. Los elementos que no se hayan procesado se marcan como null dentro del bloque de datos y se colocan dentro del bloque unprocessedKeys.

Para obtener un ejemplo más completo, siga el tutorial de lotes de DynamoDB con AppSync aquí Tutorial: Solucionadores por lotes de DynamoDB.

BatchPutItem

El documento de mapeo de solicitudes de BatchPutItem permite indicar al solucionador de DynamoDB de AWS AppSync que realice una solicitud BatchWriteItem a DynamoDB para colocar varios elementos, posiblemente en varias tablas. Para esta plantilla de solicitud, debe especificar lo siguiente:

  • Los nombres de tabla en los que poner los elementos

  • Los elementos completos que poner en cada tabla

Se aplican los límites de BatchWriteItem de DynamoDB y no puede proporcionar ninguna expresión de condición.

El documento de mapeo de BatchPutItem tiene la siguiente estructura:

{ "version" : "2018-05-29", "operation" : "BatchPutItem", "tables" : { "table1": [ ## Item to put { "foo" : ... typed value, "bar" : ... typed value }, ## Item2 to put { "foo" : ... typed value, "bar" : ... typed value }], "table2": [ ## Item3 to put { "foo" : ... typed value, "bar" : ... typed value }, ## Item4 to put { "foo" : ... typed value, "bar" : ... typed value }], } }

Los campos se definen de la siguiente manera:

Campos BatchPutItem

version

La versión de la definición de plantilla. Solo se admite 2018-05-29. Este valor es obligatorio.

operation

La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB BatchPutItem, este valor se debe establecer en BatchPutItem. Este valor es obligatorio.

tables

Las tablas de DynamoDB en las que poner los elementos. Cada entrada de la tabla representa una lista de elementos de DynamoDB que insertar para esta tabla específica. Al menos debe proporcionarse una tabla. Este valor es obligatorio.

Cosas que tener en cuenta:

  • Los elementos totalmente insertados se devuelven en la respuesta, si la operación se realiza correctamente.

  • Si un elemento no se ha insertado en la tabla, aparece un elemento nulo en el bloque de datos para esa tabla.

  • Los elementos insertados se ordenan por tabla, según el orden en el que se hayan proporcionado dentro de la plantilla de mapeo de solicitudes.

  • Cada comando Put dentro de un BatchPutItem es atómico; sin embargo, un lote se puede procesar parcialmente. Si un lote se procesa parcialmente debido a un error, la claves sin procesar se devuelven como parte del resultado de invocación dentro del bloque unprocessedKeys.

  • BatchPutItem está limitado a 25 elementos.

Para la siguiente plantilla de mapeo de solicitud de ejemplo:

{ "version": "2018-05-29", "operation": "BatchPutItem", "tables": { "authors": [ { "author_id": { "S": "a1" }, "author_name": { "S": "a1_name" } }, ], "posts": [ { "author_id": { "S": "a1" }, "post_id": { "S": "p2" }, "post_title": { "S": "title" } } ], } }

El resultado de invocación disponible en $ctx.result es el siguiente:

{ "data": { "authors": [ null ], "posts": [ # Was inserted { "author_id": "a1", "post_id": "p2", "post_title": "title" } ] }, "unprocessedItems": { "authors": [ # This item was not processed due to an error { "author_id": "a1", "author_name": "a1_name" } ], "posts": [] } }

El $ctx.error contiene detalles acerca del error. Está garantizado que los datos de claves, unprocessedItems y cada clave de tabla que se le proporcionó en la plantilla de mapeo de solicitud estarán presentes en el resultado de invocación. Los elementos que se han insertado están en el bloque de datos. Los elementos que no se hayan procesado se marcan como null dentro del bloque de datos y se colocan dentro del bloque unprocessedItems.

Para obtener un ejemplo más completo, siga el tutorial de lotes de DynamoDB con AppSync aquí Tutorial: Solucionadores por lotes de DynamoDB.

TransactGetItems

El documento de mapeo de solicitudes de TransactGetItems permite indicar al solucionador de DynamoDB de AWS AppSync que realice una solicitud TransactGetItems a DynamoDB para recuperar varios elementos, que pueden estar en varias tablas. Para esta plantilla de solicitud, debe especificar lo siguiente:

  • El nombre de la tabla de cada elemento de solicitud de la que se va a recuperar el elemento

  • La clave de cada elemento de solicitud que se va a recuperar de cada tabla

Se aplican los límites de TransactGetItems de DynamoDB y no puede proporcionar ninguna expresión de condición.

El documento de mapeo de TransactGetItems tiene la siguiente estructura:

{ "version": "2018-05-29", "operation": "TransactGetItems", "transactItems": [ ## First request item { "table": "table1", "key": { "foo": ... typed value, "bar": ... typed value }, "projection" : { ... } }, ## Second request item { "table": "table2", "key": { "foo": ... typed value, "bar": ... typed value }, "projection" : { ... } } ] }

Los campos se definen de la siguiente manera:

Campos TransactGetItems

version

La versión de la definición de plantilla. Solo se admite 2018-05-29. Este valor es obligatorio.

operation

La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB TransactGetItems, este valor se debe establecer en TransactGetItems. Este valor es obligatorio.

transactItems

Los elementos de solicitud que se van a incluir. El valor es una matriz de elementos de solicitud. Se debe proporcionar al menos un elemento de solicitud. Este valor transactItems es obligatorio.

table

La tabla de DynamoDB de la que se va a recuperar el elemento. El valor es una cadena con el nombre de la tabla. Este valor table es obligatorio.

key

La clave de DynamoDB que representa la clave principal del elemento que se desea recuperar. Los elementos de DynamoDB pueden tener solo una clave hash o una clave hash y una clave de clasificación, dependiendo de la estructura de la tabla. Para obtener más información sobre cómo especificar un “valor con tipo”, consulte Sistema de tipos (mapeo de solicitud).

projection

Proyección que se utiliza para especificar los atributos que se devolverán de la operación de DynamoDB. Para obtener más información acerca de las proyecciones, consulte la sección Proyecciones. Este campo es opcional.

Cosas que tener en cuenta:

  • Si una transacción se realiza correctamente, el orden de los elementos recuperados en el bloque items será el mismo que el orden de los elementos de solicitud.

  • Las transacciones se realizan en régimen de todo o nada. Si algún elemento de solicitud causa un error, no se realizará la transacción completa y se devolverán los detalles del error.

  • El hecho de no poder recuperar un elemento de solicitud no es un error. En su lugar, aparece un elemento null en el bloque items (elementos) en la posición correspondiente.

  • Si el error de una transacción es TransactionCanceledException, se rellenará el bloque cancellationReasons. El orden de los motivos de cancelación en el bloque cancellationReasons será el mismo que el orden de los elementos de solicitud.

  • TransactGetItems está limitado a 25 elementos de solicitud.

Para la siguiente plantilla de mapeo de solicitud de ejemplo:

{ "version": "2018-05-29", "operation": "TransactGetItems", "transactItems": [ ## First request item { "table": "posts", "key": { "post_id": { "S": "p1" } } }, ## Second request item { "table": "authors", "key": { "author_id": { "S": a1 } } } ] }

Si la transacción se realiza correctamente y solo se recupera el primer elemento solicitado, el resultado de la invocación disponible en $ctx.result es el siguiente:

{ "items": [ { // Attributes of the first requested item "post_id": "p1", "post_title": "title", "post_description": "description" }, // Could not retrieve the second requested item null, ], "cancellationReasons": null }

Si la transacción no se realiza correctamente debido a la excepción TransactionCanceledException causada por el primer elemento de solicitud, el resultado de la invocación disponible en $ctx.result es el siguiente:

{ "items": null, "cancellationReasons": [ { "type":"Sample error type", "message":"Sample error message" }, { "type":"None", "message":"None" } ] }

El $ctx.error contiene detalles acerca del error. Los valores de items de claves y cancellationReasons estarán presentes sin duda en $ctx.result.

Para obtener un ejemplo más completo, siga el tutorial de transacciones de DynamoDB con AppSync aquí Tutorial: Solucionadores de transacciones de DynamoDB.

TransactWriteItems

El documento de mapeo de solicitudes de TransactWriteItems permite indicar al solucionador de DynamoDB de AWS AppSync que realice una solicitud TransactWriteItems a DynamoDB para escribir varios elementos, posiblemente en varias tablas. Para esta plantilla de solicitud, debe especificar lo siguiente:

  • El nombre de la tabla de destino de cada elemento de solicitud

  • La operación de cada elemento de solicitud que se va a realizar. Hay cuatro tipos de operaciones compatibles: PutItem, UpdateItem, DeleteItem y ConditionCheck.

  • La clave de cada elemento de solicitud que se va a escribir

Se aplican los límites de TransactWriteItems de DynamoDB.

El documento de mapeo de TransactWriteItems tiene la siguiente estructura:

{ "version": "2018-05-29", "operation": "TransactWriteItems", "transactItems": [ { "table": "table1", "operation": "PutItem", "key": { "foo": ... typed value, "bar": ... typed value }, "attributeValues": { "baz": ... typed value }, "condition": { "expression": "someExpression", "expressionNames": { "#foo": "foo" }, "expressionValues": { ":bar": ... typed value }, "returnValuesOnConditionCheckFailure": true|false } }, { "table":"table2", "operation": "UpdateItem", "key": { "foo": ... typed value, "bar": ... typed value }, "update": { "expression": "someExpression", "expressionNames": { "#foo": "foo" }, "expressionValues": { ":bar": ... typed value } }, "condition": { "expression": "someExpression", "expressionNames": { "#foo":"foo" }, "expressionValues": { ":bar": ... typed value }, "returnValuesOnConditionCheckFailure": true|false } }, { "table": "table3", "operation": "DeleteItem", "key":{ "foo": ... typed value, "bar": ... typed value }, "condition":{ "expression": "someExpression", "expressionNames": { "#foo": "foo" }, "expressionValues": { ":bar": ... typed value }, "returnValuesOnConditionCheckFailure": true|false } }, { "table": "table4", "operation": "ConditionCheck", "key":{ "foo": ... typed value, "bar": ... typed value }, "condition":{ "expression": "someExpression", "expressionNames": { "#foo": "foo" }, "expressionValues": { ":bar": ... typed value }, "returnValuesOnConditionCheckFailure": true|false } } ] }

Campos TransacTwriteItems

Los campos se definen de la siguiente manera:
version

La versión de la definición de plantilla. Solo se admite 2018-05-29. Este valor es obligatorio.

operation

La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB TransactWriteItems, este valor se debe establecer en TransactWriteItems. Este valor es obligatorio.

transactItems

Los elementos de solicitud que se van a incluir. El valor es una matriz de elementos de solicitud. Se debe proporcionar al menos un elemento de solicitud. Este valor transactItems es obligatorio.

Para PutItem, los campos se definen de la siguiente manera:

table

La tabla de DynamoDB de destino. El valor es una cadena con el nombre de la tabla. Este valor table es obligatorio.

operation

La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB PutItem, este valor se debe establecer en PutItem. Este valor es obligatorio.

key

La clave de DynamoDB que representa la clave principal del elemento que se desea colocar. Los elementos de DynamoDB pueden tener solo una clave hash o una clave hash y una clave de clasificación, dependiendo de la estructura de la tabla. Para obtener más información sobre cómo especificar un “valor con tipo”, consulte Sistema de tipos (mapeo de solicitud). Este valor es obligatorio.

attributeValues

El resto de los atributos del elemento que debe colocarse en DynamoDB. Para obtener más información sobre cómo especificar un “valor con tipo”, consulte Sistema de tipos (mapeo de solicitud). Este campo es opcional.

condition

Una condición para determinar si la solicitud debe realizarse correctamente o no, en función del estado del objeto ya incluido en DynamoDB. Si no se especifica ninguna condición, la solicitud PutItem sobrescribe todas las entradas existentes para dicho elemento. Puede especificar si desea recuperar el elemento existente cuando se produzca un error en la comprobación de condiciones. Para obtener más información acerca de las condiciones transaccionales, consulte Expresiones de condición de transacción. Este valor es opcional.

Para UpdateItem, los campos se definen de la siguiente manera:

table

La tabla de DynamoDB que se va a actualizar. El valor es una cadena con el nombre de la tabla. Este valor table es obligatorio.

operation

La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB UpdateItem, este valor se debe establecer en UpdateItem. Este valor es obligatorio.

key

La clave de DynamoDB que representa la clave principal del elemento que se va a actualizar. Los elementos de DynamoDB pueden tener solo una clave hash o una clave hash y una clave de clasificación, dependiendo de la estructura de la tabla. Para obtener más información sobre cómo especificar un “valor con tipo”, consulte Sistema de tipos (mapeo de solicitud). Este valor es obligatorio.

update

La sección update permite especificar una expresión de actualización que describe cómo se actualiza el elemento en DynamoDB. Para obtener más información sobre el modo de escribir expresiones de actualización, consulte la documentación de DynamoDB UpdateExpressions. Esta sección es obligatoria.

condition

Una condición para determinar si la solicitud debe realizarse correctamente o no, en función del estado del objeto ya incluido en DynamoDB. Si no se especifica ninguna condición, la solicitud UpdateItem actualiza todas las entradas existentes independientemente de su estado actual. Puede especificar si desea recuperar el elemento existente cuando se produzca un error en la comprobación de condiciones. Para obtener más información acerca de las condiciones transaccionales, consulte Expresiones de condición de transacción. Este valor es opcional.

Para DeleteItem, los campos se definen de la siguiente manera:

table

La tabla de DynamoDB en la que se elimina el elemento. El valor es una cadena con el nombre de la tabla. Este valor table es obligatorio.

operation

La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB DeleteItem, este valor se debe establecer en DeleteItem. Este valor es obligatorio.

key

La clave de DynamoDB que representa la clave principal del elemento que se desea eliminar. Los elementos de DynamoDB pueden tener solo una clave hash o una clave hash y una clave de clasificación, dependiendo de la estructura de la tabla. Para obtener más información sobre cómo especificar un “valor con tipo”, consulte Sistema de tipos (mapeo de solicitud). Este valor es obligatorio.

condition

Una condición para determinar si la solicitud debe realizarse correctamente o no, en función del estado del objeto ya incluido en DynamoDB. Si no se especifica ninguna condición, la solicitud DeleteItem elimina un elemento independientemente de su estado actual. Puede especificar si desea recuperar el elemento existente cuando se produzca un error en la comprobación de condiciones. Para obtener más información acerca de las condiciones transaccionales, consulte Expresiones de condición de transacción. Este valor es opcional.

Para ConditionCheck, los campos se definen de la siguiente manera:

table

La tabla de DynamoDB en la que se comprueba la condición. El valor es una cadena con el nombre de la tabla. Este valor table es obligatorio.

operation

La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB ConditionCheck, este valor se debe establecer en ConditionCheck. Este valor es obligatorio.

key

La clave de DynamoDB que representa la clave principal del elemento que hay que someter a una comprobación de condición. Los elementos de DynamoDB pueden tener solo una clave hash o una clave hash y una clave de clasificación, dependiendo de la estructura de la tabla. Para obtener más información sobre cómo especificar un “valor con tipo”, consulte Sistema de tipos (mapeo de solicitud). Este valor es obligatorio.

condition

Una condición para determinar si la solicitud debe realizarse correctamente o no, en función del estado del objeto ya incluido en DynamoDB. Puede especificar si desea recuperar el elemento existente cuando se produzca un error en la comprobación de condiciones. Para obtener más información acerca de las condiciones transaccionales, consulte Expresiones de condición de transacción. Este valor es obligatorio.

Cosas que tener en cuenta:

  • Solo las claves de los elementos de solicitud se devuelven en la respuesta, si se realiza correctamente. El orden de las claves será el mismo que el orden de los elementos de solicitud.

  • Las transacciones se realizan en régimen de todo o nada. Si algún elemento de solicitud causa un error, no se realizará la transacción completa y se devolverán los detalles del error.

  • No se pueden dirigir dos elementos de solicitud al mismo elemento. De lo contrario, causarán un error de TransactionCanceledException.

  • Si el error de una transacción es TransactionCanceledException, se rellenará el bloque cancellationReasons. Si se produce un error en la comprobación de condición de un elemento de solicitud y no se ha especificado que returnValuesOnConditionCheckFailure sea false, el elemento existente en la tabla se recuperará y almacenará en item en la posición correspondiente del bloque cancellationReasons.

  • TransactWriteItems está limitado a 25 elementos de solicitud.

Para la siguiente plantilla de mapeo de solicitud de ejemplo:

{ "version": "2018-05-29", "operation": "TransactWriteItems", "transactItems": [ { "table": "posts", "operation": "PutItem", "key": { "post_id": { "S": "p1" } }, "attributeValues": { "post_title": { "S": "New title" }, "post_description": { "S": "New description" } }, "condition": { "expression": "post_title = :post_title", "expressionValues": { ":post_title": { "S": "Expected old title" } } } }, { "table":"authors", "operation": "UpdateItem", "key": { "author_id": { "S": "a1" }, }, "update": { "expression": "SET author_name = :author_name", "expressionValues": { ":author_name": { "S": "New name" } } }, } ] }

Si la transacción se realiza correctamente, el resultado de la invocación disponible en $ctx.result es el siguiente:

{ "keys": [ // Key of the PutItem request { "post_id": "p1", }, // Key of the UpdateItem request { "author_id": "a1" } ], "cancellationReasons": null }

Si la transacción no se realiza correctamente debido a un error de comprobación de condición de la solicitud PutItem, el resultado de la invocación disponible en $ctx.result es el siguiente:

{ "keys": null, "cancellationReasons": [ { "item": { "post_id": "p1", "post_title": "Actual old title", "post_description": "Old description" }, "type": "ConditionCheckFailed", "message": "The condition check failed." }, { "type": "None", "message": "None" } ] }

El $ctx.error contiene detalles acerca del error. Los valores de keys y cancellationReasons estarán presentes sin duda en $ctx.result.

Para obtener un ejemplo más completo, siga el tutorial de transacciones de DynamoDB con AppSync aquí Tutorial: Solucionadores de transacciones de DynamoDB.

Sistema de tipos (mapeo de solicitud)

Cuando se utiliza el solucionador de DynamoDB de AWS AppSync para llamar a sus tablas de DynamoDB, AWS AppSync debe conocer el tipo de cada valor que se va a utilizar en dicha llamada. Esto se debe a que DynamoDB admite más tipos primitivos que los disponibles en GraphQL o JSON (por ejemplo, conjuntos y datos binarios). AWS AppSync necesita indicaciones para hacer conversiones entre GraphQL y DynamoDB; de lo contrario, tendría que suponer cómo se estructuran los datos de la tabla.

Para obtener más información sobre los tipos de datos de DynamoDB, consulte la documentación relativa a los descriptores de tipos de datos y los tipos de datos de DynamoDB.

Un valor de DynamoDB se representa mediante un objeto JSON que contiene un único par de clave-valor. La clave especifica el tipo de DynamoDB y el valor especifica el valor en sí. En el siguiente ejemplo, la clave S indica que el valor es una cadena y el valor identifier es el valor de la cadena en sí.

{ "S" : "identifier" }

Tenga en cuenta que el objeto JSON no puede tener más de un par de clave-valor. Si se especifica más de un par de clave-valor, el documento de mapeo de solicitudes no se analizará.

Siempre que necesite especificar un valor en un documento de mapeo de solicitudes, deberá usar un valor de DynamoDB. Entre los lugares donde necesitará realizar esta operación figuran: las secciones key y attributeValue, y la sección expressionValues de secciones de expresión. En el siguiente ejemplo, el valor de cadena de DynamoDB identifier se asigna al campo id de una sección key (tal vez en un documento de mapeo de solicitudes GetItem).

"key" : { "id" : { "S" : "identifier" } }

Tipos admitidos

AWS AppSync admite los siguientes tipos escalares, de documento y de conjunto de DynamoDB:

Tipo cadena S

Un valor de cadena único. Un valor de cadena de DynamoDB se indica de la siguiente manera:

{ "S" : "some string" }

Ejemplo de uso:

"key" : { "id" : { "S" : "some string" } }
Tipo de conjunto de cadenas SS

Un conjunto de valores de cadena. Un valor de conjunto de cadenas de DynamoDB se indica de la siguiente manera:

{ "SS" : [ "first value", "second value", ... ] }

Ejemplo de uso:

"attributeValues" : { "phoneNumbers" : { "SS" : [ "+1 555 123 4567", "+1 555 234 5678" ] } }
Tipo número N

Un valor numérico único. Un valor de número de DynamoDB se indica de la siguiente manera:

{ "N" : 1234 }

Ejemplo de uso:

"expressionValues" : { ":expectedVersion" : { "N" : 1 } }
Tipo conjunto de números NS

Conjunto de valores de número. Un valor de conjunto de números de DynamoDB se indica de la siguiente manera:

{ "NS" : [ 1, 2.3, 4 ... ] }

Ejemplo de uso:

"attributeValues" : { "sensorReadings" : { "NS" : [ 67.8, 12.2, 70 ] } }
Tipo binario B

Un valor binario. Un valor Binario de DynamoDB se indica de la siguiente manera:

{ "B" : "SGVsbG8sIFdvcmxkIQo=" }

Observe que el valor es en realidad una cadena que contiene la representación codificada en base64 de los datos binarios. AWS AppSync descodifica esta cadena de nuevo a su valor binario antes de enviarlo a DynamoDB. AWS AppSync utiliza el esquema de descodificación base64 como se define en RFC 2045: cualquier carácter que no esté en el alfabeto base64 no se tiene en cuenta.

Ejemplo de uso:

"attributeValues" : { "binaryMessage" : { "B" : "SGVsbG8sIFdvcmxkIQo=" } }
Tipo conjunto binario BS

Conjunto de valores binarios. Un valor de conjunto binario de DynamoDB se indica de la siguiente manera:

{ "BS" : [ "SGVsbG8sIFdvcmxkIQo=", "SG93IGFyZSB5b3U/Cg==" ... ] }

Observe que el valor es en realidad una cadena que contiene la representación codificada en base64 de los datos binarios. AWS AppSync descodifica esta cadena de nuevo a su valor binario antes de enviarlo a DynamoDB. AWS AppSync utiliza el esquema de descodificación base64 como se define en RFC 2045: cualquier carácter que no esté en el alfabeto base64 no se tiene en cuenta.

Ejemplo de uso:

"attributeValues" : { "binaryMessages" : { "BS" : [ "SGVsbG8sIFdvcmxkIQo=", "SG93IGFyZSB5b3U/Cg==" ] } }
Tipo booleano BOOL

Un valor booleano. Un valor Booleano de DynamoDB se indica de la siguiente manera:

{ "BOOL" : true }

Observe que solo los valores true y false son válidos.

Ejemplo de uso:

"attributeValues" : { "orderComplete" : { "BOOL" : false } }
Tipo lista L

Lista del resto de valores de DynamoDB admitidos. Un valor de lista de DynamoDB se indica de la siguiente manera:

{ "L" : [ ... ] }

Observe que se trata de un valor compuesto, y que la lista puede contener cero o más de cualquiera de los valores de DynamoDB admitidos (incluidas otras listas). La lista también puede contener una combinación de diferentes tipos.

Ejemplo de uso:

{ "L" : [ { "S" : "A string value" }, { "N" : 1 }, { "SS" : [ "Another string value", "Even more string values!" ] } ] }
Tipo de mapa M

Representa una colección sin ordenar de pares de clave-valor de otros valores de DynamoDB admitidos. Un valor de mapa de DynamoDB se indica de la siguiente manera:

{ "M" : { ... } }

Observe que un mapa puede contener cero o más pares clave-valor. La clave tiene que ser una cadena y el valor puede ser cualquier valor de DynamoDB admitido (incluidos otros mapas). El mapa también puede contener una combinación de diferentes tipos.

Ejemplo de uso:

{ "M" : { "someString" : { "S" : "A string value" }, "someNumber" : { "N" : 1 }, "stringSet" : { "SS" : [ "Another string value", "Even more string values!" ] } } }
Tipo nulo NULL

Un valor nulo. Un valor Nulo de DynamoDB se indica de la siguiente manera:

{ "NULL" : null }

Ejemplo de uso:

"attributeValues" : { "phoneNumbers" : { "NULL" : null } }

Para obtener más información sobre cada tipo, consulte la documentación de DynamoDB.

Sistema de tipos (mapeo de respuestas)

Cuando recibe una respuesta de DynamoDB, AWS AppSync la convierte automáticamente a los tipos primitivos de GraphQL y JSON. Cada atributo de DynamoDB se descodifica y se devuelve en el contexto de mapeo de respuestas.

Por ejemplo, si DynamoDB devuelve lo siguiente:

{ "id" : { "S" : "1234" }, "name" : { "S" : "Nadia" }, "age" : { "N" : 25 } }

El solucionador de DynamoDB de AWS AppSync lo convierte a los tipos GraphQL y JSON:

{ "id" : "1234", "name" : "Nadia", "age" : 25 }

En esta sección se explica cómo AWS AppSync convierte los tipos escalares, de documento y de conjunto de DynamoDB indicados:

Tipo cadena S

Un valor de cadena único. Se devuelve un valor de cadena de DynamoDB en forma de cadena.

Por ejemplo, si DynamoDB devuelve el siguiente valor de cadena de DynamoDB:

{ "S" : "some string" }

AWS AppSync lo convierte en una cadena:

"some string"
Tipo de conjunto de cadenas SS

Un conjunto de valores de cadena. Un valor de conjunto de cadenas de DynamoDB se devuelve como una lista de cadenas.

Por ejemplo, si DynamoDB devuelve el siguiente valor de conjunto de cadenas de DynamoDB:

{ "SS" : [ "first value", "second value", ... ] }

AWS AppSync lo convierte en una lista de cadenas:

[ "+1 555 123 4567", "+1 555 234 5678" ]
Tipo número N

Un valor numérico único. Un valor de número de DynamoDB se devuelve como número.

Por ejemplo, si DynamoDB devuelve el siguiente valor de número de DynamoDB:

{ "N" : 1234 }

AWS AppSync lo convierte en un número:

1234
Tipo conjunto de números NS

Conjunto de valores de número. Un valor de conjunto de números de DynamoDB se devuelve como una lista de números.

Por ejemplo, si DynamoDB devuelve el siguiente valor de conjunto de números de DynamoDB:

{ "NS" : [ 67.8, 12.2, 70 ] }

AWS AppSync lo convierte en una lista de números:

[ 67.8, 12.2, 70 ]
Tipo binario B

Un valor binario. Un valor Binario de DynamoDB se devuelve en forma de cadena que contiene la representación base64 de dicho valor.

Por ejemplo, si DynamoDB devuelve el siguiente valor binario de DynamoDB:

{ "B" : "SGVsbG8sIFdvcmxkIQo=" }

AWS AppSync lo convierte en una cadena con la representación base64 del valor:

"SGVsbG8sIFdvcmxkIQo="

Observe que los datos binarios se codifican con el esquema base64 como se especifica en RFC 4648 y en RFC 2045.

Tipo conjunto binario BS

Conjunto de valores binarios. Un valor de conjunto binario de DynamoDB se devuelve en forma de una lista de cadenas con la representación base64 de los valores.

Por ejemplo, si DynamoDB devuelve el siguiente valor de conjunto binario de DynamoDB:

{ "BS" : [ "SGVsbG8sIFdvcmxkIQo=", "SG93IGFyZSB5b3U/Cg==" ... ] }

AWS AppSync lo convierte en una lista de cadenas que contienen la representación base64 de los valores:

[ "SGVsbG8sIFdvcmxkIQo=", "SG93IGFyZSB5b3U/Cg==" ... ]

Observe que los datos binarios se codifican con el esquema base64 como se especifica en RFC 4648 y en RFC 2045.

Tipo booleano BOOL

Un valor booleano. Un valor Booleano de DynamoDB se devuelve en forma de valor booleano.

Por ejemplo, si DynamoDB devuelve el siguiente valor booleano de DynamoDB:

{ "BOOL" : true }

AWS AppSync lo convierte en un valor booleano:

true
Tipo lista L

Lista del resto de valores de DynamoDB admitidos. Un valor de lista de DynamoDB se devuelve en forma de lista de valores, donde el valor de cada elemento también se convierte.

Por ejemplo, si DynamoDB devuelve el siguiente valor de lista de DynamoDB:

{ "L" : [ { "S" : "A string value" }, { "N" : 1 }, { "SS" : [ "Another string value", "Even more string values!" ] } ] }

AWS AppSync lo convierte en una lista de valores convertidos:

[ "A string value", 1, [ "Another string value", "Even more string values!" ] ]
Tipo de mapa M

Colección de claves y valores de cualquier otro valor de DynamoDB admitido. Un valor de mapa de DynamoDB se devuelve en forma de objeto JSON en el que también se convierte cada clave y valor.

Por ejemplo, si DynamoDB devuelve el siguiente valor de mapa de DynamoDB:

{ "M" : { "someString" : { "S" : "A string value" }, "someNumber" : { "N" : 1 }, "stringSet" : { "SS" : [ "Another string value", "Even more string values!" ] } } }

AWS AppSync lo convierte en un objeto JSON:

{ "someString" : "A string value", "someNumber" : 1, "stringSet" : [ "Another string value", "Even more string values!" ] }
Tipo nulo NULL

Un valor nulo.

Por ejemplo, si DynamoDB devuelve el siguiente valor nulo de DynamoDB:

{ "NULL" : null }

AWS AppSync lo convierte en un valor nulo:

null

Filtros

Al consultar objetos de DynamoDB mediante las operaciones Query y Scan, tiene la posibilidad de especificar un filter para evaluar los resultados y devolver solo los valores deseados.

La sección de mapeo de filtros de un documento de mapeo Query o Scan tiene la siguiente estructura:

"filter" : { "expression" : "filter expression" "expressionNames" : { "#name" : "name", }, "expressionValues" : { ":value" : ... typed value }, }

Los campos se definen de la siguiente manera:

expression

La expresión de la consulta. Para obtener más información sobre cómo escribir expresiones de filtro, consulte la documentación de DynamoDB QueryFilter y DynamoDB ScanFilter. Este campo debe especificarse.

expressionNames

Las sustituciones de los marcadores de posición de nombre de atributo de expresión, en forma de pares de clave-valor. La clave corresponde a un marcador de posición de nombre utilizado en la expression. El valor debe ser una cadena que corresponda al nombre del atributo del elemento en DynamoDB. Este campo es opcional y solo debe rellenarse con las sustituciones de marcadores de posición de nombre de atributo de expresión que se usen en la expression.

expressionValues

Las sustituciones de los marcadores de posición de valor de atributo de expresión, en forma de pares de clave-valor. La clave corresponde a un marcador de posición de valor usado en la expression y el valor tiene que ser un valor con tipo. Para obtener más información sobre cómo especificar un “valor con tipo”, consulte Sistema de tipos (mapeo de solicitud). Este valor debe especificarse. Este campo es opcional y solo debe rellenarse con las sustituciones de los marcadores de posición de valor de atributo de expresión que se usen en la expression.

Ejemplo

En el siguiente ejemplo, se muestra una sección de filtro para una plantilla de mapeo en la que las entradas obtenidas de DynamoDB solo se devuelven si el título comienza con el argumento title.

"filter" : { "expression" : "begins_with(#title, :title)", "expressionNames" : { "#title" : "title" }, "expressionValues" : { ":title" : $util.dynamodb.toDynamoDBJson($context.arguments.title) } }

Expresiones de condición

Al mutar objetos en DynamoDB utilizando las operaciones de DynamoDB PutItem, UpdateItem y DeleteItem, puede especificar opcionalmente una expresión de condición que determine si la solicitud se debe atender o no en función del estado del objeto que ya está en DynamoDB antes de ejecutar la operación.

El solucionador de DynamoDB de AWS AppSync permite especificar una expresión de condición en los documentos de mapeo de solicitudes PutItem, UpdateItem y DeleteItem, así como la estrategia que debe seguirse en caso de que la condición no se cumpla y el objeto no se actualice.

Ejemplo 1

El siguiente documento de mapeo PutItem no tiene una expresión de condición. Como resultado, pone un elemento en DynamoDB incluso si ya existe un elemento con la misma clave, lo que permite sobrescribir el elemento existente.

{ "version" : "2017-02-28", "operation" : "PutItem", "key" : { "id" : { "S" : "1" } } }

Ejemplo 2

El siguiente documento de mapeo PutItem tiene una expresión de condición que permitirá que la operación se complete solo si no existe un elemento con la misma clave en DynamoDB.

{ "version" : "2017-02-28", "operation" : "PutItem", "key" : { "id" : { "S" : "1" } }, "condition" : { "expression" : "attribute_not_exists(id)" } }

De forma predeterminada, si la condición no se cumple, el solucionador de DynamoDB de AWS AppSync devolverá un error para la mutación y el valor actual del objeto en DynamoDB de un campo data de la sección error de la respuesta de GraphQL. Sin embargo, el solucionador de DynamoDB de AWS AppSync ofrece algunas características adicionales para ayudar a los desarrolladores a gestionar algunos casos límite habituales:

  • Si el solucionador de DynamoDB de AWS AppSync puede determinar que el valor actual de DynamoDB coincide con el resultado deseado, trata la operación como si se hubiera realizado correctamente de todos modos.

  • En lugar de devolver un error, puede configurar el solucionador para que invoque una función de Lambda personalizada que decida cómo debe gestionar el error AWS AppSync DynamoDB.

Estos casos se describen con más detalle en la sección de gestión de un error de comprobación de la condición.

Para obtener más información sobre las expresiones de condiciones de DynamoDB, consulte la documentación de expresiones de condición de DynamoDB.

Especificación de una condición

Todos los documentos de mapeo de solicitudes PutItem, UpdateItem y DeleteItem permiten especificar una sección condition opcional. Si se omite, no se comprobará ninguna condición. Si se especifica, la condición debe ser true para que la operación se lleve a cabo correctamente.

Las secciones condition tienen la siguiente estructura:

"condition" : { "expression" : "someExpression" "expressionNames" : { "#foo" : "foo" }, "expressionValues" : { ":bar" : ... typed value }, "equalsIgnore" : [ "version" ], "consistentRead" : true, "conditionalCheckFailedHandler" : { "strategy" : "Custom", "lambdaArn" : "arn:..." } }

Los campos siguientes especifican la condición:

expression

La misma expresión de actualización. Para obtener más información sobre cómo escribir expresiones de condición, consulte la documentación de DynamoDB ContitionExpressions. Este campo debe especificarse.

expressionNames

Las sustituciones de los marcadores de posición de nombre de atributo de expresión, en forma de pares de clave-valor. La clave corresponde a un marcador de posición de nombre usado en la expresión, y el valor tiene que ser una cadena que corresponda al nombre de atributo del elemento en DynamoDB. Este campo es opcional y solo debe rellenarse con las sustituciones de los marcadores de posición de nombre de atributo de expresión que se usen en la expresión.

expressionValues

Las sustituciones de los marcadores de posición de valor de atributo de expresión, en forma de pares de clave-valor. La clave corresponde a un marcador de posición de valor usado en la expresión y el valor tiene que ser un valor con tipo. Para obtener más información sobre cómo especificar un “valor con tipo”, consulte Sistema de tipos (mapeo de solicitud). Este valor debe especificarse. Este campo es opcional y solo debe rellenarse con las sustituciones de los marcadores de posición de valor de atributo de expresión que se usen en la expresión.

El resto de los campos indican al solucionador de DynamoDB de AWS AppSync cómo gestionar los casos en que no se cumpla la condición:

equalsIgnore

Cuando no se cumple la condición para la operación PutItem, el solucionador de DynamoDB de AWS AppSync compara el elemento que hay actualmente en DynamoDB con el elemento que ha intentado escribir. Si son iguales, trata la operación como si se hubiera realizado correctamente. Puede utilizar el campo equalsIgnore para especificar una lista de atributos que AWS AppSync no debe tener en cuenta al realizar la comparación. Por ejemplo, si la única diferencia ha sido un atributo version, trata la operación como si se hubiera realizado satisfactoriamente. Este campo es opcional.

consistentRead

Cuando una condición no se cumple, AWS AppSync obtiene el valor actual del elemento de DynamoDB mediante una lectura altamente coherente. Puede utilizar este campo para indicar al solucionador de DynamoDB de AWS AppSync que use una lectura coherente posterior en su lugar. Este campo es opcional y de forma predeterminada es true.

conditionalCheckFailedHandler

Esta sección le permite especificar la forma en que el solucionador de DynamoDB de AWS AppSync trata los casos en que no se cumpla la condición después de haber comparado el valor actual en DynamoDB con el resultado esperado. Esta sección es opcional. Si se omite, el valor predeterminado es una estrategia Reject.

strategy

La estrategia que el solucionador de DynamoDB de AWS AppSync sigue después de comparar el valor actual en DynamoDB con el resultado esperado. Este campo es obligatorio y tiene los siguientes valores posibles:

Reject

La mutación fracasa y se obtiene un error y un error para la mutación y el valor actual del objeto en DynamoDB en un campo data de la sección error de la respuesta de GraphQL.

Custom

El solucionador de DynamoDB de AWS AppSync invoca una función de Lambda personalizada para decidir cómo gestionar el incumplimiento de la condición. Cuando strategy tiene el valor Custom, el campo lambdaArn debe contener el ARN de la función Lambda que se va a invocar.

lambdaArn

El ARN de la función de Lambda que se invoca, que determina cómo debe gestionar el solucionador de DynamoDB de AWS AppSync el incumplimiento de la condición. Este campo solo tiene que especificarse cuando strategy tiene el valor Custom. Para obtener más información acerca de cómo utilizar esta característica, consulte la sección Gestión de los casos en que no se cumple la condición.

Gestión de un error de comprobación de la condición

De forma predeterminada, si la condición no se cumple, el solucionador de DynamoDB de AWS AppSync devolverá un error para la mutación y el valor actual del objeto en DynamoDB de un campo data de la sección error de la respuesta de GraphQL. Sin embargo, el solucionador de DynamoDB de AWS AppSync ofrece algunas características adicionales para ayudar a los desarrolladores a gestionar algunos casos límite habituales:

  • Si el solucionador de DynamoDB de AWS AppSync puede determinar que el valor actual de DynamoDB coincide con el resultado deseado, trata la operación como si se hubiera realizado correctamente de todos modos.

  • En lugar de devolver un error, puede configurar el solucionador para que invoque una función de Lambda personalizada que decida cómo debe gestionar el error AWS AppSync DynamoDB.

El diagrama de flujo de este proceso es:

Comprobación del resultado deseado

Cuando la condición no se cumple, el solucionador de DynamoDB de AWS AppSync realiza una solicitud de DynamoDB GetItem para obtener el valor actual del elemento de DynamoDB. De forma predeterminada, utiliza una lectura muy consistente; sin embargo, esto puede configurarse mediante el campo consistentRead en el bloque condition y compararlo con el resultado esperado:

  • En la operación PutItem, el solucionador de DynamoDB de AWS AppSync compara el valor actual con el que intentó escribir, excluyendo de la comparación los atributos especificados en equalsIgnore. Si los elementos son los mismos, trata la operación como si se hubiera realizado y devuelve el elemento obtenido de DynamoDB. De lo contrario, sigue la estrategia configurada.

    Por ejemplo, si el documento de mapeo de PutItem tenía el siguiente aspecto:

    { "version" : "2017-02-28", "operation" : "PutItem", "key" : { "id" : { "S" : "1" } }, "attributeValues" : { "name" : { "S" : "Steve" }, "version" : { "N" : 2 } }, "condition" : { "expression" : "version = :expectedVersion", "expressionValues" : { ":expectedVersion" : { "N" : 1 } }, "equalsIgnore": [ "version" ] } }

    Y el elemento que está actualmente en DynamoDB fuese de la siguiente manera:

    { "id" : { "S" : "1" }, "name" : { "S" : "Steve" }, "version" : { "N" : 8 } }

    El solucionador de DynamoDB de AWS AppSync compararía el elemento que intentó escribir con el valor actual y vería que la única diferencia es el campo version, pero como la configuración pasa el campo version por alto, trataría la operación como correcta y devolvería el elemento obtenido de DynamoDB.

  • En la operación DeleteItem, el solucionador de DynamoDB de AWS AppSync realiza una comprobación para verificar que se ha devuelto un elemento de DynamoDB. Si no se devuelve ningún elemento, trata la operación como si se hubiera realizado correctamente. De lo contrario, sigue la estrategia configurada.

  • En la operación UpdateItem, el solucionador de DynamoDB de AWS AppSync no tiene suficiente información para determinar si el elemento que está actualmente en DynamoDB coincide con el resultado esperado y, por lo tanto, sigue la estrategia configurada.

Si el estado actual del objeto en DynamoDB es diferente del resultado esperado, el solucionador de DynamoDB de AWS AppSync sigue la estrategia configurada para rechazar la mutación o invocar una función de Lambda para determinar qué hacer a continuación.

Aplicación de la estrategia de rechazo

Si se sigue la estrategia Reject, el solucionador de DynamoDB de AWS AppSync devuelve un error para la mutación y el valor actual del objeto en DynamoDB también se devuelve en un campo data de la sección error de la respuesta de GraphQL. El elemento que se devuelve desde DynamoDB pasa por la plantilla de mapeo de respuesta para convertirlo a un formato que el cliente espera y también se filtra según el conjunto de selección.

Por ejemplo, si se recibe la solicitud de mutación siguiente:

mutation { updatePerson(id: 1, name: "Steve", expectedVersion: 1) { Name theVersion } }

Si el elemento devuelto de DynamoDB tiene un aspecto similar al siguiente:

{ "id" : { "S" : "1" }, "name" : { "S" : "Steve" }, "version" : { "N" : 8 } }

Y la plantilla de mapeo de respuesta es como se muestra a continuación:

{ "id" : $util.toJson($context.result.id), "Name" : $util.toJson($context.result.name), "theVersion" : $util.toJson($context.result.version) }

La respuesta GraphQL tiene este aspecto:

{ "data": null, "errors": [ { "message": "The conditional request failed (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ConditionalCheckFailedException; Request ID: ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ)" "errorType": "DynamoDB:ConditionalCheckFailedException", "data": { "Name": "Steve", "theVersion": 8 }, ... } ] }

Además, si hay algún campo en el objeto devuelto que hayan cumplimentado otros solucionadores y si la mutación se ha efectuado satisfactoriamente, el objeto no se resuelve cuando se devuelve en la sección error.

Aplicación de la estrategia personalizada

Si se sigue la estrategia Custom, el solucionador de DynamoDB de AWS AppSync invoca una función de Lambda para decidir qué hacer a continuación. La función Lambda selecciona una de las siguientes opciones:

  • reject la mutación. Esto le indica al solucionador de DynamoDB de AWS AppSync que se comporte como si la estrategia configurada fuera Reject y que devuelva un error para la mutación y el valor actual del objeto de DynamoDB, tal como se describe en la sección anterior.

  • discard la mutación. Esto indica al solucionador de DynamoDB de AWS AppSync que no notifique el incumplimiento de la condición y que devuelva el valor en DynamoDB.

  • retry la mutación. Esto le indica al solucionador de DynamoDB de AWS AppSync que vuelva a intentar la mutación con otro documento de mapeo de solicitud.

La solicitud de invocación Lambda

El solucionador de DynamoDB de AWS AppSync invoca la función de Lambda especificada en el lambdaArn. Se utiliza el mismo service-role-arn configurado en el origen de datos. La carga de la invocación tiene la siguiente estructura:

{ "arguments": { ... }, "requestMapping": {... }, "currentValue": { ... }, "resolver": { ... }, "identity": { ... } }

Los campos se definen de la siguiente manera:

arguments

Los argumentos de la mutación de GraphQL. Esto es lo mismo que los argumentos disponibles en el documento de mapeo de solicitudes en $context.arguments.

requestMapping

El documento de mapeo de solicitudes de esta operación.

currentValue

El valor actual del objeto en DynamoDB.

resolver

Información sobre el solucionador de AWS AppSync.

identity

Información sobre el intermediario. Se trata de la información de identidad disponible en el documento de mapeo de solicitudes en $context.identity.

Un ejemplo completo de la carga:

{ "arguments": { "id": "1", "name": "Steve", "expectedVersion": 1 }, "requestMapping": { "version" : "2017-02-28", "operation" : "PutItem", "key" : { "id" : { "S" : "1" } }, "attributeValues" : { "name" : { "S" : "Steve" }, "version" : { "N" : 2 } }, "condition" : { "expression" : "version = :expectedVersion", "expressionValues" : { ":expectedVersion" : { "N" : 1 } }, "equalsIgnore": [ "version" ] } }, "currentValue": { "id" : { "S" : "1" }, "name" : { "S" : "Steve" }, "version" : { "N" : 8 } }, "resolver": { "tableName": "People", "awsRegion": "us-west-2", "parentType": "Mutation", "field": "updatePerson", "outputType": "Person" }, "identity": { "accountId": "123456789012", "sourceIp": "x.x.x.x", "user": "AIDAAAAAAAAAAAAAAAAAA", "userArn": "arn:aws:iam::123456789012:user/appsync" } }

La respuesta de invocación Lambda

La función de Lambda puede inspeccionar la carga de invocación y aplicar cualquier lógica de negocio para decidir la forma en que el solucionador de DynamoDB de AWS AppSync debe gestionar el error. Existen tres opciones para gestionar el error de comprobación de condición:

  • reject la mutación. La carga de respuesta de esta opción debe tener esta estructura:

    { "action": "reject" }

    Esto le indica al solucionador de DynamoDB de AWS AppSync que se comporte como si la estrategia configurada fuera Reject y que devuelva un error para la mutación y el valor actual del objeto de DynamoDB, tal como se describe en la sección anterior.

  • discard la mutación. La carga de respuesta de esta opción debe tener esta estructura:

    { "action": "discard" }

    Esto indica al solucionador de DynamoDB de AWS AppSync que no notifique el incumplimiento de la condición y que devuelva el valor en DynamoDB.

  • retry la mutación. La carga de respuesta de esta opción debe tener esta estructura:

    { "action": "retry", "retryMapping": { ... } }

    Esto le indica al solucionador de DynamoDB de AWS AppSync que vuelva a intentar la mutación con otro documento de mapeo de solicitud. La estructura de la sección retryMapping depende de la operación de DynamoDB y es un subconjunto del documento de mapeo de solicitudes completo de esa operación.

    Para PutItem, la sección retryMapping tiene la siguiente estructura. Para ver una descripción del campo attributeValues, consulte PutItem.

    { "attributeValues": { ... }, "condition": { "equalsIgnore" = [ ... ], "consistentRead" = true } }

    Para UpdateItem, la sección retryMapping tiene la siguiente estructura. Para ver una descripción de la sección update, consulte UpdateItem.

    { "update" : { "expression" : "someExpression" "expressionNames" : { "#foo" : "foo" }, "expressionValues" : { ":bar" : ... typed value } }, "condition": { "consistentRead" = true } }

    Para DeleteItem, la sección retryMapping tiene la siguiente estructura.

    { "condition": { "consistentRead" = true } }

    No hay forma de especificar otra operación o clave en la que trabajar. El solucionador de DynamoDB de AWS AppSync solo permite reintentos de la misma operación en el mismo objeto. Asimismo, la sección condition no permite especificar un conditionalCheckFailedHandler. Si el reintento fracasa, el solucionador de DynamoDB de AWS AppSync sigue la estrategia Reject.

A continuación se muestra un ejemplo de función Lambda para tratar una solicitud PutItem sin éxito. La lógica de negocio examina quién realizó la llamada. Si la realizó jeffTheAdmin, vuelve a intentar realizar la solicitud, actualizando version y expectedVersion desde el elemento actualmente en DynamoDB. De lo contrario, rechaza la mutación.

exports.handler = (event, context, callback) => { console.log("Event: "+ JSON.stringify(event)); // Business logic goes here. var response; if ( event.identity.user == "jeffTheAdmin" ) { response = { "action" : "retry", "retryMapping" : { "attributeValues" : event.requestMapping.attributeValues, "condition" : { "expression" : event.requestMapping.condition.expression, "expressionValues" : event.requestMapping.condition.expressionValues } } } response.retryMapping.attributeValues.version = { "N" : event.currentValue.version.N + 1 } response.retryMapping.condition.expressionValues[':expectedVersion'] = event.currentValue.version } else { response = { "action" : "reject" } } console.log("Response: "+ JSON.stringify(response)) callback(null, response) };

Expresiones de condición de transacción

Las expresiones de condición de transacción están disponibles en las plantillas de mapeo de solicitudes de los cuatro tipos de operaciones en TransactWriteItems, a saber, PutItem, DeleteItem, UpdateItem y ConditionCheck.

Para PutItem, DeleteItem y UpdateItem, la expresión de condición de transacción es opcional. Para ConditionCheck, se requiere la expresión de condición de transacción.

Ejemplo 1

El siguiente documento de mapeo transaccional de DeleteItem no tiene una expresión de condición. Como resultado, elimina el elemento en DynamoDB.

{ "version": "2018-05-29", "operation": "TransactWriteItems", "transactItems": [ { "table": "posts", "operation": "DeleteItem", "key": { "id": { "S" : "1" } } } ] }

Ejemplo 2

El siguiente documento de mapeo transaccional de DeleteItem tiene una expresión de condición de transacción que permite que la operación tenga éxito únicamente si el autor de esa publicación es igual a un nombre determinado.

{ "version": "2018-05-29", "operation": "TransactWriteItems", "transactItems": [ { "table": "posts", "operation": "DeleteItem", "key": { "id": { "S" : "1" } } "condition": { "expression": "author = :author", "expressionValues": { ":author": { "S" : "Chunyan" } } } } ] }

Si la comprobación de condición no se realiza correctamente, provocará la excepción TransactionCanceledException y se devolverá el detalle del error en $ctx.result.cancellationReasons. Tenga en cuenta que, de forma predeterminada, el elemento anterior de DynamoDB que provocó el error en esa comprobación de condición se devolverá en $ctx.result.cancellationReasons.

Especificación de una condición

Todos los documentos de mapeo de solicitudes PutItem, UpdateItem y DeleteItem permiten especificar una sección condition opcional. Si se omite, no se comprobará ninguna condición. Si se especifica, la condición debe ser true para que la operación se lleve a cabo correctamente. ConditionCheck debe tener una sección condition sección para especificarla. La condición debe ser verdadera para que toda la transacción se realice correctamente.

Las secciones condition tienen la siguiente estructura:

"condition": { "expression": "someExpression", "expressionNames": { "#foo": "foo" }, "expressionValues": { ":bar": ... typed value }, "returnValuesOnConditionCheckFailure": false }

Los campos siguientes especifican la condición:

expression

La misma expresión de actualización. Para obtener más información sobre cómo escribir expresiones de condición, consulte la documentación de DynamoDB ContitionExpressions. Este campo debe especificarse.

expressionNames

Las sustituciones de los marcadores de posición de nombre de atributo de expresión, en forma de pares de clave-valor. La clave corresponde a un marcador de posición de nombre usado en la expresión, y el valor tiene que ser una cadena que corresponda al nombre de atributo del elemento en DynamoDB. Este campo es opcional y solo debe rellenarse con las sustituciones de los marcadores de posición de nombre de atributo de expresión que se usen en la expresión.

expressionValues

Las sustituciones de los marcadores de posición de valor de atributo de expresión, en forma de pares de clave-valor. La clave corresponde a un marcador de posición de valor usado en la expresión y el valor tiene que ser un valor con tipo. Para obtener más información sobre cómo especificar un “valor con tipo”, consulte Sistema de tipos (mapeo de solicitud). Este valor debe especificarse. Este campo es opcional y solo debe rellenarse con las sustituciones de los marcadores de posición de valor de atributo de expresión que se usen en la expresión.

returnValuesOnConditionCheckFailure

Especifique si desea recuperar el elemento en DynamoDB cuando se produzca un error en la comprobación de condición. El elemento recuperado estará en $ctx.result.cancellationReasons[$index].item, donde $index es el índice del elemento de solicitud que no ha superado la comprobación de condición. Este valor se establece de forma predeterminada en true.

Proyecciones

Al leer objetos de DynamoDB mediante las operaciones GetItem, Scan, Query, BatchGetItem y TransactGetItems, tiene la posibilidad de especificar una proyección para identificar los atributos deseados. La proyección tiene la siguiente estructura, que es similar a los filtros:

"projection" : { "expression" : "projection expression" "expressionNames" : { "#name" : "name", } }

Los campos se definen de la siguiente manera:

expression

La expresión de proyección, que es una cadena. Para recuperar un solo atributo, especifique su nombre. Si desea obtener varios atributos, separe sus nombres mediante comas. Para obtener más información sobre la redacción de expresiones de proyección, consulte la documentación relativa a las expresiones de proyección de DynamoDB. Este campo es obligatorio.

expressionNames

Las sustituciones de los marcadores de posición de nombre de atributo de expresión, en forma de pares de clave-valor. La clave corresponde a un marcador de posición de nombre utilizado en la expression. El valor debe ser una cadena que corresponda al nombre del atributo del elemento en DynamoDB. Este campo es opcional y solo debe rellenarse con las sustituciones de marcadores de posición de nombre de atributo de expresión que se usen en la expression. Para obtener más información acerca de expressionNames, consulte la documentación de DynamoDB.

Ejemplo 1

El siguiente ejemplo es una sección de proyección para un mapeo de VTL en el que solo los atributos author y id se devuelven de DynamoDB:

"projection" : { "expression" : "#author, id", "expressionNames" : { "#author" : "author" } }
sugerencia

Puede acceder a su conjunto de selección de solicitudes de GraphQL mediante $context.info.selectionSetList. Este campo permite enmarcar su expresión de proyección de forma dinámica según sus requisitos.

nota

Al utilizar expresiones de proyección con las operaciones Query y Scan, el valor de select debe ser SPECIFIC_ATTRIBUTES. Para obtener más información, consulte la documentación de DynamoDB.