기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
AWS::Serverless::GraphQLApi
AWS Serverless Application Model(AWS SAM) AWS::Serverless::GraphQLApi
리소스 유형을 사용하여 서버리스 애플리케이션용 AWS AppSync GraphQL API를 만들고 구성합니다.
AWS AppSync대한 자세한 내용은 AWS AppSync 개발자 안내서에서 AWS AppSync이란 무엇입니까?를 참조하세요.
구문
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
속성
ApiKeys
-
API 키가 필요한 GraphQL 작업을 수행하는 데 사용할 수 있는 고유 키를 생성합니다.
유형: APIKey
필수 항목 여부: 아니요
AWS CloudFormation호환성: 이 속성은 AWS SAM에 고유하며 AWS CloudFormation 동등한 속성이 없습니다.
Auth
-
GraphQLAPI에 대한 인증을 구성하십시오.
유형: 인증
필수 여부: 예
AWS CloudFormation호환성: 이 속성은 AWS SAM에 고유하며 AWS CloudFormation 동등한 속성이 없습니다.
Cache
-
CreateApiCache
작업의 입력.필수 항목 여부: 아니요
AWS CloudFormation호환성: 이 속성은 AWS::AppSync::ApiCache 리소스로 직접 전달됩니다.
DataSources
-
AWS AppSync 안에서 연결할 함수의 데이터 소스를 생성합니다. AWS SAM는 Amazon DynamoDB 및AWS Lambda 데이터 소스를 지원합니다.
유형: DataSource
필수 항목 여부: 예
AWS CloudFormation호환성: 이 속성은 AWS SAM에 고유하며 AWS CloudFormation 동등한 속성이 없습니다.
DomainName
-
GraphQLAPI에 대한 사용자 지정 도메인 이름.
필수 항목 여부: 아니요
AWS CloudFormation호환성: 이 속성은 AWS::AppSync::DomainName 리소스로 직접 전달됩니다. AWS SAM는 AWS::AppSync::DomainNameApiAssociation 리소스를 자동으로 생성합니다.
Functions
-
특정 작업을 수행하도록 GraphQL API의 함수를 구성합니다.
유형: 함수
필수 여부: 예
AWS CloudFormation호환성: 이 속성은 AWS SAM에 고유하며 AWS CloudFormation 동등한 속성이 없습니다.
Logging
-
GraphQL API에 대한 Amazon CloudWatch 로깅을 구성합니다.
이 속성을 지정하지 않으면 다음 값이 AWS SAM이
CloudWatchLogsRoleArn
를 생성하고 다음 값을 설정합니다.-
ExcludeVerboseContent: true
-
FieldLogLevel: ALL
로깅을 배제하려면 다음을 지정합니다.
Logging: false
유형: LogConfig
필수 항목 여부: 아니요
AWS CloudFormation호환성: 이 속성은
LogConfig
리소스의AWS::AppSync::GraphQLApi
속성으로 직접 전달됩니다. -
LogicalId
-
GraphQL API의 고유한 이름.
유형: 문자열
필수 항목 여부: 예
AWS CloudFormation호환성: 이 속성은
Name
리소스의AWS::AppSync::GraphQLApi
속성으로 직접 전달됩니다. Name
-
귀하의 GraphQLAPI의 이름입니다. 이 속성을 지정하여
LogicalId
값을 재정의합니다.유형: 문자열
필수 항목 여부: 아니요
AWS CloudFormation호환성: 이 속성은
Name
리소스의AWS::AppSync::GraphQLApi
속성으로 직접 전달됩니다. Resolvers
-
귀하의 GraphQL API 필드에 대한 해석기를 구성하십시오. AWS SAM는 JavaScript파이프라인 리졸버를 지원합니다.
유형: 해석기
필수 여부: 예
AWS CloudFormation호환성: 이 속성은 AWS SAM에 고유하며 AWS CloudFormation 동등한 속성이 없습니다.
SchemaInline
-
SDL 형식의 GraphQL 스키마 텍스트 표시.
유형: 문자열
필수 항목 여부: 조건부.
SchemaInline
또는SchemaUri
를 지정해야 합니다.AWS CloudFormation호환성: 이 속성은
Definition
리소스의AWS::AppSync::GraphQLSchema
속성으로 직접 전달됩니다. SchemaUri
-
스키마의 Amazon Simple Storage Service(S3) 버킷 URI 또는 로컬 폴더 경로
로컬 폴더 경로를 지정하는 경우 AWS CloudFormation은 배포하기 전에 먼저 파일을 Amazon S3에 업로드해야 합니다. AWS SAM CLI를 사용하여 이 프로세스를 용이하게 할 수 있습니다. 자세한 내용은 가 배포 시 로컬 파일을 AWS SAM 업로드하는 방법을 참조하십시오
유형: 문자열
필수 항목 여부: 조건부.
SchemaInline
또는SchemaUri
를 지정해야 합니다.AWS CloudFormation호환성: 이 속성은
DefinitionS3Location
리소스의AWS::AppSync::GraphQLSchema
속성으로 직접 전달됩니다. -
이 GraphQL API에 대한 태그(키-값 페어)입니다. 태그를 사용하여 리소스를 식별하고 범주화하십시오.
유형: 태그의 목록
필수 항목 여부: 아니요
AWS CloudFormation호환성: 이 속성은
Tag
리소스의AWS::AppSync::GraphQLApi
속성으로 직접 전달됩니다. XrayEnabled
-
이 리소스에 대해 AWSX-Ray 추적을 사용할지 여부를 표시하십시오.
유형: 부울
필수 항목 여부: 아니요
AWS CloudFormation호환성: 이 속성은
XrayEnabled
리소스의AWS::AppSync::GraphQLApi
속성으로 직접 전달됩니다.
예시
GraphQL APIDynamoDB 데이터 소스 사용
이 예시에서는 DynamoDB 테이블을 데이터 소스로 사용하는 GraphQL API를 생성합니다.
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; }
해석기 코드는 다음과 같습니다.
getPost.js
export function request(ctx) { return {}; } export function response(ctx) { return ctx.prev.result; }
GraphQLLambda 함수를 데이터 소스로 사용하는 API
이 예시에서는 Lambda 함수를 데이터 소스로 사용하는 GraphQL API를 생성합니다.
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 }
함수는 다음과 같습니다.
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; }