すべてのプロダクト
Search
ドキュメントセンター

Elasticsearch:Amazon OpenSearch Service から Alibaba Cloud Elasticsearch に Elasticsearch インデックスデータを移行する

最終更新日:Mar 27, 2025

このトピックでは、Amazon OpenSearch Service から Alibaba Cloud Elasticsearch に Elasticsearch インデックスデータを移行する方法について説明します。

注意事項

このソリューションはクラウド サービス プロバイダー (CSP) に限定されず、Elasticsearch スナップショットメカニズムに依存します。たとえば、Alibaba Cloud が提供するデータオンライン移行サービスを使用して、Amazon OpenSearch Service または Tencent Cloud Object Storage (COS) から Alibaba Cloud Object Storage Service (OSS) にスナップショット内の Elasticsearch データを移行できます。その後、データを宛先クラスタにリストアします。Alibaba Cloud OSS にデータを移行する方法については、「データの移行」をご参照ください。スナップショット内のデータをリストアする方法については、「手動スナップショットの作成と手動スナップショットからのデータのリストア」をご参照ください。

宛先 Elasticsearch クラスタのバージョンは、ソース Elasticsearch オブジェクトと同じかそれ以上である必要があります。バージョンの互換性については、「スナップショットからのデータ復旧のバージョンの互換性」をご参照ください。

背景情報

次の図は、移行の参照アーキテクチャを示しています。AWS迁移至阿里云ES架构图

用語

  • Elasticsearch: さまざまなシナリオ向けに設計された、分散型の RESTful 検索および分析エンジン。Elastic Stack のコアとして、Elasticsearch はデータを一元的に保存し、データを検索および分析します。

  • Kibana: データを検索および分析するためのビジュアル インターフェイスを提供します。

  • Amazon OpenSearch Service: 2021 年 9 月に、Amazon Elasticsearch Service は Amazon OpenSearch Service に名前が変更されました。Amazon OpenSearch Service は、使いやすい Elasticsearch API とリアルタイム分析機能を提供するマネージド サービスです。このサービスは、本番ワークロードに必要な可用性、スケーラビリティ、およびセキュリティも提供します。Amazon OpenSearch Service を使用すると、ログ分析、全文検索、アプリケーション監視などのシナリオ向けに Elasticsearch クラスタを簡単にデプロイ、保護、管理、およびスケーリングできます。

  • Alibaba Cloud Elasticsearch: データ分析や検索などのシナリオ向けに、オープンソースの Elasticsearch をベースに設計されています。オープンソースの Elasticsearch をベースにした Alibaba Cloud Elasticsearch は、エンタープライズクラスのアクセス制御、セキュリティ監視とアラート、自動レポートを提供します。

  • スナップショットとリストア: 個々のインデックスまたはクラスタ全体のスナップショットを、Amazon Simple Storage Service (Amazon S3) や HDFS などの共有ファイルシステムのようなリモートリポジトリに保存できます。スナップショットを使用してデータをリストアできます。ただし、データは特定のバージョンの Elasticsearch クラスタにのみリストアできます。

    • Elasticsearch 5.x クラスタで作成されたスナップショットのデータは、Elasticsearch 6.x クラスタにリストアできます。

    • Elasticsearch 2.x クラスタで作成されたスナップショットのデータは、Elasticsearch 5.x クラスタにリストアできます。

    • Elasticsearch 1.x クラスタで作成されたスナップショットのデータは、Elasticsearch 2.x クラスタにリストアできます。

移行プラン

Amazon OpenSearch Service ドメインから Alibaba Cloud Elasticsearch クラスタにデータを移行するには、次の手順を実行します。

  1. ベースライン インデックスを作成します。

    1. スナップショットリポジトリを作成し、Amazon S3 バケットに関連付けます。

    2. データを移行するインデックスの最初のスナップショットを作成します。最初のスナップショットは完全スナップショットです。

      このスナップショットは S3 バケットに自動的に保存されます。

    3. Alibaba Cloud Object Storage Service (OSS) バケットを作成し、Alibaba Cloud Elasticsearch クラスタにスナップショットリポジトリとして登録します。

    4. ossimport を使用して、完全スナップショットを S3 バケットから OSS バケットに転送します。

    5. 完全スナップショットから Alibaba Cloud Elasticsearch クラスタにデータをリストアします。

  2. 増分スナップショットを定期的に処理します。

    上記の手順を繰り返して、増分スナップショットからデータをリストアします。

  3. 最終スナップショットを特定し、サービス スイッチオーバーを実行します。

    1. インデックスデータを変更する可能性のあるサービスを停止します。

    2. Amazon OpenSearch Service ドメインの最終スナップショットを作成します。

    3. 最終スナップショットを OSS バケットに転送します。次に、スナップショットから Alibaba Cloud Elasticsearch クラスタにデータをリストアします。

    4. クラスタへのサービス スイッチオーバーを実行し、移行されたデータをクラスタで表示します。

