Menggunakan OpenSearch resolver Layanan Amazon di AWS AppSync - AWS AppSync

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

Menggunakan OpenSearch resolver Layanan Amazon di AWS AppSync

catatan

Kami sekarang terutama mendukung runtime APPSYNC _JS dan dokumentasinya. Harap pertimbangkan untuk menggunakan runtime APPSYNC _JS dan panduannya di sini.

AWS AppSync mendukung penggunaan OpenSearch Layanan Amazon dari domain yang telah Anda sediakan di AWS akun Anda sendiri, asalkan tidak ada di dalam file. VPC Setelah domain Anda disediakan, Anda dapat menghubungkannya menggunakan sumber data, di mana Anda dapat mengonfigurasi resolver dalam skema untuk melakukan operasi GraphQL seperti kueri, mutasi, dan langganan. Tutorial ini akan membawa Anda melalui beberapa contoh umum.

Untuk informasi selengkapnya, lihat Referensi Template Pemetaan Resolver untuk. OpenSearch

Pengaturan Satu-Klik

Untuk secara otomatis mengatur titik AWS AppSync akhir GraphQL dengan OpenSearch Amazon Service yang dikonfigurasi, Anda dapat menggunakan template ini: AWS CloudFormation

Blue button labeled "Launch Stack" with an arrow icon indicating an action to start.

Setelah AWS CloudFormation penerapan selesai, Anda dapat langsung melompat ke menjalankan kueri dan mutasi GraphQL.

Buat Domain OpenSearch Layanan Baru

Untuk memulai tutorial ini, Anda memerlukan domain OpenSearch Layanan yang ada. Jika Anda tidak memilikinya, Anda dapat menggunakan sampel berikut. Perhatikan bahwa diperlukan waktu hingga 15 menit untuk membuat domain OpenSearch Layanan sebelum Anda dapat melanjutkan untuk mengintegrasikannya dengan sumber AWS AppSync data.

aws cloudformation create-stack --stack-name AppSyncOpenSearch \ --template-url https://s3.us-west-2.amazonaws.com/awsappsync/resources/elasticsearch/ESResolverCFTemplate.yaml \ --parameters ParameterKey=OSDomainName,ParameterValue=ddtestdomain ParameterKey=Tier,ParameterValue=development \ --capabilities CAPABILITY_NAMED_IAM

Anda dapat meluncurkan AWS CloudFormation tumpukan berikut di wilayah US West 2 (Oregon) di AWS akun Anda:

Blue button labeled "Launch Stack" with an arrow icon indicating an action to start.

Konfigurasikan Sumber Data untuk OpenSearch Layanan

