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
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:
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. path
Memodifikasi 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
-
OpenSearch Layanan harus untuk kueri data, bukan sebagai basis data utama Anda. Anda mungkin ingin menggunakan OpenSearch Layanan bersama dengan Amazon DynamoDB sebagaimana diuraikan dalam Menggabungkan GraphQL Resolvers.
-
Hanya berikan akses ke domain Anda dengan mengizinkan peran AWS AppSync layanan mengakses klaster.
-
Anda dapat memulai dari yang kecil dalam pengembangan, dengan cluster berbiaya terendah, dan kemudian pindah ke cluster yang lebih besar dengan ketersediaan tinggi (HA) saat Anda pindah ke produksi.