バナー画像

AWS Elasticsearch(Amazon OpenSearch Service)についてまとめています。

AWS ElasticSearchは、Amazon OpenSearchに名称変更

Amazon ES は、インタラクティブなログ分析、リアルタイムのアプリケーションモニタリング、ウェブサイト検索などの実行を容易にする検索エンジンで、フルマネージドサービスです。2021年9月に、Amazon Elasticsearch Serviceは、Amazon OpenSearch Serviceに名称が変更になりました。

関連)Amazon Elasticsearch Service が Amazon OpenSearch Service となり、OpenSearch 1.0 をサポート | Amazon Web Services ブログ

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)

以下の手順で設定をおこない、ドメインを作成します。

ドメインにファイルをアップロード

ドメインへのファイルのアップロードは、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'

ステップ2:インデックス作成のためにOpenSearchサービスにデータをアップロードする-Amazon OpenSearch Service(Amazon Elasticsearch Serviceの後継)

プログラム言語からAmazon OpenSearchの機能を呼び出す

Java、Python、Ruby、Node.jsなど各種プログラム言語から、Amazon OpenSearchの機能を呼び出すことが可能です。

関連)Signing HTTP requests to Amazon OpenSearch Service – Amazon OpenSearch Service (successor to Amazon Elasticsearch Service)

以下は、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の機能を呼び出せる

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。