Menyerap data ke dalam koleksi Amazon Tanpa OpenSearch Server - OpenSearch Layanan Amazon

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

Menyerap data ke dalam koleksi Amazon Tanpa OpenSearch Server

Bagian ini memberikan detail tentang saluran pipa konsumsi yang didukung untuk konsumsi data ke dalam koleksi Amazon OpenSearch Tanpa Server. Mereka juga mencakup beberapa klien yang dapat Anda gunakan untuk berinteraksi dengan operasi OpenSearch API. Klien Anda harus kompatibel dengan OpenSearch 2.x untuk berintegrasi dengan Tanpa OpenSearch Server.

Izin minimum yang diperlukan

Untuk memasukkan data ke dalam koleksi OpenSearch Tanpa Server, prinsipal yang menulis data harus memiliki izin minimum berikut yang ditetapkan dalam kebijakan akses data:

[ { "Rules":[ { "ResourceType":"index", "Resource":[ "index/target-collection/logs" ], "Permission":[ "aoss:CreateIndex", "aoss:WriteDocument", "aoss:UpdateIndex" ] } ], "Principal":[ "arn:aws:iam::123456789012:user/my-user" ] } ]

Izin bisa lebih luas jika Anda berencana untuk menulis ke indeks tambahan. Misalnya, daripada menentukan indeks target tunggal, Anda dapat mengizinkan izin untuk semua indeks (index/ target-collection /*), atau subset indeks (index/ target-collection/logs*).

Untuk referensi semua operasi OpenSearch API yang tersedia dan izin terkait, lihatOperasi dan plugin yang didukung di Amazon Tanpa Server OpenSearch .

OpenSearch Tertelan

Daripada menggunakan klien pihak ketiga untuk mengirim data langsung ke koleksi OpenSearch Tanpa Server, Anda dapat menggunakan Amazon OpenSearch Ingestion. Anda mengonfigurasi produsen data Anda untuk mengirim data ke OpenSearch Ingestion, dan secara otomatis mengirimkan data ke koleksi yang Anda tentukan. Anda juga dapat mengonfigurasi OpenSearch Ingestion untuk mengubah data Anda sebelum mengirimkannya. Untuk informasi selengkapnya, lihat OpenSearch Tertelan Amazon.

Pipeline OpenSearch Ingestion memerlukan izin untuk menulis ke koleksi OpenSearch Tanpa Server yang dikonfigurasi sebagai wastafelnya. Izin ini mencakup kemampuan untuk mendeskripsikan koleksi dan mengirim permintaan HTTP ke dalamnya.

Pertama, buat peran IAM yang memiliki aoss:BatchGetCollection dan aoss:APIAccessAll izin terhadap semua sumber daya ()*. Kemudian, sertakan peran ini dalam kebijakan akses data dan berikan izin untuk membuat indeks, memperbarui indeks, mendeskripsikan indeks, dan menulis dokumen dalam koleksi. Terakhir, tentukan peran ARN sebagai nilai opsi sts_role_arn dalam konfigurasi pipeline.

Untuk instruksi cara menyelesaikan setiap langkah ini, lihat Memberikan akses saluran pipa Amazon OpenSearch Ingestion ke koleksi.

Untuk memulai dengan OpenSearch Ingestion, lihat. Tutorial: Menelan data ke dalam koleksi menggunakan Amazon OpenSearch Ingestion

Fluent Bit

Anda dapat menggunakan AWS gambar Fluent Bit dan plugin OpenSearch output untuk mencerna data ke dalam koleksi Tanpa OpenSearch Server.

catatan

Anda harus memiliki versi 2.30.0 atau yang lebih baru dari image AWS for Fluent Bit agar dapat diintegrasikan dengan Tanpa Server. OpenSearch

Contoh konfigurasi:

Bagian keluaran sampel dari file konfigurasi ini menunjukkan cara menggunakan koleksi OpenSearch Tanpa Server sebagai tujuan. Penambahan penting adalah AWS_Service_Name parameter, yaituaoss. Hostadalah titik akhir koleksi.

[OUTPUT] Name opensearch Match * Host collection-endpoint.us-west-2.aoss.amazonaws.com Port 443 Index my_index Trace_Error On Trace_Output On AWS_Auth On AWS_Region <region> AWS_Service_Name aoss tls On Suppress_Type_Name On

Amazon Data Firehose

Firehose mendukung OpenSearch Tanpa Server sebagai tujuan pengiriman. Untuk petunjuk pengiriman data ke OpenSearch Tanpa Server, lihat Membuat Aliran Pengiriman Firehose Data Kinesis dan OpenSearch Pilih Tanpa Server untuk Tujuan Anda di Panduan Pengembang Amazon Data Firehose.

Peran IAM yang Anda berikan kepada Firehose untuk pengiriman harus ditentukan dalam kebijakan akses data dengan aoss:WriteDocument izin minimum untuk pengumpulan target, dan Anda harus memiliki indeks yang sudah ada sebelumnya untuk mengirim data. Untuk informasi selengkapnya, lihat Izin minimum yang diperlukan.

Sebelum mengirim data ke OpenSearch Tanpa Server, Anda mungkin perlu melakukan transformasi pada data. Untuk mempelajari selengkapnya tentang penggunaan fungsi Lambda untuk menjalankan tugas ini, lihat Transformasi Data Amazon Kinesis Data Firehose dalam panduan yang sama.

Lancar

Anda dapat menggunakan OpenSearch plugin Fluentd untuk mengumpulkan data dari infrastruktur, wadah, dan perangkat jaringan Anda dan mengirimkannya ke koleksi Tanpa OpenSearch Server. Calyptia mempertahankan distribusi Fluentd yang berisi semua dependensi hilir Ruby dan SSL.

Untuk menggunakan Fluentd untuk mengirim data ke Tanpa Server OpenSearch
  1. Unduh versi 1.4.2 atau yang lebih baru dari Calyptia Fluentd dari https://www.fluentd.org/download. Versi ini menyertakan OpenSearch plugin secara default, yang mendukung Tanpa OpenSearch Server.

  2. Instal paket . Ikuti petunjuk dalam dokumentasi Fluentd berdasarkan sistem operasi Anda:

  3. Tambahkan konfigurasi yang mengirimkan data ke Tanpa OpenSearch Server. Konfigurasi sampel ini mengirimkan pesan “test” ke satu koleksi. Pastikan untuk melakukan hal berikut:

    • Untukhost, tentukan titik akhir koleksi Tanpa OpenSearch Server Anda.

    • Untuk aws_service_name, tentukan aoss.

    <source> @type sample tag test test {"hello":"world"} </source> <match test> @type opensearch host https://collection-endpoint.us-east-1.aoss.amazonaws.com port 443 index_name fluentd aws_service_name aoss </match>
  4. Jalankan Calyptia Fluentd untuk mulai mengirim data ke koleksi. Misalnya, di Mac Anda dapat menjalankan perintah berikut:

    sudo launchctl load /Library/LaunchDaemons/calyptia-fluentd.plist

Go

Kode contoh berikut menggunakan klien opensearch-go untuk Go untuk membuat koneksi aman ke koleksi OpenSearch Tanpa Server yang ditentukan dan membuat indeks tunggal. Anda harus memberikan nilai untuk region dan host.

package main import ( "context" "log" "strings" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/config" opensearch "github.com/opensearch-project/opensearch-go/v2" opensearchapi "github.com/opensearch-project/opensearch-go/v2/opensearchapi" requestsigner "github.com/opensearch-project/opensearch-go/v2/signer/awsv2" ) const endpoint = "" // serverless collection endpoint func main() { ctx := context.Background() awsCfg, err := config.LoadDefaultConfig(ctx, config.WithRegion("<AWS_REGION>"), config.WithCredentialsProvider( getCredentialProvider("<AWS_ACCESS_KEY>", "<AWS_SECRET_ACCESS_KEY>", "<AWS_SESSION_TOKEN>"), ), ) if err != nil { log.Fatal(err) // don't log.fatal in a production-ready app } // create an AWS request Signer and load AWS configuration using default config folder or env vars. signer, err := requestsigner.NewSignerWithService(awsCfg, "aoss") // "aoss" for Amazon OpenSearch Serverless if err != nil { log.Fatal(err) // don't log.fatal in a production-ready app } // create an opensearch client and use the request-signer client, err := opensearch.NewClient(opensearch.Config{ Addresses: []string{endpoint}, Signer: signer, }) if err != nil { log.Fatal("client creation err", err) } indexName := "go-test-index" // define index mapping mapping := strings.NewReader(`{ "settings": { "index": { "number_of_shards": 4 } } }`) // create an index createIndex := opensearchapi.IndicesCreateRequest{ Index: indexName, Body: mapping, } createIndexResponse, err := createIndex.Do(context.Background(), client) if err != nil { log.Println("Error ", err.Error()) log.Println("failed to create index ", err) log.Fatal("create response body read err", err) } log.Println(createIndexResponse) // delete the index deleteIndex := opensearchapi.IndicesDeleteRequest{ Index: []string{indexName}, } deleteIndexResponse, err := deleteIndex.Do(context.Background(), client) if err != nil { log.Println("failed to delete index ", err) log.Fatal("delete index response body read err", err) } log.Println("deleting index", deleteIndexResponse) } func getCredentialProvider(accessKey, secretAccessKey, token string) aws.CredentialsProviderFunc { return func(ctx context.Context) (aws.Credentials, error) { c := &aws.Credentials{ AccessKeyID: accessKey, SecretAccessKey: secretAccessKey, SessionToken: token, } return *c, nil } }

Java

Kode contoh berikut menggunakan klien opensearch-java untuk Java untuk membuat koneksi aman ke koleksi OpenSearch Serverless tertentu dan membuat indeks tunggal. Anda harus memberikan nilai untuk region dan host.

Perbedaan penting dibandingkan dengan domain OpenSearch Layanan adalah nama layanan (aossbukanes).

// import OpenSearchClient to establish connection to OpenSearch Serverless collection import org.opensearch.client.opensearch.OpenSearchClient; SdkHttpClient httpClient = ApacheHttpClient.builder().build(); // create an opensearch client and use the request-signer OpenSearchClient client = new OpenSearchClient( new AwsSdk2Transport( httpClient, "...us-west-2.aoss.amazonaws.com", // serverless collection endpoint "aoss" // signing service name Region.US_WEST_2, // signing service region AwsSdk2TransportOptions.builder().build() ) ); String index = "sample-index"; // create an index CreateIndexRequest createIndexRequest = new CreateIndexRequest.Builder().index(index).build(); CreateIndexResponse createIndexResponse = client.indices().create(createIndexRequest); System.out.println("Create index reponse: " + createIndexResponse); // delete the index DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest.Builder().index(index).build(); DeleteIndexResponse deleteIndexResponse = client.indices().delete(deleteIndexRequest); System.out.println("Delete index reponse: " + deleteIndexResponse); httpClient.close();

JavaScript

Kode contoh berikut menggunakan klien opensearch-js untuk membuat koneksi aman JavaScript ke koleksi OpenSearch Tanpa Server yang ditentukan, membuat indeks tunggal, menambahkan dokumen, dan menghapus indeks. Anda harus memberikan nilai untuk node dan region.

Perbedaan penting dibandingkan dengan domain OpenSearch Layanan adalah nama layanan (aossbukanes).

Version 3

Contoh ini menggunakan SDK versi 3 untuk JavaScript di Node.js.

const { defaultProvider } = require('@aws-sdk/credential-provider-node'); const { Client } = require('@opensearch-project/opensearch'); const { AwsSigv4Signer } = require('@opensearch-project/opensearch/aws'); async function main() { // create an opensearch client and use the request-signer const client = new Client({ ...AwsSigv4Signer({ region: 'us-west-2', service: 'aoss', getCredentials: () => { const credentialsProvider = defaultProvider(); return credentialsProvider(); }, }), node: '' # // serverless collection endpoint }); const index = 'movies'; // create index if it doesn't already exist if (!(await client.indices.exists({ index })).body) { console.log((await client.indices.create({ index })).body); } // add a document to the index const document = { foo: 'bar' }; const response = await client.index({ id: '1', index: index, body: document, }); console.log(response.body); // delete the index console.log((await client.indices.delete({ index })).body); } main();
Version 2

Contoh ini menggunakan SDK versi 2 untuk JavaScript di Node.js.

const AWS = require('aws-sdk'); const { Client } = require('@opensearch-project/opensearch'); const { AwsSigv4Signer } = require('@opensearch-project/opensearch/aws'); async function main() { // create an opensearch client and use the request-signer const client = new Client({ ...AwsSigv4Signer({ region: 'us-west-2', service: 'aoss', getCredentials: () => new Promise((resolve, reject) => { AWS.config.getCredentials((err, credentials) => { if (err) { reject(err); } else { resolve(credentials); } }); }), }), node: '' # // serverless collection endpoint }); const index = 'movies'; // create index if it doesn't already exist if (!(await client.indices.exists({ index })).body) { console.log((await client.indices.create({ index })).body); } // add a document to the index const document = { foo: 'bar' }; const response = await client.index({ id: '1', index: index, body: document, }); console.log(response.body); // delete the index console.log((await client.indices.delete({ index })).body); } main();

Logstash

Anda dapat menggunakan OpenSearch plugin Logstash untuk mempublikasikan log ke koleksi Tanpa OpenSearch Server.

Untuk menggunakan Logstash untuk mengirim data ke Tanpa Server OpenSearch
  1. Instal logstash-output-opensearchplugin versi 2.0.0 atau yang lebih baru menggunakan Docker atau Linux.

    Docker

    Docker meng-host perangkat lunak Logstash OSS dengan plugin output yang sudah diinstal sebelumnya: opensearchproject/ OpenSearch -output-plugin. logstash-oss-with-opensearch Anda dapat menarik gambar seperti gambar lainnya:

    docker pull opensearchproject/logstash-oss-with-opensearch-output-plugin:latest
    Linux

    Pertama, instal versi terbaru Logstash jika Anda belum melakukannya. Kemudian, instal versi 2.0.0 dari plugin output:

    cd logstash-8.5.0/ bin/logstash-plugin install --version 2.0.0 logstash-output-opensearch

    Jika plugin sudah diinstal, perbarui ke versi terbaru:

    bin/logstash-plugin update logstash-output-opensearch

    Dimulai dengan versi 2.0.0 plugin, AWS SDK menggunakan versi 3. Jika Anda menggunakan versi Logstash lebih awal dari 8.4.0, Anda harus menghapus plugin pra-instal dan menginstal AWS plugin: logstash-integration-aws

    /usr/share/logstash/bin/logstash-plugin remove logstash-input-s3 /usr/share/logstash/bin/logstash-plugin remove logstash-input-sqs /usr/share/logstash/bin/logstash-plugin remove logstash-output-s3 /usr/share/logstash/bin/logstash-plugin remove logstash-output-sns /usr/share/logstash/bin/logstash-plugin remove logstash-output-sqs /usr/share/logstash/bin/logstash-plugin remove logstash-output-cloudwatch /usr/share/logstash/bin/logstash-plugin install --version 0.1.0.pre logstash-integration-aws
  2. Agar plugin OpenSearch output berfungsi dengan OpenSearch Tanpa Server, Anda harus membuat modifikasi berikut pada bagian opensearch output logstash.conf:

    • Tentukan aoss sebagai di service_name bawahauth_type.

    • Tentukan titik akhir koleksi Anda untukhosts.

    • Tambahkan parameter default_server_major_version danlegacy_template. Parameter ini diperlukan agar plugin dapat bekerja dengan Tanpa OpenSearch Server.

    output { opensearch { hosts => "collection-endpoint:443" auth_type => { ... service_name => 'aoss' } default_server_major_version => 2 legacy_template => false } }

    Contoh file konfigurasi ini mengambil inputnya dari file dalam bucket S3 dan mengirimkannya ke koleksi Tanpa OpenSearch Server:

    input { s3 { bucket => "my-s3-bucket" region => "us-east-1" } } output { opensearch { ecs_compatibility => disabled hosts => "https://my-collection-endpoint.us-east-1.aoss.amazonaws.com:443" index => my-index auth_type => { type => 'aws_iam' aws_access_key_id => 'your-access-key' aws_secret_access_key => 'your-secret-key' region => 'us-east-1' service_name => 'aoss' } default_server_major_version => 2 legacy_template => false } }
  3. Kemudian, jalankan Logstash dengan konfigurasi baru untuk menguji plugin:

    bin/logstash -f config/test-plugin.conf

Python

Kode contoh berikut menggunakan klien opensearch-py untuk Python untuk membuat koneksi aman ke koleksi OpenSearch Tanpa Server yang ditentukan, membuat indeks tunggal, dan mencari indeks itu. Anda harus memberikan nilai untuk region dan host.

Perbedaan penting dibandingkan dengan domain OpenSearch Layanan adalah nama layanan (aossbukanes).

from opensearchpy import OpenSearch, RequestsHttpConnection, AWSV4SignerAuth import boto3 host = '' # serverless collection endpoint, without https:// region = '' # e.g. us-east-1 service = 'aoss' credentials = boto3.Session().get_credentials() auth = AWSV4SignerAuth(credentials, region, service) # create an opensearch client and use the request-signer client = OpenSearch( hosts=[{'host': host, 'port': 443}], http_auth=auth, use_ssl=True, verify_certs=True, connection_class=RequestsHttpConnection, pool_maxsize=20, ) # create an index index_name = "books-index" create_response = client.indices.create( index_name ) print('\nCreating index:') print(create_response) # index a document document = { 'title': 'The Green Mile, 'director': 'Stephen King', 'year': '1996' } response = client.index( index = 'books-index', body = document, id = '1' ) # delete the index delete_response = client.indices.delete( index_name ) print('\nDeleting index:') print(delete_response)

Ruby

opensearch-aws-sigv4Permata menyediakan akses ke OpenSearch Tanpa Server, bersama dengan OpenSearch Layanan, di luar kotak. Ini memiliki semua fitur klien opensearch-ruby karena merupakan ketergantungan permata ini.

Saat membuat instance Sigv4 signer, tentukan aoss sebagai nama layanan:

require 'opensearch-aws-sigv4' require 'aws-sigv4' signer = Aws::Sigv4::Signer.new(service: 'aoss', region: 'us-west-2', access_key_id: 'key_id', secret_access_key: 'secret') # create an opensearch client and use the request-signer client = OpenSearch::Aws::Sigv4Client.new( { host: 'https://your.amz-opensearch-serverless.endpoint', log: true }, signer) # create an index index = 'prime' client.indices.create(index: index) # insert data client.index(index: index, id: '1', body: { name: 'Amazon Echo', msrp: '5999', year: 2011 }) # query the index client.search(body: { query: { match: { name: 'Echo' } } }) # delete index entry client.delete(index: index, id: '1') # delete the index client.indices.delete(index: index)

Menandatangani permintaan HTTP dengan klien lain

Persyaratan berikut berlaku saat menandatangani permintaan ke koleksi OpenSearch Tanpa Server saat Anda membuat permintaan HTTP dengan klien lain.

  • Anda harus menentukan nama layanan sebagaiaoss.

  • x-amz-content-sha256Header diperlukan untuk semua permintaan AWS Signature Version 4. Ini menyediakan hash dari payload permintaan. Jika ada payload permintaan, tetapkan nilainya ke hash kriptografi Secure Hash Algorithm (SHA) (SHA256). Jika tidak ada payload permintaan, tetapkan nilainyae3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855, yang merupakan hash dari string kosong.