🎃

Amazon OpenSearch Serviceに入門してみた。localstack準備編

2025/04/05に公開

全3編です

概要

Amazon OpenSearchServiceを触ったことがないのでチュートリアルをやってみる。

入門前のOpenSearchServiceの自分なりの理解は以下。

  • 文書の全文検索ができる
  • google検索みたいなやつのカスタム版
  • 検索用のindexなどが効かせられて早い
  • いろんな検索ができる(ログ解析など、出現頻度とか?)
  • elastic search(以降ES)を全文検索エンジンとして使用している
  • データノードという概念があり、パフォーマンス/コスト、の観点で理解しておく必要がある

記載しないこと

  • localstackの準備について
  • aws cli awslocalの準備について

環境構築 @localstack

チュートリアルを進めたいが、awsへのdeployは避けたいのでlocalstackで環境を作る

localstackで使用できるAPIは限られていて何でもできるわけではない。

チュートリアルではOpenSearch Dashboardsを使うので、そのパターンの設定をします。

OpenSearch Dashboardを使う場合

リージョン指定に注意!

起動用の設定を作っておきます。

{
    "DomainName": "secure-domain",
    "ClusterConfig": {
        "InstanceType": "r5.large.search",
        "InstanceCount": 1,
            "DedicatedMasterEnabled": false,
            "ZoneAwarenessEnabled": false,
            "WarmEnabled": false
        },
    "EBSOptions": {
        "EBSEnabled": true,
        "VolumeType": "gp2",
        "VolumeSize": 10
    },
    "EncryptionAtRestOptions": {
        "Enabled": true
    },
    "NodeToNodeEncryptionOptions": {
        "Enabled": true
    },
    "DomainEndpointOptions": {
        "EnforceHTTPS": true
    },
    "AdvancedSecurityOptions": {
        "Enabled": false,
        "InternalUserDatabaseEnabled": true,
        "MasterUserOptions": {
            "MasterUserName": "admin",
            "MasterUserPassword": "really-secure-passwordAa!1"
        }
    }
}

localstackを開始します。
後で参照できるようにネットワーク名を指定して起動します。

localstack start --network ls

セキュリティオプションを指定してopensearchのドメインを作ります。
awslocalのデフォルトリージョンがap-northeast-1の場合はリージョン指定を忘れないこと!

awslocal opensearch create-domain --cli-input-json file://./opensearch_domain.json --region us-east-1

セキュリティオプション利用時は以下のようにアクセスし、クラスターが起動状態で健康か確認をします

curl -u 'admin:really-secure-passwordAa!1' http://secure-domain.us-east-1.opensearch.localhost.localstack.cloud:4566/_cluster/health | jq .

IPアドレスを確認します

docker inspect localstack-main | \
 jq -r '.[0].NetworkSettings.Networks | to_entries | .[].value.IPAddress'

ダッシュボードを起動します
--dnsには上記で帰ってきたアドレスを設定します。

docker run --rm -p 5601:5601 \
  --network ls \
  --dns 172.20.0.2 \
  -e "OPENSEARCH_HOSTS=http://secure-domain.us-east-1.opensearch.localhost.localstack.cloud:4566" \
  -e "OPENSEARCH_USERNAME=admin" -e 'OPENSEARCH_PASSWORD=really-secure-passwordAa!1' \
  opensearchproject/opensearch-dashboards:2.11.0

ダッシュボードにアクセスします
http://localhost:5601

とりあえずここまででOpenSearchの準備はできたようです。

OpenSearch Dashboardを使わない場合

cliだけで試す場合は以下で環境を作れます。
localstackを開始します。

localstack start

OpenSearchService Clusterを作るために CreateDomain APIを使います。

awslocal opensearch create-domain --domain-name my-domain

OpenSearchのバージョンが更新されているとダウンロードするために時間がかかる場合があります。

以下で状態を確認できます。

awslocal opensearch describe-domain \
    --domain-name my-domain | jq ".DomainStatus.Processing"

falseが返れば準備完了です。

クラスターが正常に動作しているか確認します

curl http://my-domain.us-east-1.opensearch.localhost.localstack.cloud:4566

クラスターが起動状態で健康か確認をします

curl -s http://my-domain.us-east-1.opensearch.localhost.localstack.cloud:4566/_cluster/health | jq .

以上です。

Discussion