Setelah domain OpenSearch Layanan dibuat, navigasikan ke AWS AppSync API GraphQL Anda dan pilih tab Sumber Data. Pilih Baru dan masukkan nama ramah untuk sumber data, seperti “oss”. Kemudian pilih OpenSearch domain Amazon untuk tipe sumber data, pilih wilayah yang sesuai, dan Anda akan melihat domain OpenSearch Layanan Anda terdaftar. Setelah memilihnya, Anda dapat membuat peran baru dan AWS AppSync akan menetapkan izin yang sesuai peran, atau Anda dapat memilih peran yang ada, yang memiliki kebijakan sebaris berikut:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1234234", "Effect": "Allow", "Action": [ "es:ESHttpDelete", "es:ESHttpHead", "es:ESHttpGet", "es:ESHttpPost", "es:ESHttpPut" ], "Resource": [ "arn:aws:es:REGION:ACCOUNTNUMBER:domain/democluster/*" ] } ] }

Anda juga perlu mengatur hubungan kepercayaan AWS AppSync untuk peran itu:

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

Selain itu, domain OpenSearch Layanan memiliki Kebijakan Akses sendiri yang dapat Anda modifikasi melalui konsol OpenSearch Layanan Amazon. Anda perlu menambahkan kebijakan yang mirip dengan yang berikut ini, dengan tindakan dan sumber daya yang sesuai untuk domain OpenSearch Layanan. Perhatikan bahwa Principal akan menjadi peran sumber AppSync data, yang jika Anda membiarkan konsol membuat ini, dapat ditemukan di IAM konsol.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNTNUMBER:role/service-role/APPSYNC_DATASOURCE_ROLE" }, "Action": [ "es:ESHttpDelete", "es:ESHttpHead", "es:ESHttpGet", "es:ESHttpPost", "es:ESHttpPut" ], "Resource": "arn:aws:es:REGION:ACCOUNTNUMBER:domain/DOMAIN_NAME/*" } ] }

Menghubungkan Resolver

Setelah sumber data terhubung ke domain OpenSearch Layanan Anda, Anda dapat menghubungkannya ke skema GraphQL Anda dengan resolver, seperti yang ditunjukkan pada contoh berikut:

schema { query: Query mutation: Mutation } type Query { getPost(id: ID!): Post allPosts: [Post] } type Mutation { addPost(id: ID!, author: String, title: String, url: String, ups: Int, downs: Int, content: String): AWSJSON } type Post { id: ID! author: String title: String url: String ups: Int downs: Int content: String } ...

Perhatikan bahwa ada Post tipe yang ditentukan pengguna dengan bidang. id Dalam contoh berikut, kami berasumsi ada proses (yang dapat diotomatisasi) untuk memasukkan jenis ini ke domain OpenSearch Layanan Anda, yang akan memetakan ke root jalur/post/_doc, di mana post indeks. Dari jalur root ini, Anda dapat melakukan pencarian dokumen individual, pencarian wildcard dengan/id/post*, atau pencarian multi-dokumen dengan jalur. /post/_search Misalnya, jika Anda memiliki jenis lain yang dipanggilUser, Anda dapat mengindeks dokumen di bawah indeks baru yang disebutuser, lalu melakukan pencarian dengan jalur. /user/_search

Dari editor skema di AWS AppSync konsol, ubah Posts skema sebelumnya untuk menyertakan kueri: searchPosts

type Query { getPost(id: ID!): Post allPosts: [Post] searchPosts: [Post] }

Simpan skema. Di sisi kanan, untuksearchPosts, pilih Lampirkan resolver. Di menu Action, pilih Update runtime, lalu pilih Unit Resolver (VTLhanya). Kemudian, pilih sumber data OpenSearch Layanan Anda. Di bawah bagian template pemetaan permintaan, pilih drop-down untuk posting Query untuk mendapatkan template dasar. pathMemodifikasi menjadi/post/_search. Seharusnya terlihat seperti berikut:

{ "version":"2017-02-28", "operation":"GET", "path":"/post/_search", "params":{ "headers":{}, "queryString":{}, "body":{ "from":0, "size":50 } } }

Ini mengasumsikan bahwa skema sebelumnya memiliki dokumen yang telah diindeks di Layanan di bawah bidang. OpenSearch post Jika Anda menyusun data Anda secara berbeda, maka Anda harus memperbaruinya.

Di bawah bagian template pemetaan respons, Anda perlu menentukan _source filter yang sesuai jika Anda ingin mendapatkan kembali hasil data dari kueri OpenSearch Layanan dan menerjemahkan ke GraphQL. Gunakan template berikut:

[ #foreach($entry in $context.result.hits.hits) #if( $velocityCount > 1 ) , #end $utils.toJson($entry.get("_source")) #end ]

Memodifikasi Pencarian Anda

Templat pemetaan permintaan sebelumnya melakukan kueri sederhana untuk semua catatan. Misalkan Anda ingin mencari oleh penulis tertentu. Selanjutnya, misalkan Anda ingin penulis itu menjadi argumen yang didefinisikan dalam kueri GraphQL Anda. Di editor skema AWS AppSync konsol, tambahkan allPostsByAuthor kueri:

type Query { getPost(id: ID!): Post allPosts: [Post] allPostsByAuthor(author: String!): [Post] searchPosts: [Post] }

Sekarang pilih Lampirkan resolver dan pilih sumber data OpenSearch Layanan, tetapi gunakan contoh berikut dalam template pemetaan respons:

{ "version":"2017-02-28", "operation":"GET", "path":"/post/_search", "params":{ "headers":{}, "queryString":{}, "body":{ "from":0, "size":50, "query":{ "match" :{ "author": $util.toJson($context.arguments.author) } } } } }

Perhatikan bahwa body diisi dengan kueri istilah untuk author bidang, yang diteruskan dari klien sebagai argumen. Anda dapat secara opsional memiliki informasi yang telah diisi sebelumnya, seperti teks standar, atau bahkan menggunakan utilitas lain.

Jika Anda menggunakan resolver ini, isi template pemetaan respons dengan informasi yang sama seperti contoh sebelumnya.

Menambahkan Data ke OpenSearch Layanan

Anda mungkin ingin menambahkan data ke domain OpenSearch Layanan Anda sebagai hasil dari mutasi GraphQL. Ini adalah mekanisme yang kuat untuk pencarian dan tujuan lain. Karena Anda dapat menggunakan langganan GraphQL untuk membuat data Anda real-time, ini berfungsi sebagai mekanisme untuk memberi tahu klien tentang pembaruan data di domain Layanan Anda. OpenSearch

Kembali ke halaman Skema di AWS AppSync konsol dan pilih Lampirkan resolver untuk mutasi. addPost() Pilih sumber data OpenSearch Layanan lagi dan gunakan template pemetaan respons berikut untuk Posts skema:

{ "version":"2017-02-28", "operation":"PUT", "path": $util.toJson("/post/_doc/$context.arguments.id"), "params":{ "headers":{}, "queryString":{}, "body":{ "id": $util.toJson($context.arguments.id), "author": $util.toJson($context.arguments.author), "ups": $util.toJson($context.arguments.ups), "downs": $util.toJson($context.arguments.downs), "url": $util.toJson($context.arguments.url), "content": $util.toJson($context.arguments.content), "title": $util.toJson($context.arguments.title) } } }

Seperti sebelumnya, ini adalah contoh bagaimana data Anda mungkin terstruktur. Jika Anda memiliki nama bidang atau indeks yang berbeda, Anda perlu memperbarui path dan sesuai body kebutuhan. Contoh ini juga menunjukkan cara menggunakan $context.arguments untuk mengisi template dari argumen mutasi GraphQL Anda.

Sebelum melanjutkan, gunakan template pemetaan respons berikut, yang akan mengembalikan hasil operasi mutasi atau informasi kesalahan sebagai output:

#if($context.error) $util.toJson($ctx.error) #else $util.toJson($context.result) #end

Mengambil Dokumen Tunggal

Terakhir, jika Anda ingin menggunakan getPost(id:ID) kueri dalam skema Anda untuk mengembalikan dokumen individual, temukan kueri ini di editor skema AWS AppSync konsol dan pilih Lampirkan resolver. Pilih sumber data OpenSearch Layanan lagi dan gunakan template pemetaan berikut:

{ "version":"2017-02-28", "operation":"GET", "path": $util.toJson("post/_doc/$context.arguments.id"), "params":{ "headers":{}, "queryString":{}, "body":{} } }

Karena di path atas menggunakan id argumen dengan badan kosong, ini mengembalikan dokumen tunggal. Namun, Anda perlu menggunakan template pemetaan respons berikut, karena sekarang Anda mengembalikan satu item dan bukan daftar:

$utils.toJson($context.result.get("_source"))

Lakukan Kueri dan Mutasi

Anda sekarang harus dapat melakukan operasi GraphQL terhadap OpenSearch domain Layanan Anda. Arahkan ke tab Kueri AWS AppSync konsol dan tambahkan catatan baru:

mutation addPost { addPost ( id:"12345" author: "Fred" title: "My first book" content: "This will be fun to write!" url: "publisher website", ups: 100, downs:20 ) }

Anda akan melihat hasil mutasi di sebelah kanan. Demikian pula, Anda sekarang dapat menjalankan searchPosts kueri terhadap domain OpenSearch Layanan Anda:

query searchPosts { searchPosts { id title author content } }

Praktik Terbaik