前提条件

次の操作が実行されます。

  • シンガポール リージョンに Elasticsearch 5.5.2 の Amazon OpenSearch Service ドメインを作成します。

    詳細については、「Amazon OpenSearch Service ドメインの作成」をご参照ください。

  • 中国 (杭州) リージョンに Alibaba Cloud Elasticsearch V5.5.3 クラスタを作成します。

    詳細については、「Alibaba Cloud Elasticsearch クラスタの作成」をご参照ください。

  • OSS バケットを作成します。

    この例では、OSS バケットは中国 (杭州) リージョンに作成されます。バケットのストレージタイプは標準で、バケットのアクセス制御リスト (ACL) はプライベートです。その他のパラメータにはデフォルト設定が使用されます。詳細については、「バケットの作成」をご参照ください。

  • データを移行するインデックスを準備します。この例では、movies インデックスが使用されます。

Amazon OpenSearch Service ドメインで手動スナップショットを作成するための前提条件

Amazon OpenSearch Service は、ドメイン内のプライマリ インデックス シャードのスナップショットを毎日自動的に作成し、事前に構成された S3 バケットに保存します。これらのスナップショットは、最大 14 日間無料で保持されます。これらのスナップショットを使用して、ドメインにデータをリストアできます。ただし、それらを使用して他のドメインにデータを移行することはできません。別のドメインにデータを移行するには、S3 バケットに保存されている手動スナップショットを使用する必要があります。手動スナップショットには標準の S3 料金が適用されます。

手動スナップショットを作成し、スナップショットからデータをリストアするには、AWS Identity and Access Management (IAM) と S3 を使用する必要があります。スナップショットを作成する前に、次の表にリストされている操作を実行します。

操作

説明

S3 バケットを作成する

バケットは、Amazon OpenSearch Service ドメインの手動スナップショットを保存するために使用されます。

IAM ロールを作成する

ロールは、Amazon OpenSearch Service に権限を付与するために使用されます。ロールの信頼関係を追加する場合は、Principal 要素で Amazon OpenSearch Service を指定する必要があります。このロールは、Amazon OpenSearch Service にスナップショットリポジトリを登録する場合にも必要です。このロールを偽装する IAM ユーザーのみがスナップショットリポジトリを登録できます。

IAM ポリシーを作成する

このポリシーは、S3 が S3 バケットで実行できる操作を指定します。ポリシーは、Amazon OpenSearch Service に権限を付与するために使用される IAM ロールにアタッチする必要があります。ポリシーの Resource 要素で S3 バケットを指定する必要があります。

  • S3 バケットを作成する

    手動スナップショットを保存するには、S3 バケットが必要です。その Amazon リソースネーム (ARN) をメモしておきます。ARN は、次の項目で使用されます。

    • IAM ロールにアタッチされている IAM ポリシーの Resource 要素

    • スナップショットリポジトリを登録するために使用される Python クライアント

    次のコードは、S3 バケットの ARN を提供します。

    arn:aws:s3:::eric-es-index-backups
  • IAM ロールを作成する

    IAM ロールが必要です。その信頼関係の Service 要素で Amazon OpenSearch Service (es.amazonaws.com) が指定されています。例:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "",
          "Effect": "Allow",
          "Principal": {
            "Service": "es.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }

    IAM コンソールで信頼関係の詳細を表示できます。

    查看信任关系

    説明

    IAM コンソールでロールを作成する場合、[ロールタイプの選択] ドロップダウンリストに Amazon OpenSearch Service は含まれていません。ドロップダウンリストから [amazon EC2] を選択し、プロンプトに従ってロールを作成できます。次に、ロールの信頼関係の ec2.amazonaws.comes.amazonaws.com に変更します。

  • IAM ポリシーを作成する

    IAM ロールに IAM ポリシーをアタッチする必要があります。ポリシーは、Amazon OpenSearch Service ドメインの手動スナップショットを保存するために使用される S3 バケットを指定します。次のコードは、サンプル ポリシーを示しています。ポリシーでは、eric-es-index-backups バケットの ARN が指定されています。

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Action": [
                    "s3:ListBucket"
                ],
                "Effect": "Allow",
                "Resource": [
                    "arn:aws:s3:::eric-es-index-backups"
                ]
            },
            {
                "Action": [
                    "s3:GetObject",
                    "s3:PutObject",
                    "s3:DeleteObject"
                ],
                "Effect": "Allow",
                "Resource": [
                    "arn:aws:s3:::eric-es-index-backups/*"
                ]
            }
        ]
    }
    1. ポリシーの内容を [ポリシーの編集] セクションにコピーします。策略编辑区域

    2. ポリシーが正しいかどうかを確認します。Policy Summary

    3. ポリシーをロールにアタッチします。为IAM角色添加IAM策略

