

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

# Membangun APIs GraphQL dengan introspeksi RDS
<a name="rds-introspection"></a>

AWS AppSync utilitas introspeksi dapat menemukan model dari tabel database dan mengusulkan tipe GraphQL. Wizard Create API AWS AppSync konsol dapat langsung menghasilkan API dari database Aurora MySQL atau PostgreSQL. Secara otomatis membuat jenis dan JavaScript resolver untuk membaca dan menulis data.

AWS AppSync menyediakan integrasi langsung dengan database Amazon Aurora melalui Amazon RDS Data API. Alih-alih memerlukan koneksi database persisten, Amazon RDS Data API menawarkan titik akhir HTTP aman yang AWS AppSync terhubung ke untuk menjalankan SQL pernyataan. Anda dapat menggunakan ini untuk membuat API database relasional untuk beban kerja MySQL dan PostgreSQL Anda di Aurora.

Membangun API untuk database relasional Anda dengan AWS AppSync memiliki beberapa keuntungan:
+ Database Anda tidak langsung terpapar ke klien, memisahkan titik akses dari database itu sendiri. 
+ Anda dapat membangun purpose-built yang APIs disesuaikan dengan kebutuhan aplikasi yang berbeda, menghilangkan kebutuhan akan logika bisnis khusus di frontend. Ini sejalan dengan pola Backend-For-Frontend (BFF). 
+ Otorisasi dan kontrol akses dapat diimplementasikan pada AWS AppSync lapisan menggunakan berbagai mode otorisasi untuk mengontrol akses. Tidak ada sumber daya komputasi tambahan yang diperlukan untuk terhubung ke database, seperti hosting server web atau koneksi proxy. 
+ Kemampuan real-time dapat ditambahkan melalui langganan, dengan mutasi data yang dilakukan AppSync secara otomatis didorong ke klien yang terhubung. 
+ Klien dapat terhubung ke API melalui HTTPS menggunakan port umum seperti 443.

AWS AppSync membuat membangun APIs dari database relasional yang ada menjadi mudah. Utilitas introspeksi dapat menemukan model dari tabel database dan mengusulkan tipe GraphQL. Wizard *Create API AWS AppSync * konsol dapat langsung menghasilkan API dari database Aurora MySQL atau PostgreSQL. Secara otomatis membuat jenis dan JavaScript resolver untuk membaca dan menulis data. 

