

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# AWS::Serverless::GraphQLApi
<a name="sam-resource-graphqlapi"></a>

 AWS Serverless Application Model (AWS SAM) `AWS::Serverless::GraphQLApi` 리소스 유형을 사용하여 서버리스 애플리케이션에 대한 API를 AWS AppSync GraphQL 생성하고 구성합니다.

자세한 내용은 *AWS AppSync 개발자 안내서*의 [란 무엇입니까 AWS AppSync?](https://docs.aws.amazon.com/appsync/latest/devguide/what-is-appsync.html)를 AWS AppSync참조하세요.

## 구문
<a name="sam-resource-graphqlapi-syntax"></a>

### YAML
<a name="sam-resource-graphqlapi-syntax-yaml"></a>

```
LogicalId:
  Type: AWS::Serverless::GraphQLApi
  Properties:
    ApiKeys: ApiKeys
    Auth: Auth
    Cache: [AWS::AppSync::ApiCache](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-apicache.html)
    DataSources: DataSource
    DomainName: [AWS::AppSync::DomainName](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-domainname.html)
    Functions: Function
    Logging: [LogConfig](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-logconfig.html)
    Name: String
    Resolvers: Resolver
    SchemaInline: String
    SchemaUri: String
    Tags:
    - [Tag](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html)
    XrayEnabled: Boolean
```

## 속성
<a name="sam-resource-graphqlapi-properties"></a>

`ApiKeys`  <a name="sam-graphqlapi-apikeys"></a>
API 키가 필요한 GraphQL 작업을 수행하는 데 사용할 수 있는 고유 키를 생성합니다.  
*유형*: [APIKey](sam-property-graphqlapi-apikeys.md)  
*필수 항목 여부*: 아니요  
*CloudFormation 호환성*:이 속성은에 고유 AWS SAM 하며 CloudFormation 동등한 속성이 없습니다.

`Auth`  <a name="sam-graphqlapi-auth"></a>
GraphQLAPI에 대한 인증을 구성하십시오.  
*유형*: [인증](sam-property-graphqlapi-auth.md)  
*필수 여부*: 예  
*CloudFormation 호환성*:이 속성은에 고유 AWS SAM 하며 CloudFormation 동등한 속성이 없습니다.

`Cache`  <a name="sam-graphqlapi-cache"></a>
`CreateApiCache` 작업의 입력.  
*유형*: [AWS::AppSync::ApiCache](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-apicache.html)  
*필수 항목 여부*: 아니요  
*CloudFormation 호환성*:이 속성은 [AWS::AppSync::ApiCache](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-apicache.html) 리소스로 직접 전달됩니다.

`DataSources`  <a name="sam-graphqlapi-datasources"></a>
에서 연결할 함수 AWS AppSync 에 대한 데이터 소스를 생성합니다.는 Amazon DynamoDB 및 AWS Lambda 데이터 소스를 AWS SAM 지원합니다.  
*유형*: [DataSource](sam-property-graphqlapi-datasource.md)  
*필수 항목 여부*: 예  
*CloudFormation 호환성*:이 속성은에 고유 AWS SAM 하며 CloudFormation 동등한 속성이 없습니다.

`DomainName`  <a name="sam-graphqlapi-domainname"></a>
GraphQLAPI에 대한 사용자 지정 도메인 이름.  
*유형*: [AWS::AppSync::DomainName](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-domainname.html)  
*필수 항목 여부*: 아니요  
*CloudFormation 호환성*:이 속성은 [AWS::AppSync::DomainName](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-domainname.html) 리소스에 직접 전달됩니다. AWS SAM 는 [AWS::AppSync::DomainNameApiAssociation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-domainnameapiassociation.html) 리소스를 자동으로 생성합니다.

`Functions`  <a name="sam-graphqlapi-functions"></a>
특정 작업을 수행하도록 GraphQL API의 함수를 구성합니다.  
*유형*[: 함수](sam-property-graphqlapi-function.md)  
*필수 여부*: 예  
*CloudFormation 호환성*:이 속성은에 고유 AWS SAM 하며 CloudFormation 동등한 속성이 없습니다.

`Logging`  <a name="sam-graphqlapi-logging"></a>
GraphQL API에 대한 Amazon CloudWatch 로깅을 구성합니다.   
이 속성을 지정하지 않으면 AWS SAM 가 다음 값을 `CloudWatchLogsRoleArn` 생성하고 설정합니다.  
+ `ExcludeVerboseContent: true`
+ `FieldLogLevel: ALL`
로깅을 배제하려면 다음을 지정합니다.  

```
Logging: false
```
*유형*: [LogConfig](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-logconfig.html)  
*필수 항목 여부*: 아니요  
*CloudFormation 호환성*:이 속성은 `AWS::AppSync::GraphQLApi` 리소스의 `[LogConfig](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html#cfn-appsync-graphqlapi-logconfig)` 속성으로 직접 전달됩니다.

`LogicalId`  <a name="sam-graphqlapi-logicalid"></a>
GraphQL API의 고유한 이름.  
*유형*: 문자열  
*필수 항목 여부:* 예  
*CloudFormation 호환성*:이 속성은 `AWS::AppSync::GraphQLApi` 리소스의 `[Name](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html#cfn-appsync-graphqlapi-name)` 속성으로 직접 전달됩니다.

`Name`  <a name="sam-graphqlapi-name"></a>
귀하의 GraphQLAPI의 이름입니다. 이 속성을 지정하여 `LogicalId` 값을 재정의합니다.  
*유형*: 문자열  
*필수 항목 여부*: 아니요  
*CloudFormation 호환성*:이 속성은 `AWS::AppSync::GraphQLApi` 리소스의 `[Name](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html#cfn-appsync-graphqlapi-name)` 속성으로 직접 전달됩니다.

`Resolvers`  <a name="sam-graphqlapi-resolvers"></a>
귀하의 GraphQL API 필드에 대한 해석기를 구성하십시오. AWS SAM 는 [JavaScript파이프라인](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-overview-js.html#anatomy-of-a-pipeline-resolver-js) 리졸버를 지원합니다.  
*유형:* [해석기](sam-property-graphqlapi-resolver.md)  
*필수 여부*: 예  
*CloudFormation 호환성*:이 속성은에 고유 AWS SAM 하며 CloudFormation 동등한 속성이 없습니다.

`SchemaInline`  <a name="sam-graphqlapi-schemainline"></a>
SDL 형식의 GraphQL 스키마 텍스트 표시.  
*유형*: 문자열  
*필수 항목 여부*: 조건부. `SchemaInline` 또는`SchemaUri` 를 지정해야 합니다.  
*CloudFormation 호환성*:이 속성은 `AWS::AppSync::GraphQLSchema` 리소스의 `[Definition](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlschema.html#cfn-appsync-graphqlschema-definition)` 속성으로 직접 전달됩니다.

`SchemaUri`  <a name="sam-graphqlapi-schemauri"></a>
스키마의 Amazon Simple Storage Service(S3) 버킷 URI 또는 로컬 폴더 경로  
로컬 폴더의 경로를 지정하는 경우 배포 전에 파일을 먼저 Amazon S3에 업로드해야 CloudFormation 합니다. AWS SAMCLI를 사용하여 이 프로세스를 용이하게 할 수 있습니다. 자세한 내용은 [가 배포 시 로컬 파일을 AWS SAM 업로드하는 방법](deploy-upload-local-files.md)을 참조하십시오  
*유형*: 문자열  
*필수 항목 여부*: 조건부. `SchemaInline` 또는`SchemaUri` 를 지정해야 합니다.  
*CloudFormation 호환성*:이 속성은 `AWS::AppSync::GraphQLSchema` 리소스의 `[DefinitionS3Location](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlschema.html#cfn-appsync-graphqlschema-definitions3location)` 속성으로 직접 전달됩니다.

`Tags`  <a name="sam-graphqlapi-tags"></a>
이 GraphQL API에 대한 태그(키-값 페어)입니다. 태그를 사용하여 리소스를 식별하고 범주화하십시오.  
*유형:* [태그](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html)의 목록  
*필수 항목 여부*: 아니요  
*CloudFormation 호환성*:이 속성은 `AWS::AppSync::GraphQLApi` 리소스의 `[Tag](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html#cfn-appsync-graphqlapi-tags)` 속성으로 직접 전달됩니다.

`XrayEnabled`  <a name="sam-graphqlapi-xrayenabled"></a>
이 리소스에 대해 [AWS X-Ray 추적](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray.html)을 사용할지 여부를 표시하십시오.  
*유형*: 부울  
*필수 항목 여부*: 아니요  
*CloudFormation 호환성*:이 속성은 `AWS::AppSync::GraphQLApi` 리소스의 `[XrayEnabled](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html#cfn-appsync-graphqlapi-xrayenabled)` 속성으로 직접 전달됩니다.

## 반환 값
<a name="sam-resource-graphqlapi-return-values"></a>

반환 값 목록은 [CloudFormation 사용 설명서](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)의 [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html#aws-resource-appsync-graphqlapi-return-values.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html#aws-resource-appsync-graphqlapi-return-values.html)을(를) 참조하세요.

## 예제
<a name="sam-resource-graphqlapi-examples"></a>

### GraphQL APIDynamoDB 데이터 소스 사용
<a name="sam-resource-graphqlapi-examples-example1"></a>

이 예시에서는 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
<a name="sam-resource-graphqlapi-examples-example2"></a>

이 예시에서는 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;
}
```