

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

# Menggunakan AWS AppSync Private APIs
<a name="using-private-apis"></a>

Jika Anda menggunakan Amazon Virtual Private Cloud (Amazon VPC), Anda dapat membuat AWS AppSync Private APIs, APIs yang hanya dapat diakses dari VPC. Dengan API Pribadi, Anda dapat membatasi akses API ke aplikasi internal Anda dan terhubung ke titik akhir GraphQL dan Realtime tanpa mengekspos data secara publik.

Untuk membuat koneksi pribadi antara VPC Anda dan AWS AppSync layanan, Anda harus membuat antarmuka VPC endpoint. Endpoint antarmuka didukung oleh [AWS PrivateLink](https://aws.amazon.com/privatelink), yang memungkinkan Anda mengakses secara pribadi AWS AppSync APIs tanpa gateway internet, perangkat NAT, koneksi VPN, atau koneksi. Direct Connect Instans di VPC Anda tidak memerlukan alamat IP publik untuk berkomunikasi. AWS AppSync APIs Lalu lintas antara VPC Anda dan AWS AppSync tidak meninggalkan jaringan. AWS 

AWS AppSync mendukung AWS PrivateLink untuk operasi bidang data dan bidang kontrol:
+ **Data plane endpoint** (`com.amazonaws.{region}.appsync-api`): Menyediakan akses pribadi ke GraphQL Anda dan APIs Real-time untuk kueri, mutasi, dan langganan.
+ **Control plane endpoint** (`com.amazonaws.{region}.appsync`): Menyediakan akses pribadi ke operasi AWS AppSync manajemen seperti membuat APIs, memperbarui skema, dan mengonfigurasi sumber data.

![\[AWS Cloud architecture showing VPC with public and private subnets connecting to AWS AppSync via PrivateLink.\]](http://docs.aws.amazon.com/id_id/appsync/latest/devguide/images/private-api-architecture.png)


Ada beberapa faktor tambahan yang perlu dipertimbangkan sebelum mengaktifkan fitur API Pribadi:
+ Menyiapkan titik akhir antarmuka VPC AWS AppSync dengan fitur DNS Pribadi diaktifkan akan mencegah sumber daya di VPC dapat memanggil publik lain AWS AppSync menggunakan URL API yang dihasilkan. APIs AWS AppSync Ini karena permintaan ke API publik dirutekan melalui titik akhir antarmuka, yang tidak diizinkan untuk umum. APIs Untuk memanggil publik APIs dalam skenario ini, disarankan untuk mengonfigurasi nama domain khusus di publik APIs, yang kemudian dapat digunakan oleh sumber daya di VPC untuk memanggil API publik. 
+  AWS AppSync Private Anda hanya APIs akan tersedia dari VPC Anda. Editor kueri AWS AppSync konsol hanya akan dapat menjangkau API Anda jika konfigurasi jaringan browser Anda dapat merutekan lalu lintas ke VPC Anda (misalnya, koneksi melalui VPN atau lebih Direct Connect).
+ Dengan titik akhir antarmuka VPC untuk AWS AppSync, Anda dapat mengakses API Pribadi apa pun di AWS akun dan Wilayah yang sama. Untuk lebih membatasi akses ke Private APIs, Anda dapat mempertimbangkan opsi berikut:
  + Memastikan hanya administrator yang diperlukan yang dapat membuat antarmuka titik akhir VPC untuk. AWS AppSync
  + Menggunakan kebijakan kustom titik akhir VPC untuk membatasi mana yang APIs dapat dipanggil dari sumber daya di VPC. 
  + Untuk sumber daya di VPC, kami menyarankan Anda menggunakan otorisasi IAM untuk memanggil AWS AppSync APIs dengan memastikan bahwa sumber daya diberikan peran tercakup ke bawah. APIs
+ Saat membuat atau menggunakan kebijakan yang membatasi prinsip IAM, Anda harus mengatur metode ke atau`authorizationType`. `AWS_IAM` `NONE`

## Membuat AWS AppSync Pribadi APIs
<a name="creating-private-apis"></a>

Langkah-langkah berikut di bawah ini menunjukkan kepada Anda cara membuat Private APIs di AWS AppSync layanan.

**Awas**  
Anda dapat mengaktifkan fitur API Pribadi hanya selama pembuatan API. Pengaturan ini tidak dapat dimodifikasi pada AWS AppSync API atau API AWS AppSync Pribadi setelah dibuat.

1. Masuk ke Konsol Manajemen AWS dan buka [AppSync konsol](https://console.aws.amazon.com/appsync/).

   1. Di **Dashboard**, pilih **Create API**.

1. Pilih **Desain API dari awal**, lalu pilih **Berikutnya**.

1. Di bagian **Private API**, pilih **Use Private API features**.

1. Konfigurasikan opsi lainnya, tinjau data API Anda, lalu pilih **Buat**.

Sebelum Anda dapat menggunakan API AWS AppSync Pribadi, Anda harus mengonfigurasi titik akhir antarmuka AWS AppSync di VPC Anda. Perhatikan bahwa API Pribadi dan VPC harus berada di AWS akun dan Wilayah yang sama.

## Membuat titik akhir antarmuka untuk AWS AppSync
<a name="creating-interface-endpoint"></a>

Anda dapat membuat titik akhir antarmuka untuk AWS AppSync menggunakan konsol VPC Amazon atau () AWS Command Line Interface .AWS CLI Bergantung pada kasus penggunaan Anda, Anda mungkin perlu membuat satu atau kedua jenis titik akhir:
+ **Titik akhir pesawat data**: Diperlukan untuk mengakses Private APIs dari VPC Anda
+ **Titik akhir bidang kontrol**: Diperlukan untuk mengelola AWS AppSync sumber daya dari VPC Anda menggunakan atau AWS CLI SDKs

Untuk informasi selengkapnya, lihat [Membuat titik akhir antarmuka](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html#create-interface-endpoint) dalam *Panduan Pengguna Amazon VPC*.

**catatan**  
Pastikan Anda memilih layanan titik akhir VPC yang tepat; ada dua untuk AppSync: `com.amazonaws.{region}.appsync-api` adalah yang diperlukan untuk pribadi APIs sementara `com.amazonaws.{region}.appsync` digunakan untuk manajemen API.

------
#### [ Console ]

1. Masuk ke Konsol Manajemen AWS dan buka halaman [Endpoints](https://console.aws.amazon.com/vpc/home?#Endpoints) dari konsol VPC Amazon.

1. Pilih **Buat titik akhir**.

   1. Di bidang **Kategori Layanan**, verifikasi bahwa **AWS layanan** dipilih.

   1. Dalam tabel **Layanan**, pilih salah satu layanan berikut:
      + Untuk akses pesawat data: `com.amazonaws.{region}.appsync-api`
      + Untuk akses pesawat kontrol: `com.amazonaws.{region}.appsync`

      Verifikasi bahwa nilai kolom **Type** adalah`Interface`.

   1. Di bidang **VPC**, pilih VPC dan subnetnya.

   1. Untuk mengaktifkan fitur DNS pribadi untuk titik akhir antarmuka, centang kotak centang **Aktifkan Nama DNS**.

   1. Di bidang **Grup keamanan**, pilih satu atau beberapa grup keamanan.

1. Pilih **Buat titik akhir**.

1. Ulangi proses untuk membuat tipe endpoint kedua jika diperlukan.

------
#### [ CLI ]

Gunakan perintah `[create-vpc-endpoint](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-vpc-endpoint.html)` dan tentukan ID VPC, tipe VPC endpoint (antarmuka), nama layanan, subnet yang akan menggunakan titik akhir, dan grup keamanan yang dikaitkan dengan antarmuka jaringan titik akhir.

**Buat titik akhir bidang data:**

```
$ aws ec2 create-vpc-endpoint —vpc-id vpc-ec43eb89 \
  —vpc-endpoint-type Interface \
  —service-name com.amazonaws.{region}.appsync-api \
  —subnet-id subnet-abababab —security-group-id sg-1a2b3c4d
```

**Buat titik akhir bidang kontrol:**

```
$ aws ec2 create-vpc-endpoint —vpc-id vpc-ec43eb89 \
  —vpc-endpoint-type Interface \
  —service-name com.amazonaws.{region}.appsync \
  —subnet-id subnet-abababab —security-group-id sg-1a2b3c4d
```

------

Untuk menggunakan opsi DNS pribadi, Anda harus mengatur `enableDnsHostnames` dan `enableDnsSupportattributes` nilai VPC Anda. Untuk informasi selengkapnya, lihat [Melihat dan memperbarui dukungan DNS untuk VPC Anda](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-updating) di *Panduan Pengguna Amazon VPC*. Jika Anda mengaktifkan fitur DNS pribadi untuk titik akhir antarmuka, Anda dapat membuat permintaan ke API AWS AppSync GraphQL dan titik akhir Real-time menggunakan titik akhir DNS publik defaultnya menggunakan format di bawah ini:

```
https://{api_url_identifier}.appsync-api.{region}.amazonaws.com/graphql
```

Untuk operasi pesawat kontrol, Anda dapat menggunakan titik akhir AWS AppSync layanan standar:

```
https://appsync.{region}.amazonaws.com
```

*Untuk informasi selengkapnya tentang titik akhir layanan, lihat [Titik akhir layanan dan kuota](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) di Referensi Umum.AWS *

Untuk informasi selengkapnya tentang interaksi layanan dengan titik akhir antarmuka, lihat [Mengakses layanan melalui titik akhir antarmuka](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html#access-service-though-endpoint) di Panduan Pengguna Amazon *VPC*.

*Untuk informasi tentang membuat dan mengonfigurasi titik akhir menggunakan AWS CloudFormation, lihat VPCEndpoint sumber daya [AWS: :EC2::](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpoint.html) di Panduan Pengguna.AWS CloudFormation *

## Contoh lanjutan
<a name="advanced-example"></a>

Jika Anda mengaktifkan fitur DNS pribadi untuk titik akhir antarmuka, Anda dapat membuat permintaan ke API AWS AppSync GraphQL dan titik akhir Real-time menggunakan titik akhir DNS publik defaultnya menggunakan format di bawah ini:

```
https://{api_url_identifier}.appsync-api.{region}.amazonaws.com/graphql
```

Menggunakan antarmuka VPC endpoint public DNS hostname, URL dasar untuk memanggil API akan dalam format berikut:

```
https://{vpc_endpoint_id}-{endpoint_dns_identifier}.appsync-api.{region}.vpce.amazonaws.com/graphql
```

Anda juga dapat menggunakan nama host DNS khusus AZ jika Anda telah menerapkan titik akhir di AZ:

```
https://{vpc_endpoint_id}-{endpoint_dns_identifier}-{az_id}.appsync-api.{region}.vpce.amazonaws.com/graphql.
```

Menggunakan nama DNS publik titik akhir VPC akan memerlukan nama host titik akhir AWS AppSync API untuk diteruskan sebagai `Host` atau sebagai header ke permintaan. ` x-appsync-domain` Contoh-contoh ini menggunakan `TodoAPI` yang dibuat dalam panduan [skema Launch a sample](https://docs.aws.amazon.com/appsync/latest/devguide/quickstart-launch-a-sample-schema.html):

```
curl https://{vpc_endpoint_id}-{endpoint_dns_identifier}.appsync-api.{region}.vpce.amazonaws.com/graphql \
-H "Content-Type:application/graphql" \
-H "x-api-key:da2-{xxxxxxxxxxxxxxxxxxxxxxxxxx}" \
-H "Host:{api_url_identifier}.appsync-api.{region}.amazonaws.com" \
-d '{"query":"mutation add($createtodoinput: CreateTodoInput!) {\n createTodo(input: $createtodoinput) {\n id\n name\n where\n when\n description\n }\n}","variables":{"createtodoinput":{"name":"My first GraphQL task","when":"Friday Night","where":"Day 1","description":"Learn more about GraphQL"}}}'
```

Dalam contoh berikut, kita akan menggunakan aplikasi *Todo* yang dihasilkan dalam panduan [Launch a sample schema](https://docs.aws.amazon.com/appsync/latest/devguide/quickstart-launch-a-sample-schema.html). Untuk menguji contoh Todo API, kita akan menggunakan DNS Pribadi untuk menjalankan API. Anda dapat menggunakan alat baris perintah pilihan Anda; contoh ini menggunakan [curl](https://curl.se/) untuk mengirim kueri dan mutasi dan [wscat](https://www.npmjs.com/package/wscat) untuk mengatur langganan. Untuk meniru contoh kami, ganti nilai dalam tanda kurung dalam perintah `{ }` di bawah ini dengan nilai yang sesuai dari akun Anda AWS .

**Pengujian Operasi Mutasi — `createTodo` Permintaan**

```
curl https://{api_url_identifier}.appsync-api.{region}.amazonaws.com/graphql \
-H "Content-Type:application/graphql" \
-H "x-api-key:da2-{xxxxxxxxxxxxxxxxxxxxxxxxxx}" \
-d '{"query":"mutation add($createtodoinput: CreateTodoInput!) {\n createTodo(input: $createtodoinput) {\n id\n name\n where\n when\n description\n }\n}","variables":{"createtodoinput":{"name":"My first GraphQL task","when":"Friday Night","where":"Day 1","description":"Learn more about GraphQL"}}}'
```

**Pengujian Operasi Mutasi — `createTodo` Respon**

```
{
    "data": {
        "createTodo": {
            "id": "<todo-id>",
            "name": "My first GraphQL task",
            "where": "Day 1",
            "when": "Friday Night",
            "description": "Learn more about GraphQL"
        }
    }
}
```

**Operasi Kueri Pengujian - `listTodos` Permintaan**

```
curl https://{api_url_identifier}.appsync-api.{region}.amazonaws.com/graphql \
-H "Content-Type:application/graphql" \
-H "x-api-key:da2-{xxxxxxxxxxxxxxxxxxxxxxxxxx}" \
-d '{"query":"query ListTodos {\n listTodos {\n items {\n description\n id\n name\n when\n where\n }\n }\n}\n","variables":{"createtodoinput":{"name":"My first GraphQL task","when":"Friday Night","where":"Day 1","description":"Learn more about GraphQL"}}}'
```

**Operasi Kueri Pengujian - `listTodos` Permintaan**

```
{
  "data": {
    "listTodos": {
      "items": [
        {
          "description": "Learn more about GraphQL",
          "id": "<todo-id>",
          "name": "My first GraphQL task",
          "when": "Friday night",
          "where": "Day 1"
        }
      ]
    }
  }
}
```

**Menguji Operasi Langganan - Berlangganan mutasi `createTodo`**

Untuk mengatur langganan GraphQL, [lihat](https://docs.aws.amazon.com/appsync/latest/devguide/real-time-websocket-client.html) Membangun AWS AppSync klien waktu nyata. WebSocket [Dari instans Amazon EC2 di VPC, Anda dapat menguji titik akhir langganan AWS AppSync Private API menggunakan wscat.](https://github.com/websockets/wscat) Contoh di bawah ini menggunakan `API KEY` untuk otorisasi.

```
$ header=`echo '{"host":"{api_url_identifier}.appsync-api.{region}.amazonaws.com","x-api-key":"da2-{xxxxxxxxxxxxxxxxxxxxxxxxxx}"}' | base64 | tr -d '\n'`
$ wscat -p 13 -s graphql-ws -c  "wss://{api_url_identifier}.appsync-realtime-api.us-west-2.amazonaws.com/graphql?header=$header&payload=e30="
Connected (press CTRL+C to quit)
> {"type": "connection_init"}
< {"type":"connection_ack","payload":{"connectionTimeoutMs":300000}}
< {"type":"ka"}
> {"id":"f7a49717","payload":{"data":"{\"query\":\"subscription onCreateTodo {onCreateTodo {description id name where when}}\",\"variables\":{}}","extensions":{"authorization":{"x-api-key":"da2-{xxxxxxxxxxxxxxxxxxxxxxxxxx}","host":"{api_url_identifier}.appsync-api.{region}.amazonaws.com"}}},"type":"start"}
< {"id":"f7a49717","type":"start_ack"}
```

Atau, gunakan nama domain titik akhir VPC sambil memastikan untuk menentukan header **Host** dalam `wscat` perintah untuk membuat websocket:

```
$ header=`echo '{"host":"{api_url_identifier}.appsync-api.{region}.amazonaws.com","x-api-key":"da2-{xxxxxxxxxxxxxxxxxxxxxxxxxx}"}' | base64 | tr -d '\n'`
$ wscat -p 13 -s graphql-ws -c  "wss://{vpc_endpoint_id}-{endpoint_dns_identifier}.appsync-api.{region}.vpce.amazonaws.com/graphql?header=$header&payload=e30=" --header Host:{api_url_identifier}.appsync-realtime-api.us-west-2.amazonaws.com
Connected (press CTRL+C to quit)
> {"type": "connection_init"}
< {"type":"connection_ack","payload":{"connectionTimeoutMs":300000}}
< {"type":"ka"}
> {"id":"f7a49717","payload":{"data":"{\"query\":\"subscription onCreateTodo {onCreateTodo {description id priority title}}\",\"variables\":{}}","extensions":{"authorization":{"x-api-key":"da2-{xxxxxxxxxxxxxxxxxxxxxxxxxx}","host":"{api_url_identifier}.appsync-api.{region}.amazonaws.com"}}},"type":"start"}
< {"id":"f7a49717","type":"start_ack"}
```

Jalankan kode mutasi di bawah ini:

```
curl https://{api_url_identifier}.appsync-api.{region}.amazonaws.com/graphql \
-H "Content-Type:application/graphql" \
-H "x-api-key:da2-{xxxxxxxxxxxxxxxxxxxxxxxxxx}" \
-d '{"query":"mutation add($createtodoinput: CreateTodoInput!) {\n createTodo(input: $createtodoinput) {\n id\n name\n where\n when\n description\n }\n}","variables":{"createtodoinput":{"name":"My first GraphQL task","when":"Friday Night","where":"Day 1","description":"Learn more about GraphQL"}}}'
```

Setelah itu, langganan dipicu, dan pemberitahuan pesan muncul seperti yang ditunjukkan di bawah ini:

```
< {"id":"f7a49717","type":"data","payload":{"data":{"onCreateTodo":{"description":"Go to the shops","id":"169ce516-b7e8-4a6a-88c1-ab840184359f","priority":5,"title":"Go to the shops"}}}}
```

## Contoh bidang kontrol
<a name="control-plane-examples"></a>

Dengan titik akhir VPC bidang kontrol yang dikonfigurasi, Anda dapat mengelola AWS AppSync sumber daya dari dalam VPC Anda menggunakan atau. AWS CLI SDKs Berikut adalah contoh operasi pesawat kontrol umum:

**Membuat API menggunakan AWS CLI**

```
aws appsync create-graphql-api \
  --name "MyPrivateAPI" \
  --authentication-type API_KEY \
  --visibility PRIVATE
```

**Memperbarui skema**

```
aws appsync start-schema-creation \
  --api-id {api-id} \
  --definition file://schema.graphql
```

**Membuat sumber data**

```
aws appsync create-data-source \
  --api-id {api-id} \
  --name "MyDataSource" \
  --type AWS_LAMBDA \
  --lambda-config lambdaFunctionArn=arn:aws:lambda:{region}:{account}:function:MyFunction
```

Saat menggunakan titik akhir bidang kontrol dengan DNS pribadi diaktifkan, perintah ini akan secara otomatis merutekan melalui titik akhir VPC Anda. Jika DNS pribadi tidak diaktifkan, Anda dapat menentukan URL titik akhir:

```
aws appsync create-graphql-api \
  --endpoint-url https://{vpc_endpoint_id}-{endpoint_dns_identifier}.appsync.{region}.vpce.amazonaws.com \
  --name "MyPrivateAPI" \
  --authentication-type API_KEY \
  --visibility PRIVATE
```

## Menggunakan kebijakan IAM untuk membatasi pembuatan API publik
<a name="blocking-public-apis"></a>

AWS AppSync mendukung [`Condition`pernyataan](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html) IAM untuk digunakan dengan Private APIs. `visibility`Bidang ini dapat disertakan dengan pernyataan kebijakan IAM untuk `appsync:CreateGraphqlApi` operasi untuk mengontrol peran IAM dan pengguna mana yang dapat membuat pribadi dan publik. APIs Ini memberi administrator IAM kemampuan untuk menentukan kebijakan IAM yang hanya akan memungkinkan pengguna untuk membuat API GraphQL Pribadi. Pengguna yang mencoba membuat API publik akan menerima pesan yang tidak sah. 

Misalnya, administrator IAM dapat membuat pernyataan kebijakan IAM berikut untuk memungkinkan pembuatan Private: APIs

```
{
    "Sid": "AllowPrivateAppSyncApis",
    "Effect": "Allow",
    "Action": "appsync:CreateGraphqlApi",
    "Resource": "*",
    "Condition": {
        "ForAnyValue:StringEquals": {
            "appsync:Visibility": "PRIVATE"
        }
    }
}
```

Administrator IAM juga dapat menambahkan [kebijakan kontrol layanan](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) berikut untuk memblokir semua pengguna dalam AWS organisasi agar tidak membuat AWS AppSync APIs selain Pribadi APIs:

```
{
    "Sid": "BlockNonPrivateAppSyncApis",
    "Effect": "Deny",
    "Action": "appsync:CreateGraphqlApi",
    "Resource": "*",
    "Condition": {
        "ForAnyValue:StringNotEquals": {
            "appsync:Visibility": "PRIVATE"
        }
    }
}
```

## Dukungan VPC PrivateLink
<a name="privatelink-support"></a>

Dukungan VPC Privatelink tersedia di. AWS AppSync PrivateLink memungkinkan Anda untuk menggunakan dan berinteraksi dengan AWS Layanan tanpa lalu lintas apa pun yang meninggalkan AWS jaringan. 

AWS AppSync mendukung AWS PrivateLink untuk kedua bidang data dan operasi pesawat kontrol.
+ **VPCE endpoint** (`appsync.<region>.vpce.amazonaws.com`): Menyediakan akses VPC ke bidang data dan operasi pesawat kontrol sebagai berikut:
  + **appsync** untuk operasi pesawat kontrol
  + **appsync-api** untuk operasi pesawat data