AWS AppSync menyediakan JavaScript utilitas terintegrasi untuk menyederhanakan penulisan pernyataan SQL dalam resolver. Anda dapat menggunakan AWS AppSync templat `sql` tag untuk pernyataan statis dengan nilai dinamis, atau utilitas `rds` modul untuk membangun pernyataan secara terprogram. Lihat [referensi fungsi resolver untuk sumber data RDS](https://docs.aws.amazon.com//appsync/latest/devguide/resolver-reference-rds-js.html) dan [modul bawaan](https://docs.aws.amazon.com//appsync/latest/devguide/built-in-modules-js.html#built-in-rds-modules) untuk informasi selengkapnya. 

## Menggunakan fitur introspeksi (konsol)
<a name="using-introspection-console"></a>

Untuk tutorial terperinci dan panduan memulai, lihat [Tutorial: Aurora PostgreSQL](https://docs.aws.amazon.com//appsync/latest/devguide/aurora-serverless-tutorial-js.html) Tanpa Server dengan API Data. 

 AWS AppSync Konsol memungkinkan Anda membuat AWS AppSync GraphQL API dari database Aurora yang ada yang dikonfigurasi dengan Data API hanya dalam beberapa menit. Ini dengan cepat menghasilkan skema operasional berdasarkan konfigurasi database Anda. Anda dapat menggunakan API apa adanya atau membangunnya untuk menambahkan fitur. 

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

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

1. **Di bawah **opsi API**, pilih ** APIsGraphQL****, Mulai dengan klaster Amazon Aurora, lalu** Berikutnya.**

   1. Masukkan **nama API**. Ini akan digunakan sebagai pengidentifikasi untuk API di konsol.

   1. Untuk **detail kontak**, Anda dapat memasukkan titik kontak untuk mengidentifikasi manajer API. Ini adalah bidang opsional.

   1. Di bawah **konfigurasi API Pribadi**, Anda dapat mengaktifkan fitur API pribadi. API pribadi hanya dapat diakses dari titik akhir VPC (VPCE) yang dikonfigurasi. Untuk informasi selengkapnya, lihat [Pribadi APIs](https://docs.aws.amazon.com//appsync/latest/devguide/using-private-apis.html).

      Kami tidak menyarankan mengaktifkan fitur ini untuk contoh ini. Pilih **Berikutnya** setelah meninjau input Anda.

1. Di halaman **Database**, pilih **Pilih database**.

   1. Anda harus memilih database Anda dari cluster Anda. Langkah pertama adalah memilih **Wilayah** di mana cluster Anda berada.

   1. Pilih **cluster Aurora** dari daftar drop-down. Perhatikan bahwa Anda harus telah membuat dan [mengaktifkan](https://docs.aws.amazon.com//AmazonRDS/latest/AuroraUserGuide/data-api.html#data-api.enabling) API data yang sesuai sebelum menggunakan sumber daya.

   1. Selanjutnya, Anda harus menambahkan kredensil untuk database Anda ke layanan. Ini terutama dilakukan dengan menggunakan AWS Secrets Manager. Pilih **Wilayah** di mana rahasia Anda ada. Untuk informasi selengkapnya tentang cara mengambil informasi rahasia, lihat [Menemukan rahasia](https://docs.aws.amazon.com//secretsmanager/latest/userguide/manage_search-secret.html) atau [Mengambil](https://docs.aws.amazon.com//secretsmanager/latest/userguide/retrieving-secrets.html) rahasia.

   1. Tambahkan rahasia Anda dari daftar drop-down. Perhatikan bahwa pengguna harus memiliki [izin membaca](https://docs.aws.amazon.com//AmazonRDS/latest/UserGuide/security_iam_id-based-policy-examples.html#security_iam_id-based-policy-examples-console) untuk database Anda.

1. Pilih **Impor**.

   AWS AppSync akan mulai introspeksi database Anda, menemukan tabel, kolom, kunci utama, dan indeks. Ini memeriksa apakah tabel yang ditemukan dapat didukung dalam GraphQL API. Perhatikan bahwa untuk mendukung pembuatan baris baru, tabel memerlukan kunci utama, yang dapat menggunakan beberapa kolom. AWS AppSync memetakan kolom tabel untuk mengetik bidang sebagai berikut:     
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/appsync/latest/devguide/rds-introspection.html)

1. Setelah penemuan tabel selesai, bagian **Database** akan diisi dengan informasi Anda. Di bagian **tabel Database** baru, data dari tabel mungkin sudah diisi dan dikonversi menjadi tipe untuk skema Anda. Jika Anda tidak melihat beberapa data yang diperlukan, Anda dapat memeriksanya dengan memilih **Tambahkan tabel**, mengklik kotak centang untuk jenis tersebut di modal yang muncul, lalu memilih **Tambah**. 

   Untuk menghapus tipe dari bagian **tabel Database**, klik kotak centang di sebelah jenis yang ingin Anda hapus, lalu pilih **Hapus**. Jenis yang dihapus akan ditempatkan di modal **Tambahkan tabel** jika Anda ingin menambahkannya lagi nanti.

   Perhatikan bahwa AWS AppSync menggunakan nama tabel sebagai nama tipe, tetapi Anda dapat mengganti nama mereka - misalnya, mengubah nama tabel jamak seperti *movies* nama tipe. *Movie* Untuk mengganti nama tipe di bagian **tabel Database**, klik kotak centang dari jenis yang ingin Anda ganti nama, lalu klik ikon *pensil di kolom* **Type** name.

   Untuk melihat pratinjau konten skema berdasarkan pilihan Anda, pilih skema **pratinjau**. Perhatikan bahwa skema ini tidak dapat kosong, jadi Anda harus memiliki setidaknya satu tabel yang dikonversi menjadi tipe. Juga, skema ini tidak boleh melebihi 1 MB dalam ukuran.

   1. Di bawah **Peran layanan**, pilih apakah akan membuat peran layanan baru khusus untuk impor ini atau menggunakan peran yang sudah ada.

1. Pilih **Berikutnya**.

1. Selanjutnya, pilih apakah akan membuat API hanya-baca (hanya kueri) atau API untuk membaca dan menulis data (dengan kueri dan mutasi). Yang terakhir ini juga mendukung langganan real-time yang dipicu oleh mutasi. 

1. Pilih **Berikutnya**.

1. Tinjau pilihan Anda dan kemudian pilih **Buat API**. AWS AppSync akan membuat API dan melampirkan resolver ke kueri dan mutasi. API yang dihasilkan beroperasi penuh dan dapat diperpanjang sesuai kebutuhan. 

## Menggunakan fitur introspeksi (API)
<a name="using-introspection-api"></a>

Anda dapat menggunakan API `StartDataSourceIntrospection` introspeksi untuk menemukan model dalam database Anda secara terprogram. Untuk detail selengkapnya tentang perintah, lihat menggunakan [https://docs.aws.amazon.com//appsync/latest/APIReference/API_StartDataSourceIntrospection.html](https://docs.aws.amazon.com//appsync/latest/APIReference/API_StartDataSourceIntrospection.html)API. 

Untuk menggunakan`StartDataSourceIntrospection`, berikan Aurora cluster Amazon Resource Name (ARN), nama database, dan ARN rahasia Anda. AWS Secrets Manager Perintah memulai proses introspeksi. Anda dapat mengambil hasilnya dengan `GetDataSourceIntrospection` perintah. Anda dapat menentukan apakah perintah harus mengembalikan string Storage Definition Language (SDL) untuk model yang ditemukan. Ini berguna untuk menghasilkan definisi skema SDL langsung dari model yang ditemukan.

 Misalnya, jika Anda memiliki pernyataan bahasa definisi Data (DDL) berikut untuk `Todos` tabel sederhana:

```
create table if not exists public.todos  
(  
id serial constraint todos_pk primary key,  
description text,  
due timestamp,  
"createdAt" timestamp default now()  
);
```

Anda memulai introspeksi dengan yang berikut ini.

```
aws appsync start-data-source-introspection \ 
  --rds-data-api-config resourceArn=<cluster-arn>,secretArn=<secret-arn>,databaseName=database
```

Selanjutnya, gunakan `GetDataSourceIntrospection` perintah untuk mengambil hasilnya.

```
aws appsync get-data-source-introspection \
  --introspection-id a1234567-8910-abcd-efgh-identifier \
  --include-models-sdl
```

Ini mengembalikan hasil sebagai berikut.

```
{
    "introspectionId": "a1234567-8910-abcd-efgh-identifier",
    "introspectionStatus": "SUCCESS",
    "introspectionStatusDetail": null,
    "introspectionResult": {
        "models": [
            {
                "name": "todos",
                "fields": [
                    {
                        "name": "description",
                        "type": {
                            "kind": "Scalar",
                            "name": "String",
                            "type": null,
                            "values": null
                        },
                        "length": 0
                    },
                    {
                        "name": "due",
                        "type": {
                            "kind": "Scalar",
                            "name": "AWSDateTime",
                            "type": null,
                            "values": null
                        },
                        "length": 0
                    },
                    {
                        "name": "id",
                        "type": {
                            "kind": "NonNull",
                            "name": null,
                            "type": {
                                "kind": "Scalar",
                                "name": "Int",
                                "type": null,
                                "values": null
                            },
                            "values": null
                        },
                        "length": 0
                    },
                    {
                        "name": "createdAt",
                        "type": {
                            "kind": "Scalar",
                            "name": "AWSDateTime",
                            "type": null,
                            "values": null
                        },
                        "length": 0
                    }
                ],
                "primaryKey": {
                    "name": "PRIMARY_KEY",
                    "fields": [
                        "id"
                    ]
                },
                "indexes": [],
                "sdl": "type todos\n{\ndescription: String\n\ndue: AWSDateTime\n\nid: Int!\n\ncreatedAt: AW
SDateTime\n}\n"
            }
        ],
        "nextToken": null
    }
}
```