手順 1: 手動スナップショットリポジトリを登録する

Amazon OpenSearch Service にスナップショットリポジトリを登録した後にのみ、手動スナップショットを作成できます。手動スナップショットを作成する前に、IAM ロールの信頼関係で指定されたユーザーまたはロールに AWS リクエストに署名します。詳細については、「Amazon OpenSearch Service ドメインで手動スナップショットを作成するための前提条件」をご参照ください。

重要

cURL コマンドは AWS リクエスト署名をサポートしていないため、cURL コマンドを使用してスナップショットリポジトリを登録することはできません。代わりに、サンプル Python クライアント (register_snapshot_repository.py) を使用してスナップショットリポジトリを登録します。

  1. register_snapshot_repository.py ファイルをダウンロードします。

  2. ファイルを修正します。

    ファイル内の黄色で強調表示されている値を実際の条件に基づいて変更します。次に、内容を snapshot.py という名前の Python ファイルにコピーします。

    次の表は、サンプル Python クライアント ファイルのパラメータについて説明しています。

    パラメータ

    説明

    region

    スナップショットリポジトリが作成される AWS リージョン。

    host

    Amazon OpenSearch Service ドメインのエンドポイント。

    aws_access_key_id

    IAM 認証情報の ID。

    aws_secret_access_key

    IAM 認証情報のキー。

    path

    スナップショットリポジトリのパス。

    data

    値には、「Amazon OpenSearch Service ドメインで手動スナップショットを作成するための前提条件」で作成した IAM ロールの S3 バケットの名前と ARN が含まれている必要があります。

    重要
    • スナップショットリポジトリに対して S3 マネージドキーによるサーバ側暗号化を有効にする場合は、settings JSON 配列に "server_side_encryption": true を追加します。

    • S3 バケットが ap-southeast-1 リージョンにある場合は、"region": "ap-southeast-1""endpoint": "s3.amazonaws.com" に置き換えます。

  3. Amazon Web Services Library boto-2.48.0 をインストールします。

    上記のサンプル Python クライアントでは、スナップショットリポジトリを登録するコンピュータにバージョン 2.x の boto パッケージをインストールする必要があります。

    # wget https://pypi.python.org/packages/66/e7/fe1db6a5ed53831b53b8a6695a8f134a58833cadb5f2740802bc3730ac15/boto-2.48.0.tar.gz#md5=ce4589dd9c1d7f5d347363223ae1b970 
    # tar zxvf boto-2.48.0.tar.gz
    # cd boto-2.48.0
    # sudo python setup.py install
  4. Python クライアントを実行して、スナップショットリポジトリを登録します。

    # python snapshot.py
  5. Amazon OpenSearch Service ドメインの Kibana コンソールにログオンします。左側のナビゲーションウィンドウで、[dev Tools] をクリックします。表示されるページの [コンソール] タブで、次のコマンドを実行して登録結果を表示します。

    GET _snapshot

    查看请求结果

手順 2: 最初のスナップショットを作成し、スナップショットからデータをリストアする

  1. Amazon OpenSearch Service ドメインでスナップショットを作成します。

    説明

    次のコマンドは、Kibana コンソールで、または Linux または Mac OS X コマンドライン インターフェイス (CLI) で cURL コマンドを使用して実行できます。

    • movies インデックスの snapshot_movies_1 という名前のスナップショットを、eric-snapshot-repository スナップショットリポジトリに作成します。

      PUT _snapshot/eric-snapshot-repository/snapshot_movies_1
      {
      "indices": "movies"
      }
    • スナップショットのステータスを表示します。

      GET _snapshot/eric-snapshot-repository/snapshot_movies_1

      查看快照状态

    • S3 コンソールで、スナップショット オブジェクトを表示します。瞎看快照文件

  2. 作成されたスナップショットを S3 バケットから OSS バケットに転送します。

    詳細については、「Amazon S3 から Alibaba Cloud OSS にデータを移行する」をご参照ください。

    スナップショットが転送されたら、OSS コンソールでスナップショットを表示します。

    OSS快照数据

  3. スナップショットから Alibaba Cloud Elasticsearch クラスタにデータをリストアします。

    1. スナップショットリポジトリを作成します。

      Elasticsearch クラスタの Kibana コンソールにログオンします。詳細については、「Kibana コンソールにログオンする」をご参照ください。次に、左側のナビゲーションウィンドウで、[dev Tools] をクリックします。表示されるページの [コンソール] タブで、次のコマンドを実行してスナップショットリポジトリを作成します。スナップショットリポジトリの名前は、Amazon OpenSearch Service に登録されているスナップショットリポジトリの名前と同じである必要があります。

      PUT _snapshot/eric-snapshot-repository
      {
      "type": "oss",
      "settings": {
                  "base_path": "my/snapshot/directory"
                  "endpoint": "http://oss-cn-hangzhou-internal.aliyuncs.com", 
                  "access_key_id": "your AccessKeyID",
                  "secret_access_key": "your AccessKeySecret ",
                  "bucket": "eric-oss-aws-es-snapshot-s3",
                  "compress": true
            }
      }
    2. snapshot_movies_1 という名前のスナップショットのステータスを表示します。

      GET _snapshot/eric-snapshot-repository/snapshot_movies_1

      查看快照

      説明

      スナップショット作成操作の開始時刻と終了時刻をメモしておきます。このレコードは、ossimport を使用して増分スナップショットのデータを移行するときに使用されます。例:

      • "start_time_in_millis": 1519786844591

      • "end_time_in_millis": 1519786846236

  4. スナップショットからデータをリストアします。

    POST _snapshot/eric-snapshot-repository/snapshot_movies_1/_restore
    {
        "indices": "movies"
    }

    次のコマンドを実行して、movies インデックスの可用性を確認します。

    GET movies/_recovery

    コマンドが正常に実行されると、movies インデックスに 3 セットのデータが表示されます。さらに、データは Amazon OpenSearch Service ドメインのデータと同じです。查看ES索引数据

