Langkah 2: Melampirkan sumber data - AWS AppSync

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

Langkah 2: Melampirkan sumber data

Sumber data adalah sumber daya dalamAWSakun yang dapat berinteraksi dengan API GraphQL.AWS AppSyncmendukung banyak sumber data sepertiAWS Lambda, Amazon DynamoDB, basis data relasional (Amazon Aurora Tanpa Server), AmazonOpenSearchLayanan, dan titik akhir HTTP. SebuahAWS AppSyncAPI dapat dikonfigurasi untuk berinteraksi dengan beberapa sumber data, memungkinkan Anda untuk mengumpulkan data di satu lokasi.AWS AppSyncdapat menggunakan yang sudah adaAWSsumber daya dari akun Anda atau menyediakan tabel DynamoDB atas nama Anda dari definisi skema.

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

Jenis sumber data

Sekarang Anda telah membuat skema diAWS AppSynckonsol, Anda dapat melampirkan sumber data untuk itu. Saat Anda pertama kali membuat API, ada opsi untuk menyediakan tabel Amazon DynamoDB selama pembuatan skema yang telah ditentukan. Namun, kami tidak akan membahas opsi itu di bagian ini. Anda dapat melihat contoh ini diMeluncurkan skemabagian.

Sebagai gantinya, kita akan melihat semua sumber dataAWS AppSyncmendukung. Ada banyak faktor yang masuk ke 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, lihatSumber data.

Amazon DynamoDB

Amazon DynamoDB adalah salah satuAWS'solusi penyimpanan utama untuk aplikasi yang dapat diskalakan. Komponen inti dari DynamoDB adalahmeja, yang hanya merupakan kumpulan data. Anda biasanya akan membuat tabel berdasarkan entitas sepertiBookatauAuthor. Informasi entri tabel disimpan sebagaiitem, yang merupakan kelompok bidang yang unik untuk setiap entri. Item lengkap mewakili baris/catatan dalam database. Misalnya, item untukBookentri mungkin termasuktitledanauthorbersama dengan nilai-nilai mereka. Bidang individu sepertititledanauthordisebutatribut, yang mirip dengan nilai kolom dalam database relasional.

Seperti yang bisa Anda tebak, tabel akan digunakan untuk menyimpan data dari aplikasi Anda.AWS AppSyncmemungkinkan Anda untuk menghubungkan tabel DynamoDB Anda ke GraphQL API Anda untuk memanipulasi data. Ambil inikasus penggunaandariWeb front-end 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, posting, dan grup pengguna di DynamoDB. API GraphQL (dikelola olehAWS AppSync) antarmuka dengan tabel DynamoDB. Ketika pengguna membuat perubahan dalam sistem yang akan tercermin di front-end, API GraphQL 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 menggunakanfungsi, yang merupakan pernyataan grup yang berisi kode, dependensi, dan konfigurasi untuk mengeksekusi sumber daya. Fungsi secara otomatis dijalankan ketika mereka mendeteksipelatuk, sekelompok aktivitas yang memanggil fungsi Anda. Pemicu bisa berupa apa saja seperti aplikasi yang membuat panggilan API, sebuahAWSlayanan di akun Anda memutar sumber daya, dll. Saat dipicu, fungsi akan diprosesacara, yang merupakan dokumen JSON yang berisi data untuk dimodifikasi.

Lambda bagus untuk menjalankan kode tanpa harus menyediakan sumber daya untuk menjalankannya. Ambil inikasus penggunaandariWeb front-end dan blog seluler. Kasus penggunaan ini sedikit mirip dengan yang dipamerkan 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 bawahOpsi 2:AWS AppSyncdengan Lambda resolver, mereka menggunakanAWS AppSynclayanan 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 mengonfigurasi database relasional dengan cepat. Di Amazon RDS, Anda akan membuat generikcontoh basis datayang akan berfungsi sebagai lingkungan database yang terisolasi di cloud. Dalam hal ini, Anda akan menggunakanMesin DB, yang merupakan perangkat lunak RDBMS yang sebenarnya (PostgreSQL, MySQL, dll.). Layanan membongkar sebagian besar pekerjaan backend dengan menyediakan skalabilitas menggunakanAWSInfrastruktur, layanan keamanan seperti patching dan enkripsi, dan menurunkan biaya administrasi untuk penyebaran.

