View a markdown version of this page

Melampirkan sumber data di AWS AppSync - AWS AppSync GraphQL

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

Melampirkan sumber data di AWS AppSync

Sumber data adalah sumber daya di AWS akun Anda yang dapat berinteraksi dengan GraphQL API. AWS AppSync mendukung banyak sumber data seperti AWS Lambda, Amazon DynamoDB, database relasional (Amazon Aurora Serverless), Amazon OpenSearch Service, dan titik akhir HTTP. AWS AppSync API dapat dikonfigurasi untuk berinteraksi dengan beberapa sumber data, memungkinkan Anda untuk mengumpulkan data di satu lokasi. AWS AppSync dapat menggunakan AWS sumber daya yang ada dari akun Anda atau menyediakan tabel DynamoDB atas nama Anda dari definisi skema.

Bagian berikut akan menunjukkan cara melampirkan sumber data ke GraphQL API Anda.

Jenis sumber data

Sekarang setelah Anda membuat skema di AWS AppSync konsol, Anda dapat melampirkan sumber data ke sana. Saat pertama kali Anda membuat API, ada opsi untuk menyediakan tabel Amazon DynamoDB selama pembuatan skema yang telah ditentukan sebelumnya. Namun, kami tidak akan membahas opsi itu di bagian ini. Anda dapat melihat contoh ini di bagian Meluncurkan skema.

Sebagai gantinya, kita akan melihat semua AWS AppSync dukungan sumber data. Ada banyak faktor yang masuk dalam memilih solusi yang tepat untuk aplikasi Anda. Bagian di bawah ini akan memberikan beberapa konteks tambahan untuk setiap sumber data. Untuk informasi umum tentang sumber data, lihat Sumber data.

Amazon DynamoDB

Amazon DynamoDB adalah salah satu solusi penyimpanan utama AWS untuk aplikasi yang dapat diskalakan. Komponen inti DynamoDB adalah tabel, yang hanyalah kumpulan data. Anda biasanya akan membuat tabel berdasarkan entitas seperti Book atauAuthor. Informasi entri tabel disimpan sebagai item, yang merupakan kelompok bidang yang unik untuk setiap entri. Item lengkap mewakili a row/record dalam database. Misalnya, item untuk Book entri mungkin menyertakan title dan author bersama dengan nilainya. Bidang individual seperti title dan author disebut atribut, yang mirip dengan nilai kolom dalam database relasional.

Seperti yang bisa Anda tebak, tabel akan digunakan untuk menyimpan data dari aplikasi Anda. AWS AppSync memungkinkan Anda menghubungkan tabel DynamoDB Anda ke GraphQL API Anda untuk memanipulasi data. Ambil kasus penggunaan ini dari Front-end web dan blog seluler. Aplikasi ini memungkinkan pengguna mendaftar untuk aplikasi media sosial. Pengguna dapat bergabung dengan grup dan mengunggah posting yang disiarkan ke pengguna lain yang berlangganan grup. Aplikasi mereka menyimpan informasi pengguna, pos, dan grup pengguna di DynamoDB. GraphQL API (dikelola oleh AWS AppSync) berinteraksi dengan tabel DynamoDB. Ketika pengguna membuat perubahan dalam sistem yang akan tercermin di front-end, GraphQL API mengambil perubahan ini dan menyiarkannya ke pengguna lain secara real time.

AWS Lambda

Lambda adalah layanan berbasis peristiwa yang secara otomatis membangun sumber daya yang diperlukan untuk menjalankan kode sebagai respons terhadap suatu peristiwa. Lambda menggunakan fungsi, yang merupakan pernyataan grup yang berisi kode, dependensi, dan konfigurasi untuk mengeksekusi sumber daya. Fungsi secara otomatis dijalankan ketika mereka mendeteksi pem icu, sekelompok aktivitas yang memanggil fungsi Anda. Pemicu bisa berupa aplikasi yang membuat panggilan API, AWS layanan di akun Anda memutar sumber daya, dll. Ketika dipicu, fungsi akan memproses peristiwa, yang merupakan dokumen JSON yang berisi data untuk dimodifikasi.