手順 3: 最終スナップショットを作成し、スナップショットからデータをリストアする

  1. Amazon OpenSearch Service ドメインの movies インデックスにデータを挿入します。

    movies インデックスには 3 セットのデータが含まれています。さらに 2 セットのデータを挿入します。

    插入另外两条数据

    GET movies/_count コマンドを実行して、インデックスのデータ量を表示できます。

  2. スナップショットを作成します。

    次のコマンドを実行して、スナップショットを作成します。詳細については、「Amazon OpenSearch Service ドメインでスナップショットを作成する」をご参照ください。

    PUT _snapshot/eric-snapshot-repository/snapshot_movies_2
    {
    "indices": "movies"
    }

    スナップショットが作成されたら、次のコマンドを実行してスナップショットのステータスを表示します。

    GET _snapshot/eric-snapshot-repository/snapshot_movies_2

    S3 バケット内のオブジェクトを表示します。

    查看S3空间文件

  3. スナップショットを S3 バケットから OSS バケットに転送します。

    ossimport を使用してスナップショットを転送できます。S3 バケットには 2 つのスナップショット オブジェクトが保存されます。isSkipExistFilelocal_job.cfg ファイルの 変数の値を変更して、増分スナップショット オブジェクトを移行できます。

    isSkipExistFile 変数は、データ移行中に既存のオブジェクトをスキップするかどうかを示します。この変数の値はブール値型です。デフォルト値は false です。値を true に設定すると、sizeLastModifiedTime の設定に基づいてオブジェクトがスキップされます。値を false に設定すると、既存のオブジェクトは上書きされます。jobTypeaudit に設定されている場合、この変数は無効です。

    次に、OSS バケット内の増分スナップショット オブジェクトを表示できます。

    新文件迁移到OSS中

  4. 増分スナップショットからデータをリストアします。

    詳細については、「手順 2: 最初のスナップショットを作成し、スナップショットからデータをリストアする」をご参照ください。データをリストアする前に、movies インデックスを無効にする必要があります。リストア後、movies インデックスを有効にできます。

    • movies インデックスを無効にする

      POST /movies/_close
    • movies インデックスのステータスを表示する

      GET movies/_stats
    • スナップショットからデータをリストアする

      POST _snapshot/eric-snapshot-repository/snapshot_movies_2/_restore
      {
          "indices": "movies"
      }
    • movies インデックスを有効にする

      POST /movies/_open

    スナップショットからデータがリストアされると、Elasticsearch クラスタの movies インデックスのドキュメント数は 5 になります。この数は、Amazon OpenSearch Service ドメインのインデックスの数と同じです。

    恢复快照结果

まとめ

スナップショットとリストア機能を使用して、Amazon OpenSearch Service ドメインから Alibaba Cloud Elasticsearch クラスタにデータを移行できます。この機能では、移行中にリクエストと書き込み操作が行われないように、データを移行するインデックスを無効にする必要があります。

詳細については、以下のトピックをご参照ください。

FAQ

Q: OSS のスナップショットから Alibaba Cloud Elasticsearch クラスタにインデックスデータをリストアすると、エラーが返されるのはなぜですか?

A: OSS のスナップショット オブジェクトの名前がスラッシュ (/) などの特殊文字であることが原因である可能性があります。

OSS のスナップショットから Alibaba Cloud Elasticsearch クラスタにインデックスデータをリストアする場合、OSS のスナップショット オブジェクトの名前を特殊文字にすることはできません。グラフィカル管理ツール ossbrowser を使用して、スナップショット オブジェクトを通常のフォルダに移動できます。