As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
AWS::Serverless::GraphQLApi
Use o tipo de AWS::Serverless::GraphQLApi
recurso AWS Serverless Application Model (AWS SAM) para criar e configurar uma AWS AppSync GraphQL API para seu aplicativo sem servidor.
Para saber mais AWS AppSync, consulte O que é AWS AppSync? no Guia do AWS AppSync desenvolvedor.
Sintaxe
YAML
LogicalId
: Type: AWS::Serverless::GraphQLApi Properties: ApiKeys:ApiKeys
Auth:Auth
Cache:AWS::AppSync::ApiCache
DataSources:DataSource
DomainName:AWS::AppSync::DomainName
Functions:Function
Logging:LogConfig
Name:String
Resolvers:Resolver
SchemaInline:String
SchemaUri:String
Tags:- Tag
XrayEnabled:Boolean
Propriedades
ApiKeys
-
Crie uma chave exclusiva que possa ser usada para realizar operações GraphQL que exigem uma chave de API.
Tipo: ApiKeys
Obrigatório: não
AWS CloudFormation compatibilidade: essa propriedade é exclusiva AWS SAM e não tem AWS CloudFormation equivalente.
Auth
-
Configure a autenticação para sua API GraphQL.
Tipo: Auth
Obrigatório: Sim
AWS CloudFormation compatibilidade: essa propriedade é exclusiva AWS SAM e não tem AWS CloudFormation equivalente.
Cache
-
A entrada de uma operação
CreateApiCache
.Tipo: AWS::AppSync::ApiCache
Obrigatório: não
AWS CloudFormation compatibilidade: essa propriedade é passada diretamente para o AWS::AppSync::ApiCacherecurso.
DataSources
-
Crie fontes de dados para as funções AWS AppSync às quais se conectar. AWS SAM oferece suporte ao Amazon DynamoDB e às fontes de dados AWS Lambda .
Tipo: DataSource
Obrigatório: Sim
AWS CloudFormation compatibilidade: essa propriedade é exclusiva AWS SAM e não tem AWS CloudFormation equivalente.
DomainName
-
O nome de domínio personalizado para a sua API GraphQL.
Tipo: AWS::AppSync::DomainName
Obrigatório: não
AWS CloudFormation compatibilidade: essa propriedade é passada diretamente para o AWS::AppSync::DomainNamerecurso. AWS SAM gera automaticamente o AWS::AppSync::DomainNameApiAssociationrecurso.
Functions
-
Configure funções nos GraphQL APIs para realizar determinadas operações.
Tipo: Função
Obrigatório: Sim
AWS CloudFormation compatibilidade: essa propriedade é exclusiva AWS SAM e não tem AWS CloudFormation equivalente.
Logging
-
Configura o CloudWatch registro da Amazon para sua GraphQL API.
Se você não especificar essa propriedade, AWS SAM gerará
CloudWatchLogsRoleArn
e definirá os seguintes valores:-
ExcludeVerboseContent: true
-
FieldLogLevel: ALL
Para cancelar o registro, especifique o seguinte:
Logging: false
Tipo: LogConfig
Obrigatório: não
AWS CloudFormation compatibilidade: essa propriedade é passada diretamente para a
LogConfig
propriedade de umAWS::AppSync::GraphQLApi
recurso. -
LogicalId
-
O nome exclusivo da sua API GraphQL.
Tipo: string
Obrigatório: Sim
AWS CloudFormation compatibilidade: essa propriedade é passada diretamente para a
Name
propriedade de umAWS::AppSync::GraphQLApi
recurso. Name
-
O nome da sua API GraphQL. Especifique essa propriedade para substituir o valor
LogicalId
.Tipo: string
Obrigatório: não
AWS CloudFormation compatibilidade: essa propriedade é passada diretamente para a
Name
propriedade de umAWS::AppSync::GraphQLApi
recurso. Resolvers
-
Configure resolvedores para os campos da sua APIGraphQL. O AWS SAM suporta JavaScript resolvedores de pipeline.
Tipo: Resolver
Obrigatório: Sim
AWS CloudFormation compatibilidade: essa propriedade é exclusiva AWS SAM e não tem AWS CloudFormation equivalente.
SchemaInline
-
A representação de texto de um esquema GraphQL no formato SDL.
Tipo: string
Obrigatório: condicional. Você deve especificar o
SchemaInline
ou oSchemaUri
.AWS CloudFormation compatibilidade: essa propriedade é passada diretamente para a
Definition
propriedade de umAWS::AppSync::GraphQLSchema
recurso. SchemaUri
-
O URI ou o caminho do bucket do Amazon Simple Storage Service (Amazon S3) do esquema para uma pasta local.
Se você especificar um caminho para uma pasta local, AWS CloudFormation exigirá que o arquivo seja primeiro carregado no Amazon S3 antes da implantação. Você pode usar o AWS SAMCLI para facilitar esse processo. Para obter mais informações, consulte Como AWS SAM carrega arquivos locais na implantação.
Tipo: string
Obrigatório: condicional. Você deve especificar o
SchemaInline
ou oSchemaUri
.AWS CloudFormation compatibilidade: essa propriedade é passada diretamente para a
DefinitionS3Location
propriedade de umAWS::AppSync::GraphQLSchema
recurso. -
Tags (pares de chave-valor) para essa API GraphQL. Use as tags para identificar e categorizar os recursos.
Tipo: lista de Tag
Obrigatório: não
AWS CloudFormation compatibilidade: essa propriedade é passada diretamente para a
Tag
propriedade de umAWS::AppSync::GraphQLApi
recurso. XrayEnabled
-
Indique se o AWS rastreamento de X-Ray deve ser usado para esse recurso.
Tipo: booliano
Obrigatório: não
AWS CloudFormation compatibilidade: essa propriedade é passada diretamente para a
XrayEnabled
propriedade de umAWS::AppSync::GraphQLApi
recurso.
Exemplos
GraphQL API com a fonte de dados do DynamoDB
Neste exemplo, criamos uma API GraphQL que usa uma tabela do DynamoDB como fonte de dados.
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), }; }
preprocessPostItem.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; }
Aqui está nosso código de resolução:
getPost.js
export function request(ctx) { return {}; } export function response(ctx) { return ctx.prev.result; }
API GraphQL com uma função do Lambda como fonte de dados
Neste exemplo, criamos uma API GraphQL que usa uma função do Lambda como fonte de dados.
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 }
Aqui estão nossas funções:
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; }