はじめに
今回はOracle Cloud Infrastructure(OCI)のOpenSearchのAPIを使って
LB経由で外部からデータを登録してみたいと思います。
その前にそもそもOpenSearchとはなんなのか?という話ですが、
分散型の検索および分析エンジンで、大量のデータを高速に
検索・可視化・分析するためのプラットフォームです。
主にログやメトリクス(性能指標)、テキストデータの収集・検索・分析に利用されます。
Amazon Elasticsearch Serviceからフォークされたオープンソースプロジェクトとして
開発が進められており、スケーラブルかつ柔軟なデータ解析環境を構築することができます。
■参考
https://speakerdeck.com/oracle4engineer/oci-search-service-with-opensearch-gai-yao
詳細については上記や他サイトを参照して頂くとして
早速本題に入りたいと思います。
今回は下記のようにパブリックサブネットのLBが通信を受けて
バックエンドのOpenSearchにデータを流すというシンプルな構成となります。
■事前準備
・ドメインを取得
・SSL証明書を作成(Let's Encryptとかであればフリーで作れます)
・VCN、サブネット、セキュリティリスト作成
参考: https://oracle-japan.github.io/ocitutorials/beginners/creating-vcn/
今回はセキュリティリストのイングレスに下記を設定しておきます。
5601 (0.0.0.0/0 TCP All): ダッシュボード用
9200 (0.0.0.0/0 TCP All): API用
・ポリシーの作成
参考: https://docs.oracle.com/ja-jp/iaas/Content/Identity/Tasks/managingpolicies.htm
因みにOpenSearchクラスタを作成する際に以下のようなポリシーを適用するように
促されますので、こちらを登録するようにしてください。
allow [グループ名] to manage vnics in compartment [コンパートメント名]
allow [グループ名] to manage vcns in compartment [コンパートメント名]
allow [グループ名] to manage subnets in compartment [コンパートメント名]
allow [グループ名] to use network-security-groups in compartment [コンパートメント名]
allow [グループ名] to manage opensearch-family in compartment [コンパートメント名]
・LBの作成
参考: https://oracle-japan.github.io/ocitutorials/intermediates/using-load-balancer/
予めLBのパブリックIPをDNSのAレコードとして登録し、
取得してあるドメイン名、SSL証明書でSSL通信ができるようにしておきます。
以上が事前準備となります。
◆目次
1.OpenSearchクラスタの作成
2.LBの設定
3.OpenSearchの接続テスト
1.OpenSearchクラスタの作成
左上メニュー[Ξ]からデータベースを選択し、OpenSearchの下のクラスタを選択します。
名前、コンパートメント、ソフトウェアのバージョンを入力・選択して次へ
ここでは用途に応じてクラスタの種類を選択できますが、
今回は開発を選択し、リソースは適当に設定して次へ
クラスタの作成が完了して詳細を見てみるとAPIとダッシュボードそれぞれの
プライベートIPが表示されますので、2つともメモしておきます。
以上でOpenSearchクラスタの作成は終了です。
2. LBの設定
ここではOpenSearchに外部からアクセスするためのLB設定をします。
準備段階でDNS、ドメイン、SSL証明書の設定が完了してあると思いますので、
リスナーを登録します。
リスナーはダッシュボード:5601、API:9200の2つを作成します。
■注意点
ここで気をつけたいのが、OpenSearchはHTTPS通信しか許可していないため、
バックエンドセットもSSLを有効にします。
流れとしては下記のようなイメージとなります。
[ダッシュボード] - https → リスナー:5601 → https バックエンドセット:5601
[API] - https → リスナー:9200 → https バックエンドセット:9200
上記のことからSSL証明書はリスナーとバックエンドセットの両方に必要となります。
以上でLBの設定は終了です。
3. OpenSearchの接続テスト
設定が完了したら早速OpenSearchの接続テストをしてみます。
下記でアクセスします。
https://[FQDN]:5601/app/login?
OpenSearchクラスタを作成した時のユーザID、パスワードを使ってログインします。
左上メニュー[Ξ]からDashboards Managementを選択
Index pattern nameに「index_test*」と入れてNext stepを選択
(今回はPostmanを使っていますが、APIツールであればなんでも構いません)
AuthorizationタブのAuth TypeをBasci Authを選択し、
Username、Passwordを入力します。
※こちらはOpenSearchで設定したものと同じです。
データ登録のリクエストサンプル
Method: POST
Endpoint: https://[FQDN]:9200/index_test001/_doc
Body:
{
"field1": "index_test",
"field2": "data01"
}
データ登録のレスポンスサンプル
{
"_index": "index_test001",
"_id": "trdFCJQBSUgzHqe6OF6b",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 2,
"_primary_term": 1
}
因みに戻り値の_idを使ってGETしてみると登録したデータを確認できます。
データ参照のリクエストサンプル
Method: GET
Endpoint: https://[FQDN]:9200/index_test001/_doc/t7dHCJQBSUgzHqe61l6D
データ参照のレスポンスサンプル
{
"_index": "index_test001",
"_id": "t7dHCJQBSUgzHqe61l6D",
"_version": 1,
"_seq_no": 3,
"_primary_term": 1,
"found": true,
"_source": {
"field1": "index_test",
"field2": "data01"
}
}
最後にダッシュボードから登録されたデータを確認してみます。
左上メニュー[Ξ]からDiscoverを選択
左上検索項目から「index_test*」で絞り込んで見ると
APIで登録したデータ一覧が表示されます。
虫眼鏡のアイコンをクリックすると登録されたデータが確認できます。
以上でOpenSearchの接続テストは終了です。
おわり
OpenSearchはあまり外側からアクセスさせることは多くないかと思いますが、
APIを使ってデータ登録、確認をすることが比較的簡単にできます。