View a markdown version of this page

AWS::Serverless: :API GraphQL - AWS Serverless Application Model

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: :API GraphQL

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.

Digite: ApiKeys

Obrigatório: não

CloudFormation compatibilidade: essa propriedade é exclusiva AWS SAM e não tem CloudFormation equivalente.

Auth

Configure a autenticação para sua API GraphQL.

Tipo: Auth

Obrigatório: sim

CloudFormation compatibilidade: essa propriedade é exclusiva AWS SAM e não tem CloudFormation equivalente.

Cache

A entrada de uma operação CreateApiCache.

Tipo: AWS::AppSync:: ApiCache

Obrigatório: não

CloudFormation compatibilidade: essa propriedade é passada diretamente para o ApiCache recurso AWS::AppSync::.

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 .

Digite: DataSource

Obrigatório: Sim

CloudFormation compatibilidade: essa propriedade é exclusiva AWS SAM e não tem CloudFormation equivalente.

DomainName

O nome de domínio personalizado para a sua API GraphQL.

Tipo: AWS::AppSync:: DomainName

Obrigatório: não

CloudFormation compatibilidade: essa propriedade é passada diretamente para o DomainName recurso AWS::AppSync::. AWS SAM gera automaticamente o DomainNameApiAssociation recurso AWS::AppSync::.

Functions

Configure funções nos GraphQL APIs para realizar determinadas operações.

Tipo: Função

Obrigatório: Sim

CloudFormation compatibilidade: essa propriedade é exclusiva AWS SAM e não tem 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

Digite: LogConfig

Obrigatório: não

CloudFormation compatibilidade: essa propriedade é passada diretamente para a LogConfig propriedade de um AWS::AppSync::GraphQLApi recurso.

LogicalId

O nome exclusivo da sua API GraphQL.

Tipo: string

Obrigatório: Sim

CloudFormation compatibilidade: essa propriedade é passada diretamente para a Name propriedade de um AWS::AppSync::GraphQLApi recurso.

Name

O nome da sua API GraphQL. Especifique essa propriedade para substituir o valor LogicalId.

Tipo: string

Obrigatório: não

CloudFormation compatibilidade: essa propriedade é passada diretamente para a Name propriedade de um AWS::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

CloudFormation compatibilidade: essa propriedade é exclusiva AWS SAM e não tem 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 o SchemaUri.

CloudFormation compatibilidade: essa propriedade é passada diretamente para a Definition propriedade de um AWS::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, 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 o SchemaUri.

CloudFormation compatibilidade: essa propriedade é passada diretamente para a DefinitionS3Location propriedade de um AWS::AppSync::GraphQLSchema recurso.

Tags

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

CloudFormation compatibilidade: essa propriedade é passada diretamente para a Tag propriedade de um AWS::AppSync::GraphQLApi recurso.

XrayEnabled

Indique se o AWS X-Ray rastreamento deve ser usado para esse recurso.

Tipo: booliano

Obrigatório: não

CloudFormation compatibilidade: essa propriedade é passada diretamente para a XrayEnabled propriedade de um AWS::AppSync::GraphQLApi recurso.

Valores de retorno

Para obter uma lista dos valores de retorno, consulte o AWS::Serverless::GraphQLApi no Guia do usuário do CloudFormation.

Exemplos

API DO GraphQL 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), }; }

pré-processar 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; }

Aqui está nosso código de resolução:

getPost.js

export function request(ctx) { return {}; } export function response(ctx) { return ctx.prev.result; }

GraphQL API com uma função de evento Lambda como fonte de dados

Neste exemplo, criamos uma GraphQL API que usa uma função de evento 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; }