Ambil yang samakasus penggunaandari bagian Lambda. Di bawahOpsi 3:AWS AppSyncdengan resolver Amazon RDS, opsi lain yang disajikan adalah menautkan API GraphQL diAWS AppSyncke Amazon RDS secara langsung. MenggunakanAPI data, mereka mengaitkan database dengan API GraphQL. Resolver dilampirkan ke bidang (biasanya kueri, mutasi, atau langganan) dan mengimplementasikan pernyataan SQL yang diperlukan untuk mengakses database. Ketika permintaan memanggil bidang dibuat oleh klien, resolver mengeksekusi pernyataan dan mengembalikan respon.

Amazon EventBridge

DiEventBridge, Anda akan membuatbus acara, yang merupakan saluran pipa yang menerima peristiwa dari layanan atau aplikasi yang Anda lampirkan (sumber acara) dan memprosesnya berdasarkan seperangkat aturan. Sebuahperistiwaadalah beberapa perubahan status dalam lingkungan eksekusi, sementaraaturanadalah satu set filter untuk acara. Sebuah aturan mengikutipola acara, atau metadata perubahan status suatu peristiwa (id, Wilayah, nomor akun, ARN, dll.). Ketika sebuah acara cocok dengan pola acara,EventBridgeakan mengirim acara melintasi pipa ke layanan tujuan (target) dan memicu tindakan yang ditentukan dalam aturan.

EventBridgebaik untuk merutekan operasi yang mengubah status ke beberapa layanan lain. Ambil inikasus penggunaandariWeb front-end dan blog seluler. Contoh ini menggambarkan solusi e-commerce yang memiliki beberapa tim yang mempertahankan layanan yang berbeda. Salah satu layanan ini menyediakan 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 seperti yang dikelola oleh tim backend terpisah. Sistem pemesanan tim backend juga digambarkan sebagai kotak hitam, sehingga 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 olehEventBridge. Untuk mengakses data yang berasal dari bus acara dan merutekkannya ke front-end, tim front-end membuat target baru yang menunjuk ke API GraphQL mereka yang berada diAWS AppSync. Mereka juga membuat aturan untuk hanya mengirim data yang relevan dengan pembaruan pesanan. Saat pembaruan dibuat, data dari bus acara dikirim ke API GraphQL. Skema dalam API memproses data, lalu meneruskannya ke front-end.

Tidak ada sumber data

Jika Anda tidak berencana menggunakan sumber data, Anda dapat mengaturnyanone. SEBUAHnoneSumber 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. Mengatur sumber data kenoneakan menjalankan permintaan, melewati langkah pemanggilan data, lalu jalankan responsnya.

Ambil yang samakasus penggunaandariEventBridgebagian. 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 mutasi tidak perlu melakukan pemanggilan sumber data; status pesanan dapat ditangani secara lokal. Mutasi diatur kenone, yang bertindak sebagai nilai pass-through tanpa pemanggilan sumber data. Skema tersebut kemudian diisi dengan data, yang dikirim ke pelanggan.

OpenSearch

AmazonOpenSearchLayanan adalah seperangkat alat untuk mengimplementasikan pencarian teks lengkap, visualisasi data, dan logging. Anda dapat menggunakan layanan ini untuk menanyakan data terstruktur yang telah Anda unggah.

Dalam layanan ini, Anda akan membuat contohOpenSearch. Ini disebutnode. Dalam sebuah node, Anda akan menambahkan setidaknya satuindeks. Indeks secara konseptual sedikit mirip tabel dalam database relasional. (Namun,OpenSearchtidak sesuai dengan ACID, jadi tidak boleh digunakan seperti itu). Anda akan mengisi indeks Anda dengan data yang Anda unggah keOpenSearchlayanan. Ketika data Anda diunggah, itu akan diindeks dalam satu atau lebih pecahan yang ada di indeks. SEBUAHpecahanseperti 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 disebutdokumen. Anda kemudian dapat menanyakan node untuk data dalam dokumen.

Titik akhir HTTP

Anda dapat menggunakan titik akhir HTTP sebagai sumber data.AWS AppSyncdapat mengirim permintaan ke titik akhir dengan informasi yang relevan seperti params dan payload. Respons HTTP akan diekspos ke resolver, yang akan mengembalikan respons akhir setelah selesai operasinya.

Menambahkan sumber data

