

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

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

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?](https://docs.aws.amazon.com/appsync/latest/devguide/what-is-appsync.html) di *Panduan AWS AppSync Pengembang*.

## Sintaksis
<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
```

## Sifat-sifat
<a name="sam-resource-graphqlapi-properties"></a>

`ApiKeys`  <a name="sam-graphqlapi-apikeys"></a>
Buat kunci unik yang dapat digunakan untuk melakukan GraphQL operasi yang membutuhkan kunci API.  
*Jenis*: [ApiKeys](sam-property-graphqlapi-apikeys.md)  
*Wajib*: Tidak  
*CloudFormation kompatibilitas*: Properti ini unik AWS SAM dan tidak memiliki CloudFormation padanan.

`Auth`  <a name="sam-graphqlapi-auth"></a>
Konfigurasikan autentikasi untuk GraphQL API Anda.  
*Jenis*: [Auth](sam-property-graphqlapi-auth.md)  
*Wajib*: Ya  
*CloudFormation kompatibilitas*: Properti ini unik AWS SAM dan tidak memiliki CloudFormation padanan.

`Cache`  <a name="sam-graphqlapi-cache"></a>
Input dari suatu `CreateApiCache` operasi.  
*Jenis*: [AWS::AppSync::ApiCache](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-apicache.html)  
*Wajib*: Tidak  
*CloudFormation kompatibilitas*: Properti ini diteruskan langsung ke [AWS::AppSync::ApiCache](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-apicache.html)sumber daya.

`DataSources`  <a name="sam-graphqlapi-datasources"></a>
Buat sumber data untuk fungsi AWS AppSync yang terhubung ke. AWS SAM mendukung Amazon DynamoDB AWS Lambda dan sumber data.  
*Jenis*: [DataSource](sam-property-graphqlapi-datasource.md)  
*Wajib*: Ya  
*CloudFormation kompatibilitas*: Properti ini unik AWS SAM dan tidak memiliki CloudFormation padanan.

`DomainName`  <a name="sam-graphqlapi-domainname"></a>
Nama domain khusus untuk GraphQL API Anda.  
*Jenis*: [AWS::AppSync::DomainName](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-domainname.html)  
*Wajib*: Tidak  
*CloudFormation kompatibilitas*: Properti ini diteruskan langsung ke [AWS::AppSync::DomainName](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-domainname.html)sumber daya. AWS SAM secara otomatis menghasilkan [AWS::AppSync::DomainNameApiAssociation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-domainnameapiassociation.html)sumber daya.

`Functions`  <a name="sam-graphqlapi-functions"></a>
Konfigurasikan fungsi GraphQL APIs untuk melakukan operasi tertentu.  
*Jenis*: [Fungsi](sam-property-graphqlapi-function.md)  
*Wajib*: Ya  
*CloudFormation kompatibilitas*: Properti ini unik AWS SAM dan tidak memiliki CloudFormation padanan.

`Logging`  <a name="sam-graphqlapi-logging"></a>
Mengonfigurasi CloudWatch pencatatan Amazon untuk GraphQL API Anda.  
Jika Anda tidak menentukan properti ini, AWS SAM akan menghasilkan `CloudWatchLogsRoleArn` dan menetapkan nilai-nilai berikut:  
+ `ExcludeVerboseContent: true`
+ `FieldLogLevel: ALL`
Untuk memilih keluar dari logging, tentukan yang berikut ini:  

```
Logging: false
```
*Jenis*: [LogConfig](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-logconfig.html)  
*Wajib*: Tidak  
*CloudFormation kompatibilitas*: Properti ini diteruskan langsung ke `[LogConfig](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html#cfn-appsync-graphqlapi-logconfig)` properti `AWS::AppSync::GraphQLApi` sumber daya.

`LogicalId`  <a name="sam-graphqlapi-logicalid"></a>
Nama unik GraphQL API Anda.  
*Tipe*: String  
*Wajib*: Ya  
*CloudFormation kompatibilitas*: Properti ini diteruskan langsung ke `[Name](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html#cfn-appsync-graphqlapi-name)` properti `AWS::AppSync::GraphQLApi` sumber daya.

`Name`  <a name="sam-graphqlapi-name"></a>
Nama GraphQL API Anda. Tentukan properti ini untuk mengganti `LogicalId` nilainya.  
*Tipe*: String  
*Wajib*: Tidak  
*CloudFormation kompatibilitas*: Properti ini diteruskan langsung ke `[Name](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html#cfn-appsync-graphqlapi-name)` properti `AWS::AppSync::GraphQLApi` sumber daya.

`Resolvers`  <a name="sam-graphqlapi-resolvers"></a>
Konfigurasikan resolver untuk bidang API AndaGraphQL. AWS SAM mendukung [resolver JavaScript pipa](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-overview-js.html#anatomy-of-a-pipeline-resolver-js).  
*Jenis*: [Resolver](sam-property-graphqlapi-resolver.md)  
*Wajib*: Ya  
*CloudFormation kompatibilitas*: Properti ini unik AWS SAM dan tidak memiliki CloudFormation padanan.

`SchemaInline`  <a name="sam-graphqlapi-schemainline"></a>
Representasi teks dari GraphQL skema dalam SDL format.  
*Tipe*: String  
*Diperlukan*: Bersyarat. Anda harus menentukan `SchemaInline` atau `SchemaUri`.  
*CloudFormation kompatibilitas*: Properti ini diteruskan langsung ke `[Definition](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlschema.html#cfn-appsync-graphqlschema-definition)` properti `AWS::AppSync::GraphQLSchema` sumber daya.

`SchemaUri`  <a name="sam-graphqlapi-schemauri"></a>
URI bucket Amazon Simple Storage Service (Amazon S3) skema atau path ke folder lokal.  
Jika Anda menentukan jalur ke folder lokal, CloudFormation mengharuskan file tersebut diunggah terlebih dahulu ke Amazon S3 sebelum penerapan. Anda dapat menggunakan AWS SAMCLI untuk memfasilitasi proses ini. Untuk informasi selengkapnya, lihat [Cara AWS SAM mengunggah file lokal saat penerapan](deploy-upload-local-files.md).  
*Tipe*: String  
*Diperlukan*: Bersyarat. Anda harus menentukan `SchemaInline` atau `SchemaUri`.  
*CloudFormation kompatibilitas*: Properti ini diteruskan langsung ke `[DefinitionS3Location](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlschema.html#cfn-appsync-graphqlschema-definitions3location)` properti `AWS::AppSync::GraphQLSchema` sumber daya.

`Tags`  <a name="sam-graphqlapi-tags"></a>
Tag (pasangan nilai kunci) untuk API iniGraphQL. Gunakan tag untuk mengidentifikasi dan mengkategorikan sumber daya.  
*Jenis:* Daftar [Tag](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html)  
*Wajib*: Tidak  
*CloudFormation kompatibilitas*: Properti ini diteruskan langsung ke `[Tag](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html#cfn-appsync-graphqlapi-tags)` properti `AWS::AppSync::GraphQLApi` sumber daya.

`XrayEnabled`  <a name="sam-graphqlapi-xrayenabled"></a>
Tunjukkan apakah akan menggunakan [penelusuran AWS X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray.html) untuk sumber daya ini.  
*Tipe*: Boolean  
*Wajib*: Tidak  
*CloudFormation kompatibilitas*: Properti ini diteruskan langsung ke `[XrayEnabled](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html#cfn-appsync-graphqlapi-xrayenabled)` properti `AWS::AppSync::GraphQLApi` sumber daya.

## Nilai Pengembalian
<a name="sam-resource-graphqlapi-return-values"></a>

Untuk daftar nilai yang dikembalikan, lihat [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)di [Panduan CloudFormation Pengguna](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html).

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

### GraphQL APIdengan sumber data DynamoDB
<a name="sam-resource-graphqlapi-examples-example1"></a>

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

### GraphQLAPI dengan fungsi Lambda sebagai sumber data
<a name="sam-resource-graphqlapi-examples-example2"></a>

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