Uso de solucionadores de HTTP en AWS AppSync - AWS AppSync GraphQL

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.

Uso de solucionadores de HTTP en AWS AppSync

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í.

AWS AppSync le permite utilizar orígenes de datos compatibles (es decir, AWS Lambda, Amazon DynamoDB, Amazon OpenSearch Service o Amazon Aurora) para realizar diversas operaciones, además de cualquier punto de conexión HTTP arbitrario para resolver campos de GraphQL. Una vez que los puntos de enlace HTTP están disponibles, puede conectar con ellos mediante un origen de datos. A continuación, puede configurar un solucionador en el esquema para realizar operaciones de GraphQL como consultas, mutaciones, y suscripciones. Este tutorial le guiará a lo largo de algunos ejemplos comunes.

En este tutorial, se utiliza una API de REST (creada mediante Amazon API Gateway y Lambda) con un punto de conexión de GraphQL de AWS AppSync.

Configuración en un clic

Si desea crear automáticamente un punto de conexión de GraphQL en AWS AppSync con un punto de conexión HTTP configurado (mediante Amazon API Gateway y Lambda), puede utilizar la siguiente plantilla de AWS CloudFormation:

Blue button labeled "Launch Stack" with an arrow icon indicating an action to start.

Creación de una API de REST

Puede utilizar la siguiente plantilla de AWS CloudFormation para establecer un punto de enlace REST que funcione con este tutorial:

Blue button labeled "Launch Stack" with an arrow icon indicating an action to start.

La pila de AWS CloudFormation realiza los siguientes pasos:

  1. Configura una función Lambda que contiene la lógica de negocio del microservicio.

  2. Configure una API de REST de puerta de enlace de API con la combinación punto de conexión/método/tipo de contenido siguiente:

Ruta de recurso de la API Método HTTP Tipo de contenido admitido

/v1/users

POST

application/json

/v1/users

GET

application/json

/v1/users/1

GET

application/json

/v1/users/1

PUT

application/json

/v1/users/1

DELETE

application/json

Creación de la API de GraphQL

Para crear la API de GraphQL en AWS AppSync:

  • Abra la consola de AppSync AWS y elija Crear API.

  • En el nombre de la API, introduzca UserData.

  • Elija Custom Schema (Esquema personalizado).

  • Seleccione Crear.

La consola de AWS AppSync crea una nueva API de GraphQL automáticamente utilizando el modo de autenticación de clave de API. Puede utilizar la consola para configurar el resto de la API de GraphQL y ejecutar consultas en ella durante el resto de este tutorial.

Creación de un esquema de GraphQL

Ahora que tiene una API de GraphQL, vamos a crear un esquema de GraphQL. En el editor de esquemas de la consola de AWS AppSync, asegúrese de que el esquema coincida con el siguiente:

schema { query: Query mutation: Mutation } type Mutation { addUser(userInput: UserInput!): User deleteUser(id: ID!): User } type Query { getUser(id: ID): User listUser: [User!]! } type User { id: ID! username: String! firstname: String lastname: String phone: String email: String } input UserInput { id: ID! username: String! firstname: String lastname: String phone: String email: String }

Configure el origen de datos HTTP

Para configurar el origen de datos HTTP, haga lo siguiente:

  • En la pestaña Data Sources (Orígenes de datos), elija New (Nuevo) y, a continuación, escriba un nombre fácil de recordar para el origen de datos (por ejemplo, HTTP).

  • En Data source type (Tipo de origen de datos), elija HTTP.

  • Establezca como punto de conexión el punto de conexión de la puerta de enlace de la API que se ha creado. Asegúrese de no incluir el nombre de etapa como parte del punto de enlace.

Nota: En estos momentos, solo los puntos de conexión públicos son compatibles con AWS AppSync.

Nota: Para obtener más información acerca de las entidades de certificación que reconoce el servicio de AWS AppSync, consulte Certificate Authorities (CA) Recognized by AWS AppSync for HTTPS Endpoints.

Configuración de solucionadores

En este paso conectará el origen de datos HTTP a la consulta getUser.

Para configurar el solucionador de :

  • Elija la pestaña Schema (Esquema).

  • En el panel Data types (Tipos de datos) situado a la derecha, en el tipo Query (Consulta), busque el campo getUser y seleccione Attach (Asociar).

  • En Data source name (Nombre del origen de datos), elija HTTP.

  • En Configure the request mapping template (Configurar la plantilla de mapeo de solicitud), pegue el siguiente código:

{ "version": "2018-05-29", "method": "GET", "params": { "headers": { "Content-Type": "application/json" } }, "resourcePath": $util.toJson("/v1/users/${ctx.args.id}") }
  • En Configure the response mapping template (Configurar la plantilla de mapeo de respuesta), pegue el siguiente código:

## return the body #if($ctx.result.statusCode == 200) ##if response is 200 $ctx.result.body #else ##if response is not 200, append the response to error block. $utils.appendError($ctx.result.body, "$ctx.result.statusCode") #end
  • Elija la pestaña Query (Consulta) y ejecute la consulta siguiente:

query GetUser{ getUser(id:1){ id username } }

Debe obtener la siguiente respuesta:

{ "data": { "getUser": { "id": "1", "username": "nadia" } } }
  • Elija la pestaña Schema (Esquema).

  • En el panel Data types (Tipos de datos) situado en la parte derecha, en Mutation (Mutación), busque el campo addUser y seleccione Attach (Asociar).

  • En Data source name (Nombre del origen de datos), elija HTTP.

  • En Configure the request mapping template (Configurar la plantilla de mapeo de solicitud), pegue el siguiente código:

{ "version": "2018-05-29", "method": "POST", "resourcePath": "/v1/users", "params":{ "headers":{ "Content-Type": "application/json", }, "body": $util.toJson($ctx.args.userInput) } }
  • En Configure the response mapping template (Configurar la plantilla de mapeo de respuesta), pegue el siguiente código:

## Raise a GraphQL field error in case of a datasource invocation error #if($ctx.error) $util.error($ctx.error.message, $ctx.error.type) #end ## if the response status code is not 200, then return an error. Else return the body ** #if($ctx.result.statusCode == 200) ## If response is 200, return the body. $ctx.result.body #else ## If response is not 200, append the response to error block. $utils.appendError($ctx.result.body, "$ctx.result.statusCode") #end
  • Elija la pestaña Query (Consulta) y ejecute la consulta siguiente:

mutation addUser{ addUser(userInput:{ id:"2", username:"shaggy" }){ id username } }

Debe obtener la siguiente respuesta:

{ "data": { "getUser": { "id": "2", "username": "shaggy" } } }

Invocación de servicios de AWS

Puede utilizar los solucionadores de HTTP para establecer una interfaz de API de GraphQL para los servicios de AWS. Las solicitudes HTTP a AWS deben firmarse con el proceso de Signature Version 4 para que AWS pueda identificar quién las envió. AWS AppSync calcula la firma en su nombre cuando asocia un rol de IAM al origen de datos HTTP.

Debe proporcionar dos componentes adicionales para invocar los servicios de AWS con solucionadores de HTTP:

  • Un rol de IAM con permisos para realizar una llamada a las API del servicio de AWS.

  • Configuración de la firma en el origen de datos

Por ejemplo, si desea realizar una llamada a la operación ListGraphqlApis con los solucionadores de HTTP, primero debe crear un rol de IAM que AWS AppSync asume con la siguiente política asociada:

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "appsync:ListGraphqlApis" ], "Effect": "Allow", "Resource": "*" } ] }

A continuación, cree el origen de datos HTTP para AWS AppSync. En este ejemplo, debe realizar una llamada a AWS AppSync en la región Oeste de EE. UU. (Oregón). Ajuste la siguiente configuración HTTP en un archivo denominado http.json, que incluye la región de la firma y el nombre del servicio:

{ "endpoint": "https://appsync.us-west-2.amazonaws.com/", "authorizationConfig": { "authorizationType": "AWS_IAM", "awsIamConfig": { "signingRegion": "us-west-2", "signingServiceName": "appsync" } } }

A continuación, utilice la AWS CLI para crear el origen de datos con un rol asociado de la siguiente forma:

aws appsync create-data-source --api-id <API-ID> \ --name AWSAppSync \ --type HTTP \ --http-config file:///http.json \ --service-role-arn <ROLE-ARN>

Cuando asocie un solucionador al campo del esquema, utilice la siguiente plantilla de mapeo de solicitudes para realizar una llamada a AWS AppSync:

{ "version": "2018-05-29", "method": "GET", "resourcePath": "/v1/apis" }

Cuando ejecuta una consulta de GraphQL para este origen de datos, AWS AppSync firma la solicitud mediante el rol que ha proporcionado e incluye la firma en la solicitud. La consulta devuelve una lista de API de GraphQL de AWS AppSync en su cuenta de dicha región de AWS.