Lambda bagus untuk menjalankan kode tanpa harus menyediakan sumber daya untuk menjalankannya. Ambil kasus penggunaan ini dari Front-end web dan blog seluler. Kasus penggunaan ini sedikit mirip dengan yang ditampilkan di bagian DynamoDB. Dalam aplikasi ini, GraphQL API bertanggung jawab untuk mendefinisikan operasi untuk hal-hal seperti menambahkan posting (mutasi) dan mengambil data itu (kueri). Untuk mengimplementasikan fungsionalitas operasi mereka (misalnya,getPost ( id: String ! ) : Post,getPostsByAuthor ( author: String ! ) : [ Post ]), mereka menggunakan fungsi Lambda untuk memproses permintaan masuk. Di bawah Opsi 2: AWS AppSync dengan Lambda resolver, mereka menggunakan AWS AppSync layanan untuk mempertahankan skema mereka dan menghubungkan sumber data Lambda ke salah satu operasi. Ketika operasi dipanggil, Lambda berinteraksi dengan proxy Amazon RDS untuk melakukan logika bisnis pada database.

Amazon RDS

Amazon RDS memungkinkan Anda membangun dan mengkonfigurasi database relasional dengan cepat. Di Amazon RDS, Anda akan membuat instance database generik yang akan berfungsi sebagai lingkungan database terisolasi di cloud. Dalam hal ini, Anda akan menggunakan mesin DB, yang merupakan perangkat lunak RDBMS yang sebenarnya (PostgreSQL, MySQL, dll.). Layanan ini mengurangi sebagian besar pekerjaan backend dengan menyediakan skalabilitas menggunakan AWS infrastruktur, layanan keamanan seperti tambalan dan enkripsi, dan menurunkan biaya administrasi untuk penerapan.

Ambil kasus penggunaan yang sama dari bagian Lambda. Di bawah Opsi 3: AWS AppSync dengan Amazon RDS resolver, opsi lain yang disajikan adalah menghubungkan GraphQL API AWS AppSync ke Amazon RDS secara langsung. Menggunakan API data, mereka mengaitkan database dengan GraphQL API. Resolver dilampirkan ke bidang (biasanya kueri, mutasi, atau langganan) dan mengimplementasikan pernyataan SQL yang diperlukan untuk mengakses database. Ketika permintaan yang memanggil bidang dibuat oleh klien, resolver mengeksekusi pernyataan dan mengembalikan respons.

Amazon EventBridge

Di EventBridge dalamnya, Anda akan membuat bus acara, yang merupakan pipeline yang menerima peristiwa dari layanan atau aplikasi yang Anda lampirkan (sumber peristiwa) dan memprosesnya berdasarkan seperangkat aturan. Per istiwa adalah beberapa perubahan status dalam lingkungan eksekusi, sedangkan aturan adalah sekumpulan filter untuk peristiwa. Aturan mengikuti pola peristiwa, atau metadata perubahan status peristiwa (id, Wilayah, nomor akun, ARN, dll.). Ketika suatu peristiwa cocok dengan pola peristiwa, EventBridge akan mengirim peristiwa melintasi pipeline ke layanan tujuan (target) dan memicu tindakan yang ditentukan dalam aturan.

EventBridge bagus untuk merutekan operasi pengubah status ke beberapa layanan lain. Ambil kasus penggunaan ini dari Front-end web dan blog seluler. Contoh menggambarkan solusi e-commerce yang memiliki beberapa tim yang mempertahankan layanan yang berbeda. Salah satu layanan ini memberikan pembaruan pesanan kepada pelanggan pada setiap langkah pengiriman (pesanan ditempatkan, sedang berlangsung, dikirim, dikirim, dll.) di front-end. Namun, tim front-end yang mengelola layanan ini tidak memiliki akses langsung ke data sistem pemesanan karena itu dikelola oleh tim backend terpisah. Sistem pemesanan tim backend juga digambarkan sebagai kotak hitam, jadi sulit untuk mengumpulkan informasi tentang cara mereka menyusun data mereka. Namun, tim backend memang menyiapkan sistem yang menerbitkan data pesanan melalui bus acara yang dikelola oleh EventBridge. Untuk mengakses data yang berasal dari bus acara dan merutekkannya ke front-end, tim front-end membuat target baru yang menunjuk ke GraphQL API mereka yang ada. AWS AppSync Mereka juga membuat aturan untuk hanya mengirim data yang relevan dengan pembaruan pesanan. Ketika pembaruan dilakukan, data dari bus acara dikirim ke GraphQL API. Skema di API memproses data, lalu meneruskannya ke front-end.

Tidak ada sumber data

Jika Anda tidak berencana menggunakan sumber data, Anda dapat mengaturnya kenone. Sumber none data, meskipun masih secara eksplisit dikategorikan sebagai sumber data, bukanlah media penyimpanan. Biasanya, resolver akan memanggil satu atau lebih sumber data di beberapa titik untuk memproses permintaan. Namun, ada situasi di mana Anda mungkin tidak perlu memanipulasi sumber data. Menyetel sumber data untuk none akan menjalankan permintaan, lewati langkah pemanggilan data, lalu jalankan respons.

