AWS Elasticsearch(Amazon OpenSearch Service)についてまとめています。
AWS ElasticSearchは、Amazon OpenSearchに名称変更
Amazon ES は、インタラクティブなログ分析、リアルタイムのアプリケーションモニタリング、ウェブサイト検索などの実行を容易にする検索エンジンで、フルマネージドサービスです。2021年9月に、Amazon Elasticsearch Serviceは、Amazon OpenSearch Serviceに名称が変更になりました。
Elasticsearchの開発元、米Elastic NVがApache License 2.0に準拠するバージョンのリリースを止め、新ライセンス形態に移行するのでElasticsearchのオープンソースフォークであるOpenSearchに移行するんですね。これにより、Amazon OpenSearch Serviceは今後も費用や開発方法、ビジネスでの使用に悪影響なくこれまでと同様に使えるというわけです。
AWS Esearch(Amazon OpenSearch)の特徴
Amazon OpenSearch Serviceは、ペタバイト規模の大量テキストを扱える検索エンジンです。検索対象データを保管するストレージを、ホットストレージ、ウォームストレージ、コールドストレージという3階層に分け、データのアクセス頻度によって保管するストレージを変えています。アクセス頻度の低いデータはコールドストレージというコストの安いストレージに保管されるため、データのコストを抑えることができます。
コールドストレージは、Amazon S3 でアクセス頻度の低いデータを保管し、必要な場合にのみコンピューティング料金が発生する、Amazon OpenSearch Service の最も低コストのストレージオプションです。
Amazon OpenSearch Serviceは、複数のクエリ言語をサポートしています。OpenSearchクエリの固有言語(DSL)以外に、SQLに準拠した、OpenSearch SQLで検索クエリの実行ができます。また、OpenSearch パイプ処理言語 (PPL) で、パイプ (|) 構文を使用してデータを探索、検出が可能です。OpenSearch ダッシュボードには、SQL やPPL ワークベンチも用意されています。
AWS Esearch(Amazon OpenSearch)の 料金
Amazon Opensearchでは、インスタンス料金とEBSストレージに対して料金が発生します。
【関連記事】
▶AWS EBSは、EC2ブロックストレージボリューム 暗号化やスナップショットも可能
関連)Amazon OpenSearch Service の料金 – Amazon Web Services
t3.small.searchインスタンスを3つ、1インスタンスごとに15GBのストレージ(3インスタンスで45GB)を使用した場合、無料枠を適用して1 か月の総コストは 56.67 USD となります。
AWS Esearch(Amazon OpenSearch)の使い方
Amazon OpenSearch Serviceは、AWSマネジメントコンソールから実行が可能です。
【関連記事】
▶AWSを集中管理したい!AWS マネジメントコンソールを使いこなそう!
関連)Amazon OpenSearch Service Management Console (successor to Amazon Elasticsearch Service)
以下の手順で設定をおこない、ドメインを作成します。
- Step 1: デプロイタイプの選択
- Step 2: ドメインの設定
- Step 3: アクセスとセキュリティの設定
- Step 4: タグの追加 – オプション
- Step 5: 確認
ドメインにファイルをアップロード
ドメインへのファイルのアップロードは、linuxのcurlコマンドにておこないます。
curl -XPUT -u 'master-user:master-user-password' 'domain-endpoint/movies/_doc/1' -d '{"director": "Burton, Tim", "genre": ["Comedy","Sci-Fi"], "year": 1996, "actor": ["Jack Nicholson","Pierce Brosnan","Sarah Jessica Parker"], "title": "Mars Attacks!"}' -H 'Content-Type: application/json'
複数データの一括アップロードも可能です。まずは、以下のようなJSONファイルを作成します。(bulk_movies.jsonとします)
{ "index" : { "_index": "movies", "_id" : "2" } } {"director": "Frankenheimer, John", "genre": ["Drama", "Mystery", "Thriller", "Crime"], "year": 1962, "actor": ["Lansbury, Angela", "Sinatra, Frank", "Leigh, Janet", "Harvey, Laurence", "Silva, Henry", "Frees, Paul", "Gregory, James", "Bissell, Whit", "McGiver, John", "Parrish, Leslie", "Edwards, James", "Flowers, Bess", "Dhiegh, Khigh", "Payne, Julie", "Kleeb, Helen", "Gray, Joe", "Nalder, Reggie", "Stevens, Bert", "Masters, Michael", "Lowell, Tom"], "title": "The Manchurian Candidate"} { "index" : { "_index": "movies", "_id" : "3" } } {"director": "Baird, Stuart", "genre": ["Action", "Crime", "Thriller"], "year": 1998, "actor": ["Downey Jr., Robert", "Jones, Tommy Lee", "Snipes, Wesley", "Pantoliano, Joe", "Jacob, Ir\u00e8ne", "Nelligan, Kate", "Roebuck, Daniel", "Malahide, Patrick", "Richardson, LaTanya", "Wood, Tom", "Kosik, Thomas", "Stellate, Nick", "Minkoff, Robert", "Brown, Spitfire", "Foster, Reese", "Spielbauer, Bruce", "Mukherji, Kevin", "Cray, Ed", "Fordham, David", "Jett, Charlie"], "title": "U.S. Marshals"} { "index" : { "_index": "movies", "_id" : "4" } } {"director": "Ray, Nicholas", "genre": ["Drama", "Romance"], "year": 1955, "actor": ["Hopper, Dennis", "Wood, Natalie", "Dean, James", "Mineo, Sal", "Backus, Jim", "Platt, Edward", "Ray, Nicholas", "Hopper, William", "Allen, Corey", "Birch, Paul", "Hudson, Rochelle", "Doran, Ann", "Hicks, Chuck", "Leigh, Nelson", "Williams, Robert", "Wessel, Dick", "Bryar, Paul", "Sessions, Almira", "McMahon, David", "Peters Jr., House"], "title": "Rebel Without a Cause"}
続いて、以下のコマンドを実行してjsonファイルの内容をバルクアップロードします。
curl -XPOST -u 'master-user:master-user-password' 'domain-endpoint/_bulk' --data-binary @bulk_movies.json -H 'Content-Type: application/json'
プログラム言語からAmazon OpenSearchの機能を呼び出す
Java、Python、Ruby、Node.jsなど各種プログラム言語から、Amazon OpenSearchの機能を呼び出すことが可能です。
以下は、Python言語にて、HTTPリクエストを使って7つのシャード(インデックスの分割単位)と2つの複製を持つインデックスを作成する例です。
from requests_aws4auth import AWS4Auth import boto3 import requests host = '' # The domain with https:// and trailing slash. For example, https://my-test-domain.us-east-1.es.amazonaws.com/ path = 'my-index' # the OpenSearch API endpoint region = '' # For example, us-west-1 service = 'es' credentials = boto3.Session().get_credentials() awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token) url = host + path # The JSON body to accompany the request (if necessary) payload = { "settings" : { "number_of_shards" : 7, "number_of_replicas" : 2 } } r = requests.put(url, auth=awsauth, json=payload) # requests.get, post, and delete have similar syntax print(r.text)
AWS Elasticsearchのまとめ
- AWS Elasticsearchは、オープンソース版のAmazon OpenSearchに変更になった
- Amazon OpenSearchは、コストを節約できる3階層ストレージを採用し、SQLで検索が可能
- Java、Python、Ruby、Node.jsなど各種言語から、Amazon OpenSearchの機能を呼び出せる