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.
AWS::Serverless:: API GraphQL
Usa el tipo de AWS::Serverless::GraphQLApi recurso AWS Serverless Application Model (AWS SAM) para crear y configurar una AWS AppSync GraphQL API para tu aplicación sin servidor.
Para obtener más información AWS AppSync, consulte ¿Qué es? AWS AppSync en la Guía para AWS AppSync desarrolladores.
Sintaxis
YAML
LogicalId: Type: AWS::Serverless::GraphQLApi Properties: ApiKeys:ApiKeysAuth:AuthCache:AWS::AppSync::ApiCacheDataSources:DataSourceDomainName:AWS::AppSync::DomainNameFunctions:FunctionLogging:LogConfigName:StringResolvers:ResolverSchemaInline:StringSchemaUri:StringTags:- TagXrayEnabled:Boolean
Propiedades
ApiKeys-
Cree una clave única que se pueda utilizar para realizar operaciones en GraphQL que requieran una clave de API.
Tipo: ApiKeys
Obligatorio: no
CloudFormation compatibilidad: esta propiedad es exclusiva AWS SAM y no tiene un equivalente. CloudFormation
Auth-
Configure la autenticación para tu GraphQL API.
Tipo: Auth
Obligatorio: sí
CloudFormation compatibilidad: esta propiedad es exclusiva de AWS SAM y no tiene un CloudFormation equivalente.
Cache-
La entrada de una operación
CreateApiCache.Tipo: AWS::AppSync:: ApiCache
Obligatorio: no
CloudFormation compatibilidad: esta propiedad se pasa directamente al ApiCache recurso AWS::AppSync::.
DataSources-
Cree fuentes de datos para las funciones AWS AppSync a las que conectarse. AWS SAM es compatible con Amazon AWS Lambda DynamoDB y las fuentes de datos.
Tipo: DataSource
Obligatorio: sí
CloudFormation compatibilidad: esta propiedad es exclusiva de AWS SAM y no tiene un CloudFormation equivalente.
DomainName-
Es el nombre de dominio personalizado para la API GraphQL.
Tipo: AWS::AppSync:: DomainName
Obligatorio: no
CloudFormation compatibilidad: esta propiedad se pasa directamente al DomainName recurso AWS::AppSync::. AWS SAM genera automáticamente el DomainNameApiAssociation recurso AWS::AppSync::.
Functions-
Configure funciones en las API de GraphQL para realizar ciertas operaciones.
Tipo : Función
Obligatorio: sí
CloudFormation compatibilidad: esta propiedad es exclusiva AWS SAM y no tiene un CloudFormation equivalente.
Logging-
Configura el CloudWatch registro de Amazon para tu GraphQL API.
Si no especificas esta propiedad, AWS SAM generará
CloudWatchLogsRoleArny establecerá los siguientes valores:-
ExcludeVerboseContent: true -
FieldLogLevel: ALL
Para excluirse del registro, especifica lo siguiente:
Logging: falseTipo: LogConfig
Obligatorio: no
CloudFormation compatibilidad: esta propiedad se pasa directamente a la
LogConfigpropiedad de unAWS::AppSync::GraphQLApirecurso. -
LogicalId-
El nombre exclusivo de la API GraphQL de.
Tipo: cadena
Obligatorio: sí
CloudFormation compatibilidad: esta propiedad se pasa directamente a la
Namepropiedad de unAWS::AppSync::GraphQLApirecurso. Name-
El nombre de la API GraphQL. Especifica esta propiedad para anular el valor
LogicalId.Tipo: cadena
Obligatorio: no
CloudFormation compatibilidad: esta propiedad se pasa directamente a la
Namepropiedad de unAWS::AppSync::GraphQLApirecurso. Resolvers-
Configure los solucionadores para los campos de la API GraphQL. AWS SAM admite solucionadores de JavaScript canalizaciones.
Obligatorio: sí
CloudFormation compatibilidad: esta propiedad es exclusiva AWS SAM y no tiene un CloudFormation equivalente.
SchemaInline-
La representación de texto de un esquema de GraphQL en formato SDL.
Tipo: cadena
Obligatorio: condicional. Debe especificar
SchemaInlineoSchemaUri.CloudFormation compatibilidad: esta propiedad se pasa directamente a la
Definitionpropiedad de unAWS::AppSync::GraphQLSchemarecurso. SchemaUri-
El URI del bucket de Amazon Simple Storage Service (Amazon S3) o la ruta de acceso a un directorio local.
Si especifica una ruta a una carpeta local, CloudFormation requiere que el archivo se cargue primero en Amazon S3 antes de la implementación. Puedes utilizar la AWS SAM CLI para facilitar este proceso. Para obtener más información, consulta Cómo AWS SAM carga archivos locales en el momento de la implementación.
Tipo: cadena
Obligatorio: condicional. Debe especificar
SchemaInlineoSchemaUri.CloudFormation compatibilidad: esta propiedad se transfiere directamente a la
DefinitionS3Locationpropiedad de unAWS::AppSync::GraphQLSchemarecurso. -
Etiquetas (pares de clave-valor) de esta API GraphQL. Utiliza etiquetas para identificar y clasificar los recursos.
Tipo: lista de etiqueta
Obligatorio: no
CloudFormation compatibilidad: esta propiedad se pasa directamente a la
Tagpropiedad de unAWS::AppSync::GraphQLApirecurso. XrayEnabled-
Indique si desea utilizar el AWS X-Ray rastreo para este recurso.
Tipo: Booleano
Obligatorio: no
CloudFormation compatibilidad: esta propiedad se pasa directamente a la
XrayEnabledpropiedad de unAWS::AppSync::GraphQLApirecurso.
valores devueltos
Para obtener una lista de los valores devueltos, consulte AWS::Serverless::GraphQLApi en la Guía del usuario de CloudFormation.
Ejemplos
API GraphQL con fuente de datos de DynamoDB
En este ejemplo, creamos una API GraphQL que usa una tabla de DynamoDB como origen de datos.
schema.graphql
schema { query: Query mutation: Mutation } type Query { getPost(id: String!): Post } type Mutation { addPost(author: String!, title: String!, content: String!): Post! } type Post { id: String! author: String title: String content: String ups: Int! downs: Int! version: Int! }
template.yaml
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources: DynamoDBPostsTable: Type: AWS::Serverless::SimpleTable MyGraphQLAPI: Type: AWS::Serverless::GraphQLApi Properties: SchemaUri: ./sam_graphql_api/schema.graphql Auth: Type: AWS_IAM DataSources: DynamoDb: PostsDataSource: TableName: !Ref DynamoDBPostsTable TableArn: !GetAtt DynamoDBPostsTable.Arn Functions: preprocessPostItem: Runtime: Name: APPSYNC_JS Version: 1.0.0 DataSource: NONE CodeUri: ./sam_graphql_api/preprocessPostItem.js createPostItem: Runtime: Name: APPSYNC_JS Version: "1.0.0" DataSource: PostsDataSource CodeUri: ./sam_graphql_api/createPostItem.js getPostFromTable: Runtime: Name: APPSYNC_JS Version: "1.0.0" DataSource: PostsDataSource CodeUri: ./sam_graphql_api/getPostFromTable.js Resolvers: Mutation: addPost: Runtime: Name: APPSYNC_JS Version: "1.0.0" Pipeline: - preprocessPostItem - createPostItem Query: getPost: CodeUri: ./sam_graphql_api/getPost.js Runtime: Name: APPSYNC_JS Version: "1.0.0" Pipeline: - getPostFromTable
createPostItem.js
import { util } from "@aws-appsync/utils"; export function request(ctx) { const { key, values } = ctx.prev.result; return { operation: "PutItem", key: util.dynamodb.toMapValues(key), attributeValues: util.dynamodb.toMapValues(values), }; } export function response(ctx) { return ctx.result; }
getPostFromTable.js
import { util } from "@aws-appsync/utils"; export function request(ctx) { return dynamoDBGetItemRequest({ id: ctx.args.id }); } export function response(ctx) { return ctx.result; } /** * A helper function to get a DynamoDB item */ function dynamoDBGetItemRequest(key) { return { operation: "GetItem", key: util.dynamodb.toMapValues(key), }; }
preproceso PostItem.js
import { util } from "@aws-appsync/utils"; export function request(ctx) { const id = util.autoId(); const { ...values } = ctx.args; values.ups = 1; values.downs = 0; values.version = 1; return { payload: { key: { id }, values: values } }; } export function response(ctx) { return ctx.result; }
Este es nuestro código de resolución:
getPost.js
export function request(ctx) { return {}; } export function response(ctx) { return ctx.prev.result; }
GraphQL API con una función de eventos Lambda como fuente de datos
En este ejemplo, creamos una GraphQL API que utiliza una función de eventos de Lambda como fuente de datos.
template.yaml
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources: MyLambdaFunction: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs20.x CodeUri: ./lambda MyGraphQLAPI: Type: AWS::Serverless::GraphQLApi Properties: Name: MyApi SchemaUri: ./gql/schema.gql Auth: Type: API_KEY ApiKeys: MyApiKey: Description: my api key DataSources: Lambda: MyLambdaDataSource: FunctionArn: !GetAtt MyLambdaFunction.Arn Functions: lambdaInvoker: Runtime: Name: APPSYNC_JS Version: 1.0.0 DataSource: MyLambdaDataSource CodeUri: ./gql/invoker.js Resolvers: Mutation: addPost: Runtime: Name: APPSYNC_JS Version: 1.0.0 Pipeline: - lambdaInvoker Query: getPost: Runtime: Name: APPSYNC_JS Version: 1.0.0 Pipeline: - lambdaInvoker Outputs: MyGraphQLAPI: Description: AppSync API Value: !GetAtt MyGraphQLAPI.GraphQLUrl MyGraphQLAPIMyApiKey: Description: API Key for authentication Value: !GetAtt MyGraphQLAPIMyApiKey.ApiKey
schema.graphql
schema { query: Query mutation: Mutation } type Query { getPost(id: ID!): Post } type Mutation { addPost(id: ID!, author: String!, title: String, content: String): Post! } type Post { id: ID! author: String! title: String content: String ups: Int downs: Int }
Estas son nuestras funciones:
lambda/index.js
exports.handler = async (event) => { console.log("Received event {}", JSON.stringify(event, 3)); const posts = { 1: { id: "1", title: "First book", author: "Author1", content: "Book 1 has this content", ups: "100", downs: "10", }, }; console.log("Got an Invoke Request."); let result; switch (event.field) { case "getPost": return posts[event.arguments.id]; case "addPost": // return the arguments back return event.arguments; default: throw new Error("Unknown field, unable to resolve " + event.field); } };
invoker.js
import { util } from "@aws-appsync/utils"; export function request(ctx) { const { source, args } = ctx; return { operation: "Invoke", payload: { field: ctx.info.fieldName, arguments: args, source }, }; } export function response(ctx) { return ctx.result; }