Jika Anda membuat sumber data, Anda dapat menautkannya keAWS AppSynclayanan dan, lebih khusus lagi, API.

Console
  1. Masuk keAWS Management Consoledan bukaAppSynckonsol.

    1. Pilih API Anda diDasbor.

    2. DiSidebar, pilihSumber Data.

  2. Pilih Buat sumber data.

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

    2. Pilih AndaJenis sumber data.

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

      UntukOpenSearch, Anda harus memilih Region Anda, lalu domain (cluster) di Region. Anda dapat mendikte 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 mendikte 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.

      UntukEventBridge, Anda harus memilih Wilayah Anda, lalu bus acara di Wilayah. Anda dapat mendikte 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 toko 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 lebih lanjut, lihatKebijakan kepercayaan IAM.

  3. Pilih Create (Buat).

    catatan

    Atau, jika Anda membuat sumber data DynamoDB, Anda dapat pergi keSkemahalaman di konsol, pilihBuat Sumber Dayadi 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 menjalankancreate-data-sourceperintah.

    Anda harus memasukkan beberapa parameter untuk perintah khusus ini:

    1. Theapi-iddari API Anda.

    2. Thenamedari meja Anda.

    3. Thetypedari sumber data. Bergantung pada jenis sumber data yang Anda pilih, Anda mungkin perlu memasukkanservice-role-arndan sebuah-configtag.

    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 untuk meninjau CDKdokumentasi resmibersama denganAWS AppSynciniReferensi CDK.

Langkah-langkah yang tercantum di bawah ini hanya akan menampilkan contoh umum dari cuplikan yang digunakan untuk menambahkan sumber daya tertentu. Ini adalahtidakdimaksudkan 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 tipe 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, inilah cara Anda dapat mengimporAWS AppSyncdan layanan 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 kredenal akses). Lihat contoh di halaman CDK yang relevan untuk informasi lebih lanjut.

  3. Untuk sebagian besar sumber data, terutamaAWSlayanan, Anda akan membuat instance baru dari sumber data di file stack 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 dilambangkantanpasebuah?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 penyelesai pipa 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, });

    DidataSourcealat peraga, Anda dapat memanggil API GraphQL (add_api) dan menggunakan salah satu metode bawaannya (addDynamoDbDataSource) untuk membuat hubungan antara tabel dan API GraphQL. Argumen adalah nama tautan ini yang akan ada diAWS AppSynckonsol (data_source_name_in_consoledalam contoh ini) dan metode tabel (add_ddb_table). Lebih lanjut tentang topik ini akan terungkap di bagian selanjutnya ketika Anda mulai membuat resolver.

    Ada metode alternatif untuk menghubungkan sumber data. Anda secara teknis dapat menambahkanapike daftar alat peraga dalam fungsi tabel. Misalnya, inilah cuplikan dari langkah 3 tetapi denganapialat peraga yang berisi API GraphQL:

    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 menghubungiGraphqlApimembangun 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 diAWS AppSynckonsol (jika Anda ingin tetap menggunakan nilai konsoldata_source_name_in_console) atau buat asosiasi terpisah dalam fungsi dengan nama lain sepertidata_source_name_in_console_2. Ini karena keterbatasan dalam cara 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 harus memberikan peran tersebut izin yang sesuai untuk melakukan operasi padaAWSsumber daya, sepertiPutItempada tabel Amazon DynamoDB. Anda juga perlu memodifikasi kebijakan kepercayaan pada peran itu untuk memungkinkanAWS AppSyncuntuk menggunakannya untuk akses sumber daya seperti yang ditunjukkan dalam contoh kebijakan berikut:

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

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

{ "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, sepertiabcdefghijklmnopq, menggunakan kebijakan berikut:

{ "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 semuaAWS AppSyncAPI dari wilayah tertentu, sepertius-east-1, menggunakan kebijakan berikut:

{ "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 (Mengkonfigurasi Resolver), kami akan menambahkan logika bisnis resolver kami dan melampirkannya ke bidang dalam skema kami untuk memproses data di sumber data kami.

Untuk informasi selengkapnya mengenai konfigurasi kebijakan peran, lihatMemodifikasi perandiPanduan Pengguna IAM.

Untuk informasi lebih lanjut mengenai akses lintas akunAWS Lambdaresolver untukAWS AppSync, lihatMembangun cross-accountAWS Lambdaresolver untukAWS AppSync.