Ambil kasus penggunaan yang sama dari EventBridge bagian tersebut. Dalam skema, mutasi memproses pembaruan status, lalu mengirimkannya ke pelanggan. Mengingat cara kerja resolver, biasanya ada setidaknya satu pemanggilan sumber data. Namun, data dalam skenario ini sudah dikirim secara otomatis oleh bus acara. Ini berarti tidak perlu mutasi untuk melakukan pemanggilan sumber data; status pesanan dapat ditangani secara lokal. Mutasi diatur kenone, yang bertindak sebagai nilai pass-through tanpa pemanggilan sumber data. Skema kemudian diisi dengan data, yang dikirim ke pelanggan.

OpenSearch

Amazon OpenSearch Service adalah rangkaian alat untuk mengimplementasikan pencarian teks lengkap, visualisasi data, dan pencatatan. Anda dapat menggunakan layanan ini untuk menanyakan data terstruktur yang telah Anda unggah.

Dalam layanan ini, Anda akan membuat instance dari OpenSearch. Ini disebut node. Dalam sebuah node, Anda akan menambahkan setidaknya satu indeks. Indeks secara konseptual agak mirip tabel dalam database relasional. (Namun, OpenSearch tidak sesuai dengan ACID, jadi tidak boleh digunakan seperti itu). Anda akan mengisi indeks Anda dengan data yang Anda unggah ke OpenSearch layanan. Ketika data Anda diunggah, data akan diindeks dalam satu atau lebih pecahan yang ada di indeks. Pec ahan seperti partisi indeks Anda yang berisi beberapa data Anda dan dapat ditanyakan secara terpisah dari pecahan lainnya. Setelah diunggah, data Anda akan terstruktur sebagai file JSON yang disebut dokumen. Anda kemudian dapat menanyakan node untuk data dalam dokumen.

Titik akhir HTTP

Anda dapat menggunakan titik akhir HTTP sebagai sumber data. AWS AppSync dapat mengirim permintaan ke titik akhir dengan informasi yang relevan seperti parameter dan payload. Respon HTTP akan diekspos ke resolver, yang akan mengembalikan respons akhir setelah menyelesaikan operasinya.

Menambahkan sumber data

Jika Anda membuat sumber data, Anda dapat menautkannya ke AWS AppSync layanan dan, lebih khusus lagi, API.

Console
  1. Masuk ke Konsol Manajemen AWS dan buka AppSync konsol.

    1. Pilih API Anda di Dasbor.

    2. Di Sidebar, pilih Sumber Data.

  2. Pilih Buat sumber data.

    1. Berikan nama sumber data Anda. Anda juga dapat memberikan deskripsi, tetapi itu opsional.

    2. Pilih jenis sumber data Anda.

    3. Untuk DynamoDB, Anda harus memilih Wilayah Anda, lalu tabel di Wilayah. Anda dapat menentukan aturan interaksi dengan tabel Anda dengan memilih untuk membuat peran tabel generik baru atau mengimpor peran yang ada untuk tabel. Anda dapat mengaktifkan pembuatan versi, yang secara otomatis dapat membuat versi data untuk setiap permintaan ketika beberapa klien mencoba memperbarui data secara bersamaan. Pembuatan versi digunakan untuk menyimpan dan memelihara beberapa varian data untuk tujuan deteksi dan penyelesaian konflik. Anda juga dapat mengaktifkan pembuatan skema otomatis, yang mengambil sumber data Anda dan menghasilkan beberapa CRUD,List, dan Query operasi yang diperlukan untuk mengaksesnya di skema Anda.

      Untuk OpenSearch, Anda harus memilih Wilayah Anda, lalu domain (cluster) di Wilayah. Anda dapat menentukan aturan interaksi dengan domain Anda dengan memilih untuk membuat peran tabel generik baru atau mengimpor peran yang ada untuk tabel.

      Untuk Lambda, Anda harus memilih Wilayah Anda, lalu ARN dari fungsi Lambda di Wilayah. Anda dapat menentukan aturan interaksi dengan fungsi Lambda Anda dengan memilih untuk membuat peran tabel generik baru atau mengimpor peran yang ada untuk tabel.

      Untuk HTTP, Anda harus memasukkan titik akhir HTTP Anda.

      Untuk EventBridge, Anda harus memilih Wilayah Anda, lalu bus acara di Wilayah. Anda dapat menentukan aturan interaksi dengan bus acara Anda dengan memilih untuk membuat peran tabel generik baru atau mengimpor peran yang ada untuk tabel.

      Untuk RDS, Anda harus memilih Wilayah Anda, lalu penyimpanan rahasia (nama pengguna dan kata sandi), nama database, dan skema.

      Untuk tidak ada, Anda akan menambahkan sumber data tanpa sumber data aktual. Ini untuk menangani resolver secara lokal daripada melalui sumber data aktual.

      catatan

      Jika Anda mengimpor peran yang ada, mereka memerlukan kebijakan kepercayaan. Untuk informasi selengkapnya, lihat kebijakan kepercayaan IAM.

  3. Pilih Buat.

    catatan

    Atau, jika Anda membuat sumber data DynamoDB, Anda dapat membuka halaman Skema di konsol, pilih Buat Sumber Daya di bagian atas halaman, lalu isi model yang telah ditentukan untuk dikonversi menjadi tabel. Dalam opsi ini, Anda akan mengisi atau mengimpor tipe dasar, mengkonfigurasi data tabel dasar termasuk kunci partisi, dan meninjau perubahan skema.

