AWS::Serverless::GraphQLApi - AWS Serverless Application Model

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

AWS::Serverless::GraphQLApi

Utilizzate il tipo di AWS::Serverless::GraphQLApi risorsa AWS Serverless Application Model (AWS SAM) per creare e configurare un' AWS AppSync GraphQLAPI per la vostra applicazione serverless.

Per ulteriori informazioni AWS AppSync, consulta What is AWS AppSync? nella Guida per gli AWS AppSync sviluppatori.

Sintassi

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

Proprietà

ApiKeys

Crea una chiave univoca che può essere utilizzata per eseguire GraphQL operazioni che richiedono una chiave API.

Tipo: ApiKeys

Required: No

AWS CloudFormation compatibilità: questa proprietà è unica AWS SAM e non ha un AWS CloudFormation equivalente.

Auth

Configura l'autenticazione per la tua GraphQL API.

Tipo: Autenticazione

Campo obbligatorio: sì

AWS CloudFormation compatibilità: questa proprietà è unica AWS SAM e non ha un AWS CloudFormation equivalente.

Cache

L'input di un'CreateApiCacheoperazione.

Tipo: AWS::AppSync::ApiCache

Required: No

AWS CloudFormation compatibilità: questa proprietà viene passata direttamente alla AWS::AppSync::ApiCacherisorsa.

DataSources

Crea sorgenti di dati per le funzioni AWS AppSync a cui connettersi. AWS SAM supporta Amazon DynamoDB e fonti di dati. AWS Lambda

Tipo: DataSource

Campo obbligatorio: sì

AWS CloudFormation compatibilità: questa proprietà è unica AWS SAM e non ha un AWS CloudFormation equivalente.

DomainName

Nome di dominio personalizzato per la tua GraphQL API.

Tipo: AWS::AppSync::DomainName

Required: No

AWS CloudFormation compatibilità: questa proprietà viene passata direttamente alla AWS::AppSync::DomainNamerisorsa. AWS SAM genera automaticamente la AWS::AppSync::DomainNameApiAssociationrisorsa.

Functions

Configura le funzioni nelle GraphQL API per eseguire determinate operazioni.

Tipo: Funzione

Campo obbligatorio: sì

AWS CloudFormation compatibilità: questa proprietà è unica AWS SAM e non ha un AWS CloudFormation equivalente.

Logging

Configura il CloudWatch logging di Amazon per la tua GraphQL API.

Se non specifichi questa proprietà, AWS SAM genererà CloudWatchLogsRoleArn e imposterà i seguenti valori:

  • ExcludeVerboseContent: true

  • FieldLogLevel: ALL

Per disattivare la registrazione, specificate quanto segue:

Logging: false

Tipo: LogConfig

Required: No

AWS CloudFormation compatibilità: questa proprietà viene passata direttamente alla LogConfig proprietà di una AWS::AppSync::GraphQLApi risorsa.

LogicalId

Il nome univoco della tua GraphQL API.

Tipo: stringa

Campo obbligatorio: sì

AWS CloudFormation compatibilità: questa proprietà viene passata direttamente alla Name proprietà di una AWS::AppSync::GraphQLApi risorsa.

Name

Il nome della tua GraphQL API. Specificate questa proprietà per sovrascrivere il LogicalId valore.

Tipo: stringa

Required: No

AWS CloudFormation compatibilità: questa proprietà viene passata direttamente alla Name proprietà di una AWS::AppSync::GraphQLApi risorsa.

Resolvers

Configura i resolver per i campi della tua API. GraphQL AWS SAM supporta i resolver JavaScript per pipeline.

Tipo: Resolver

Campo obbligatorio: sì

AWS CloudFormation compatibilità: questa proprietà è unica AWS SAM e non ha un AWS CloudFormation equivalente.

SchemaInline

La rappresentazione testuale di uno GraphQL schema in SDL formato.

Tipo: stringa

Obbligatorio: condizionale. È necessario specificare SchemaInline oSchemaUri.

AWS CloudFormation compatibilità: questa proprietà viene passata direttamente alla Definition proprietà di una AWS::AppSync::GraphQLSchema risorsa.

SchemaUri

L'URI del bucket Amazon Simple Storage Service (Amazon S3) S3 dello schema o il percorso di una cartella locale.

Se specifichi un percorso verso una cartella locale, è AWS CloudFormation necessario che il file venga prima caricato su Amazon S3 prima della distribuzione. Puoi usare il AWS SAMCLI per facilitare questo processo. Per ulteriori informazioni, consulta In che modo AWS SAM carica file locali al momento della distribuzione.

Tipo: stringa

Obbligatorio: condizionale. È necessario specificare SchemaInline oSchemaUri.

AWS CloudFormation compatibilità: questa proprietà viene passata direttamente alla DefinitionS3Location proprietà di una AWS::AppSync::GraphQLSchema risorsa.

Tags

Tag (coppie chiave-valore) per questa GraphQL API. Usa i tag per identificare e classificare le risorse.

Tipo: elenco di Tag

Required: No

AWS CloudFormation compatibilità: questa proprietà viene passata direttamente alla Tag proprietà di una AWS::AppSync::GraphQLApi risorsa.

XrayEnabled

Indicare se utilizzare il tracciamento AWS X-Ray per questa risorsa.

Tipo: Booleano

Required: No

AWS CloudFormation compatibilità: questa proprietà viene passata direttamente alla XrayEnabled proprietà di una AWS::AppSync::GraphQLApi risorsa.

Esempi

GraphQL APIcon origine dati DynamoDB

In questo esempio, creiamo un'GraphQLAPI che utilizza una tabella DynamoDB come origine dati.

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! }

modello.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; }

Ecco il nostro codice resolver:

getPost.js

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

GraphQLAPI con una funzione Lambda come origine dati

In questo esempio, creiamo un'GraphQLAPI che utilizza una funzione Lambda come origine dati.

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 }

Ecco le nostre funzioni:

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; }