Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
AWS::Serverless::GraphQLApi
Gunakan tipe AWS::Serverless::GraphQLApi sumber daya AWS Serverless Application Model (AWS SAM) untuk membuat dan mengonfigurasi AWS AppSync GraphQL API untuk aplikasi tanpa server Anda.
Untuk mempelajari lebih lanjut tentang AWS AppSync, lihat Apa itu AWS AppSync? di Panduan AWS AppSync Pengembang.
Sintaks
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
Properti
ApiKeys-
Buat kunci unik yang dapat digunakan untuk melakukan GraphQL operasi yang membutuhkan kunci API.
Jenis: ApiKeys
Wajib: Tidak
AWS CloudFormation kompatibilitas: Properti ini unik AWS SAM dan tidak memiliki AWS CloudFormation padanan.
Auth-
Konfigurasikan otentikasi untuk Anda GraphQL API.
Jenis: Auth
Wajib: Ya
AWS CloudFormation kompatibilitas: Properti ini unik AWS SAM dan tidak memiliki AWS CloudFormation padanan.
Cache-
Input dari suatu
CreateApiCacheoperasi.Jenis: AWS::AppSync::ApiCache
Wajib: Tidak
AWS CloudFormation kompatibilitas: Properti ini diteruskan langsung ke AWS::AppSync::ApiCachesumber daya.
DataSources-
Buat sumber data untuk fungsi AWS AppSync yang terhubung ke. AWS SAM mendukung Amazon DynamoDB AWS Lambda dan sumber data.
Jenis: DataSource
Wajib: Ya
AWS CloudFormation kompatibilitas: Properti ini unik AWS SAM dan tidak memiliki AWS CloudFormation padanan.
DomainName-
Nama domain khusus untuk Anda GraphQL API.
Jenis: AWS::AppSync::DomainName
Wajib: Tidak
AWS CloudFormation kompatibilitas: Properti ini diteruskan langsung ke AWS::AppSync::DomainNamesumber daya. AWS SAM secara otomatis menghasilkan AWS::AppSync::DomainNameApiAssociationsumber daya.
Functions-
Konfigurasikan fungsi di GraphQL APIs untuk melakukan operasi tertentu.
Jenis: Fungsi
Wajib: Ya
AWS CloudFormation kompatibilitas: Properti ini unik AWS SAM dan tidak memiliki AWS CloudFormation padanan.
Logging-
Mengonfigurasi CloudWatch pencatatan Amazon untuk Anda GraphQL API.
Jika Anda tidak menentukan properti ini, AWS SAM akan menghasilkan
CloudWatchLogsRoleArndan menetapkan nilai-nilai berikut:-
ExcludeVerboseContent: true -
FieldLogLevel: ALL
Untuk memilih keluar dari logging, tentukan yang berikut ini:
Logging: falseJenis: LogConfig
Wajib: Tidak
AWS CloudFormation kompatibilitas: Properti ini diteruskan langsung ke
LogConfigpropertiAWS::AppSync::GraphQLApisumber daya. -
LogicalId-
Nama unik Anda GraphQL API.
Tipe: String
Wajib: Ya
AWS CloudFormation kompatibilitas: Properti ini diteruskan langsung ke
NamepropertiAWS::AppSync::GraphQLApisumber daya. Name-
Nama Anda GraphQL API. Tentukan properti ini untuk mengganti
LogicalIdnilainya.Tipe: String
Wajib: Tidak
AWS CloudFormation kompatibilitas: Properti ini diteruskan langsung ke
NamepropertiAWS::AppSync::GraphQLApisumber daya. Resolvers-
Konfigurasikan resolver untuk bidang Anda GraphQL API. AWS SAM mendukung JavaScript penyelesai pipa.
Jenis: Resolver
Wajib: Ya
AWS CloudFormation kompatibilitas: Properti ini unik AWS SAM dan tidak memiliki AWS CloudFormation padanan.
SchemaInline-
Representasi teks dari GraphQL skema di SDL format.
Tipe: String
Diperlukan: Bersyarat. Anda harus menentukan
SchemaInlineatauSchemaUri.AWS CloudFormation kompatibilitas: Properti ini diteruskan langsung ke
DefinitionpropertiAWS::AppSync::GraphQLSchemasumber daya. SchemaUri-
URI bucket Amazon Simple Storage Service (Amazon S3) skema atau path ke folder lokal.
Jika Anda menentukan jalur ke folder lokal, AWS CloudFormation mengharuskan file tersebut diunggah terlebih dahulu ke Amazon S3 sebelum penerapan. Anda dapat menggunakan AWS SAMÂ CLI untuk memfasilitasi proses ini. Untuk informasi selengkapnya, lihat Cara AWS SAM mengunggah file lokal saat penerapan.
Tipe: String
Diperlukan: Bersyarat. Anda harus menentukan
SchemaInlineatauSchemaUri.AWS CloudFormation kompatibilitas: Properti ini diteruskan langsung ke
DefinitionS3LocationpropertiAWS::AppSync::GraphQLSchemasumber daya. -
Tag (pasangan nilai kunci) untuk ini GraphQL API. Gunakan tag untuk mengidentifikasi dan mengkategorikan sumber daya.
Jenis: Daftar Tag
Wajib: Tidak
AWS CloudFormation kompatibilitas: Properti ini diteruskan langsung ke
TagpropertiAWS::AppSync::GraphQLApisumber daya. XrayEnabled-
Tunjukkan apakah akan menggunakan penelusuran AWS X-Ray untuk sumber daya ini.
Tipe: Boolean
Wajib: Tidak
AWS CloudFormation kompatibilitas: Properti ini diteruskan langsung ke
XrayEnabledpropertiAWS::AppSync::GraphQLApisumber daya.
Nilai Pengembalian
Untuk daftar nilai yang dikembalikan, lihat AWS::Serverless::GraphQLApi di Panduan Pengguna AWS CloudFormation.
Contoh
GraphQL API dengan sumber data DynamoDB
Dalam contoh ini, kita membuat GraphQL API yang menggunakan tabel DynamoDB sebagai sumber data.
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; }
Berikut adalah kode resolver kami:
getPost.js
export function request(ctx) { return {}; } export function response(ctx) { return ctx.prev.result; }
GraphQL API dengan fungsi Lambda sebagai sumber data
Dalam contoh ini, kita membuat GraphQL API yang menggunakan fungsi Lambda sebagai sumber data.
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 }
Berikut adalah fungsi kami:
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; }