CLI
  • Buat sumber data Anda dengan menjalankan create-data-source perintah.

    Anda harus memasukkan beberapa parameter untuk perintah khusus ini:

    1. api-iddari API Anda.

    2. Bagian name dari meja Anda.

    3. typeSumber data. Tergantung pada jenis sumber data yang Anda pilih, Anda mungkin perlu memasukkan service-role-arn a dan -config tag.

    Contoh perintah mungkin terlihat seperti ini:

    aws appsync create-data-source --api-id abcdefghijklmnopqrstuvwxyz --name data_source_name --type data_source_type --service-role-arn arn:aws:iam::107289374856:role/role_name --[data_source_type]-config {params}
CDK
Tip

Sebelum Anda menggunakan CDK, kami sarankan meninjau dokumentasi resmi CDK bersama dengan AWS AppSync referensi CDK.

Langkah-langkah yang tercantum di bawah ini hanya akan menampilkan contoh umum cuplikan yang digunakan untuk menambahkan sumber daya tertentu. Ini tidak dimaksudkan untuk menjadi solusi yang berfungsi dalam kode produksi Anda. Kami juga menganggap Anda sudah memiliki aplikasi yang berfungsi.

Untuk menambahkan sumber data khusus Anda, Anda harus menambahkan konstruksi ke file tumpukan Anda. Daftar jenis sumber data dapat ditemukan di sini:

  1. Secara umum, Anda mungkin harus menambahkan direktif impor ke layanan yang Anda gunakan. Misalnya, mungkin mengikuti formulir:

    import * as x from 'x'; # import wildcard as the 'x' keyword from 'x-service' import {a, b, ...} from 'c'; # import {specific constructs} from 'c-service'

    Misalnya, berikut ini cara Anda dapat mengimpor layanan AWS AppSync dan DynamoDB:

    import * as appsync from 'aws-cdk-lib/aws-appsync'; import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';
  2. Beberapa layanan seperti RDS memerlukan beberapa pengaturan tambahan dalam file tumpukan sebelum membuat sumber data (misalnya, pembuatan VPC, peran, dan kredenSIAL akses). Lihat contoh di halaman CDK yang relevan untuk informasi lebih lanjut.

  3. Untuk sebagian besar sumber data, terutama AWS layanan, Anda akan membuat instance baru dari sumber data di file tumpukan Anda. Biasanya, ini akan terlihat seperti berikut:

    const add_data_source_func = new service_scope.resource_name(scope: Construct, id: string, props: data_source_props);

    Misalnya, berikut adalah contoh tabel Amazon DynamoDB:

    const add_ddb_table = new dynamodb.Table(this, 'Table_ID', { partitionKey: { name: 'id', type: dynamodb.AttributeType.STRING, }, sortKey: { name: 'id', type: dynamodb.AttributeType.STRING, }, tableClass: dynamodb.TableClass.STANDARD, });
    catatan

    Sebagian besar sumber data akan memiliki setidaknya satu prop yang diperlukan (akan dilambangkan tanpa ? simbol). Konsultasikan dokumentasi CDK untuk melihat alat peraga mana yang diperlukan.

  4. Selanjutnya, Anda perlu menautkan sumber data ke GraphQL API. Metode yang disarankan adalah menambahkannya saat Anda membuat fungsi untuk resolver pipeline Anda. Misalnya, cuplikan di bawah ini adalah fungsi yang memindai semua elemen dalam tabel DynamoDB:

    const add_func = new appsync.AppsyncFunction(this, 'func_ID', { name: 'func_name_in_console', add_api, dataSource: add_api.addDynamoDbDataSource('data_source_name_in_console', add_ddb_table), code: appsync.Code.fromInline(` export function request(ctx) { return { operation: 'Scan' }; } export function response(ctx) { return ctx.result.items; } `), runtime: appsync.FunctionRuntime.JS_1_0_0, });

    Di dataSource props, Anda dapat memanggil GraphQL API (add_api) dan menggunakan salah satu metode bawaan (addDynamoDbDataSource) untuk membuat hubungan antara tabel dan GraphQL API. Argumen adalah nama tautan ini yang akan ada di AWS AppSync konsol (data_source_name_in_consoledalam contoh ini) dan metode tabel (add_ddb_table). Lebih lanjut tentang topik ini akan terungkap di bagian berikutnya ketika Anda mulai membuat resolver.

    Ada metode alternatif untuk menghubungkan sumber data. Anda secara teknis dapat menambahkan api ke daftar alat peraga dalam fungsi tabel. Misalnya, berikut cuplikan dari langkah 3 tetapi dengan alat peraga yang berisi Graph api QL API:

    const add_api = new appsync.GraphqlApi(this, 'API_ID', { ... }); const add_ddb_table = new dynamodb.Table(this, 'Table_ID', { ... api: add_api });

    Atau, Anda dapat memanggil GraphqlApi konstruksi secara terpisah:

    const add_api = new appsync.GraphqlApi(this, 'API_ID', { ... }); const add_ddb_table = new dynamodb.Table(this, 'Table_ID', { ... }); const link_data_source = add_api.addDynamoDbDataSource('data_source_name_in_console', add_ddb_table);

    Kami merekomendasikan hanya membuat asosiasi di alat peraga fungsi. Jika tidak, Anda harus menautkan fungsi resolver Anda ke sumber data secara manual di AWS AppSync konsol (jika Anda ingin terus menggunakan nilai konsoldata_source_name_in_console) atau membuat asosiasi terpisah dalam fungsi dengan nama lain sepertidata_source_name_in_console_2. Hal ini disebabkan keterbatasan bagaimana alat peraga memproses informasi.

    catatan

    Anda harus menerapkan ulang aplikasi untuk melihat perubahan Anda.

