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.
Solución de problemas y errores comunes en AWS AppSync
En esta sección se explican algunos errores comunes y cómo solucionarlos.
Mapeo de clave de DynamoDB incorrecto
Si una operación de GraphQL devuelve el siguiente mensaje de error, puede deberse a que la estructura de la plantilla de mapeo de solicitudes no coincide con la estructura de clave de Amazon DynamoDB:
The provided key element does not match the schema (Service: AmazonDynamoDBv2; Status Code: 400; Error Code
Por ejemplo, si la tabla de DynamoDB tiene una clave hash llamada "id" y la plantilla dice "PostID", como en el ejemplo siguiente, se produce el error anterior, ya que "id" no coincide con "PostID".
{ "version" : "2017-02-28", "operation" : "GetItem", "key" : { "PostID" : $util.dynamodb.toDynamoDBJson($ctx.args.id) } }
Falta el solucionador
Si ejecuta una operación de GraphQL, por ejemplo una consulta, y obtiene una respuesta nula, puede ser debido a que no tiene un solucionador configurado.
Por ejemplo, si importa un esquema que define un campo getCustomer(userId:
ID!): y no ha configurado un solucionador para este campo, cuando se ejecuta una consulta, por ejemplo getCustomer(userId:"ID123"){...}, recibirá una respuesta como la siguiente:
{ "data": { "getCustomer": null } }
Si falta un solucionador que configuró anteriormente después de cambiar el esquema, consulteEl solucionador se elimina al eliminar su campo de esquema.
Errores en la plantilla de mapeo
Si la plantilla de mapeo no está configurada correctamente, recibirá una respuesta de GraphQL cuyo valor de errorType será MappingTemplate. El campo message debe indicar dónde se encuentra el problema de la plantilla de mapeo.
Por ejemplo, si la plantilla de mapeo de solicitud no tiene el campo operation o si el nombre del campo operation es incorrecto, obtendrá una respuesta similar a la siguiente:
{ "data": { "searchPosts": null }, "errors": [ { "path": [ "searchPosts" ], "errorType": "MappingTemplate", "locations": [ { "line": 2, "column": 3 } ], "message": "Value for field '$[operation]' not found." } ] }
Tipos de retorno incorrectos
El tipo de retorno del origen de datos debe coincidir con el tipo definido para un objeto en el esquema; de lo contrario, es posible que se produzca un error de GraphQL como este:
"errors": [ { "path": [ "posts" ], "locations": null, "message": "Can't resolve value (/posts) : type mismatch error, expected type LIST, got OBJECT" } ]
Por ejemplo, esto podría ocurrir con la siguiente definición de consulta:
type Query { posts: [Post] }
que espera una lista de objetos [Posts]. Por ejemplo, si tuvieras una función de Lambda Node.JS con algo como lo siguiente:
const result = { data: data.Items.map(item => { return item ; }) }; callback(err, result);
Se generaría un error, ya que result es un objeto. Tendría que cambiar la devolución de llamada a result.data o modificar el esquema para que no devuelva una lista.
Procesamiento de solicitudes no válidas
Cuando AWS AppSync no puede procesar y enviar una solicitud (debido a datos incorrectos, como una sintaxis no válida) al solucionador de campos, la carga útil de respuestas devolverá los datos del campo con los valores establecidos en null y cualquier error relevante.
El solucionador se elimina al eliminar su campo de esquema
Un solucionador se adjunta a un campo específico de un tipo de tu esquema. Si actualizas tu esquema para eliminar un campo o para eliminar un tipo que tiene un solucionador adjunto, AWS AppSync también se elimina el solucionador adjunto. Esto mantiene la coherencia entre tu esquema y sus solucionadores.
Si restauras el campo más adelante (por ejemplo, deshaciendo un cambio), el solucionador no se restaurará con él. A continuación, las solicitudes al campo vuelven a null aparecer porque no hay ningún solucionador configurado para él. Para obtener más información, consulte Falta el solucionador.
Interacción con AWS CloudFormation y el AWS CDK
Cuando administras tu API con CloudFormation o con AWS CDK, tu esquema y cada resolución se definen como recursos independientes (por ejemplo, AWS::AppSync::GraphQLSchema yAWS::AppSync::Resolver). Cuando una actualización del esquema elimina un campo, se AWS AppSync
elimina el solucionador adjunto, pero esta eliminación no se refleja en tu CloudFormation
pila. CloudFormation sigue rastreando el solucionador como si aún existiera. Como resultado:
-
Retirar la pila no recrea el resolutor eliminado.
-
Al volver a implementar una plantilla sin cambios, no se vuelve a crear, ya que no se CloudFormation detecta ningún cambio en el recurso de resolución.
-
Si el esquema vuelve a hacer referencia al campo, pero falta el solucionador, se devuelven
nulllas solicitudes a ese campo y una operación de pila puede fallar o detenerse (por ejemplo, con el estado).UPDATE_ROLLBACK_FAILED
Recupera un solucionador eliminado
-
Asegúrese de que su esquema declare el campo al que está adjunto el solucionador.
-
Vuelva a crear el solucionador. Como CloudFormation no actúa sobre un recurso de resolución cuya definición no ha cambiado, haga un cambio que haga que vuelva a crear el recurso. Por ejemplo, cambie el identificador lógico del solucionador o elimine y, a continuación, vuelva a agregar el recurso de resolución en implementaciones distintas. También puedes volver a crear el solucionador directamente mediante la AWS AppSync consola, la operación de la
CreateResolverAPI o la aplicación y, a continuación AWS CLI, conciliar la plantilla o la aplicación. AWS CDK -
Si se detiene una operación de pila (por ejemplo, con el estado
UPDATE_ROLLBACK_FAILED), vuelve a crear el solucionador que falta para que la operación pueda completarse y, a continuación, implementa una plantilla de funcionalidad comprobada.
Elimine o cambie el nombre de los campos de forma segura
-
Para cambiar el nombre de un campo, primero agregue el nuevo campo y adjunte su solucionador, implemente el cambio y, a continuación, elimine el campo anterior.
-
No elimines un campo de esquema cuyo resolutor quieras conservar.
-
Cuando elimines un campo de forma intencionada, elimina también su recurso de resolución de tu plantilla o AWS CDK aplicación en el mismo cambio, para que tu CloudFormation estado se mantenga uniforme.
-
Prueba los cambios de esquema en un entorno de desarrollo o prueba antes de implementarlos en producción.