Kebijakan kepercayaan IAM

Jika Anda menggunakan peran IAM yang ada untuk sumber data Anda, Anda perlu memberikan peran tersebut izin yang sesuai untuk melakukan operasi pada AWS sumber daya Anda, seperti PutItem pada tabel Amazon DynamoDB. Anda juga perlu mengubah kebijakan kepercayaan pada peran tersebut untuk mengizinkan AWS AppSync penggunaannya untuk akses sumber daya seperti yang ditunjukkan dalam contoh kebijakan berikut:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "appsync.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

Anda juga dapat menambahkan kondisi ke kebijakan kepercayaan untuk membatasi akses ke sumber data sesuai keinginan. Saat ini, SourceArn dan SourceAccount kunci dapat digunakan dalam kondisi ini. Misalnya, kebijakan berikut membatasi akses ke sumber data Anda ke akun123456789012:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "appsync.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012" } } } ] }

Atau, Anda dapat membatasi akses ke sumber data ke API tertentu, misalnyaabcdefghijklmnopq, menggunakan kebijakan berikut:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "appsync.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:appsync:us-west-2:123456789012:apis/abcdefghijklmnopq" } } } ] }

Anda dapat membatasi akses ke semua AWS AppSync API dari wilayah tertentu, misalnyaus-east-1, menggunakan kebijakan berikut:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "appsync.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:appsync:us-east-1:123456789012:apis/*" } } } ] }

Pada bagian selanjutnya (Konfigurasi Resolver), kita akan menambahkan logika bisnis resolver kita dan melampirkannya ke bidang dalam skema kita untuk memproses data di sumber data kita.

Untuk informasi selengkapnya mengenai konfigurasi kebijakan peran, lihat Memodifikasi peran di Panduan Pengguna IAM.

Untuk informasi selengkapnya mengenai akses lintas akun AWS Lambda resolver untuk AWS AppSync, lihat Mem bangun resolver lintas akun AWS Lambda untuk. AWS AppSync