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

Elasticsearch:Amazon OpenSearch Service のインデックスを Alibaba Cloud Elasticsearch に移行

最終更新日:Jun 03, 2026

スナップショットを使用して、Amazon OpenSearch Service から Alibaba Cloud Elasticsearch にインデックスを移行します。このガイドでは Elasticsearch 7.1.0 クラスターを使用します。

仕組み

このクラウド非依存のソリューションは、Elasticsearch のスナップショット機能を使用します。Alibaba Cloud の Migration Implementation ツールを使用して、AWS ES のインデックスまたは Tencent Cloud COS のスナップショットデータを Alibaba Cloud OSS に移行し、OSS リポジトリから復元します。Manual Backup and Restoration

スナップショットは、同一またはそれ以降のバージョンのクラスターにのみ復元できます。Snapshot compatibility

背景情報

この移行の参照アーキテクチャは次のとおりです。

Architecture for migrating from AWS to Alibaba Cloud ES

概念

  • Elasticsearch:分散型の RESTful 検索および分析エンジンです。Elastic Stack の中核として、検索と分析のためのデータを一元的に保存します。

  • Kibana:Elasticsearch データを検索および分析するための可視化ツールです。

  • Amazon OpenSearch Service:Elasticsearch API とリアルタイム分析を提供する AWS のマネージドサービスです。

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

  • スナップショットと復元:個々のインデックスまたはクラスター全体のスナップショットをリモートリポジトリ (共有ファイルシステム、Amazon S3、または HDFS) に作成し、互換性のある Elasticsearch バージョンに復元します。

    • バージョン 5.x で作成したインデックスのスナップショットは、バージョン 6.x に復元できます。

    • バージョン 2.x で作成したインデックスのスナップショットは、バージョン 5.x に復元できます。

    • バージョン 1.x で作成したインデックスのスナップショットは、バージョン 2.x に復元できます。

ソリューション概要

移行手順:

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

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

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

      このスナップショットは、前の手順で作成した Amazon S3 バケットに自動的に保存されます。

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

    4. ossimport を使用して、Amazon S3 バケットから Alibaba Cloud OSS バケットにデータを転送します。

    5. この完全スナップショットを Alibaba Cloud Elasticsearch クラスターに復元します。

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

    前述の手順を繰り返して、増分スナップショットを処理して復元します。

  3. 最終スナップショットを作成し、サービスカットオーバーを実施します。

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

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

    3. 最終増分スナップショットを OSS に移行し、その後 Alibaba Cloud Elasticsearch クラスターに復元します。

    4. サービスを Alibaba Cloud Elasticsearch クラスターに切り替え、移行を検証します。

前提条件

次の項目を確認してください。

  • Elasticsearch 7.1.0 の Amazon OpenSearch Service ドメインがシンガポールリージョンに作成されていること。

    Create an Amazon OpenSearch Service domain

  • バージョン 7.1.0 の Alibaba Cloud Elasticsearch クラスターが中国 (杭州) リージョンに作成されていること。

    Create an Alibaba Cloud Elasticsearch cluster

  • OSS バケットが作成されていること。

    このガイドでは、中国 (杭州) リージョンのバケットを使用します。ストレージクラスは Standard、ACL は非公開です。それ以外のパラメーターはデフォルト設定を使用します。Create buckets

  • 移行するインデックスを用意してください。このトピックでは、moviesというインデックスを例として使用します。

AWSでの手動スナップショットの前提条件

Amazon OpenSearch Service は、プライマリインデックスシャードの日次スナップショットを自動的に作成し、事前設定された S3 バケットに 14 日間、追加料金なしで保存します。これらのスナップショットはドメインを復元できますが、新しいドメインにデータを移行することはできません。移行するには、独自の S3 バケットに手動スナップショットを作成します。標準の S3 ストレージ料金が適用されます。

インデックスのスナップショットを手動で作成および復元するには、IAM と Amazon S3 が必要です。スナップショットを作成する前に、次の前提条件が満たされていることを確認してください。

前提条件

説明

Amazon S3 バケットを作成する

Amazon OpenSearch Service ドメインの手動スナップショットを保存します。

IAM ロールを作成する

Amazon OpenSearch Service に権限を付与します。信頼関係の Principal ステートメントで Amazon OpenSearch Service を指定します。このロールを引き受ける権限を持つ IAM ユーザーのみが、スナップショットリポジトリを登録できます。

IAM ポリシーを作成する

IAM ロールが S3 バケットに対して実行できるアクションを指定します。このポリシーを IAM ロールにアタッチします。Resource ステートメントで S3 バケットの ARN を指定する必要があります。

  • Amazon S3 バケットの作成

    手動スナップショットを保存するための S3 バケットを作成します。次の用途で使用するため、ARN を記録しておいてください。

    • IAM ロールにアタッチする IAM ポリシーの Resource ステートメント。

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

    S3 バケット ARN の例:

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

    IAM ロールの信頼関係で、es.amazonaws.comService ステートメントに指定されていることを確認してください。

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

    IAM コンソールで信頼関係の詳細を確認します。

    View trust relationship

    説明

    AWS サービス用のロールを作成する際、Amazon OpenSearch Service は Select role type ドロップダウンリストに表示されません。AWS EC2 を選択してロールを作成し、その後、信頼関係を編集して ec2.amazonaws.comes.amazonaws.com に変更してください。

  • IAM ポリシーの作成

    IAM ポリシーを作成し、IAM ロールにアタッチします。次の例では、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. ポリシーの内容をポリシーエディターにコピーします。Policy editor

    2. ポリシーを確認します。Policy Summary

    3. IAM ポリシーを IAM ロールにアタッチします。Attach IAM policy to role

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

手動スナップショットを作成する前に、Amazon OpenSearch Service にスナップショットリポジトリを登録します。IAM ロールの信頼関係で指定したユーザーまたはロールの認証情報を使用して、登録リクエストに署名します。Prerequisites for manual snapshots on AWS

重要

curl は AWS のリクエスト署名をサポートしていないため、スナップショットリポジトリの登録には使用できません。代わりに、サンプルの Python クライアント (register_snapshot_repository.py) を使用してください。

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

  2. サンプルの Python クライアントファイルを変更します。

    ハイライトされている値を構成に合わせて更新し、ファイルを snapshot.py として保存します。

    サンプルの Python クライアントファイルのパラメーター:

    パラメーター

    説明

    region

    スナップショットリポジトリを作成する AWS リージョンです。

    host

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

    aws_access_key_id

    IAM 認証情報のアクセスキー ID です。

    aws_secret_access_key

    IAM 認証情報のシークレットアクセスキーです。

    path

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

    data

    IAM ロール用に作成した S3 バケットの名前と ARN を含める必要があります。Prerequisites for manual snapshots on AWS

    重要
    • スナップショットリポジトリで S3 管理キーによるサーバー側の暗号化を有効にするには、settings JSON に "server_side_encryption": true を追加します。

    • Amazon S3 バケットが ap-southeast-1 リージョンにある場合は、"region": "ap-southeast-1" の代わりに "endpoint": "s3.ap-southeast-1.amazonaws.com" を使用します。

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

    サンプルの Python クライアントには boto 2.x が必要です。

    # 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 コンソールで、[デベロッパーツール] > [コンソール] に移動して、次を実行します。

    GET _snapshot

    View request result

手順 2:初期スナップショットの作成と復元

  1. Amazon OpenSearch Service でスナップショットを手動で作成します。

    説明

    次のコマンドを Kibana コンソールで実行するか、Linux または macOS のコマンドラインから curl を使用して実行します。

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

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

      GET _snapshot/eric-snapshot-repository/snapshot_movies_1

      Check snapshot status

    • Amazon S3 コンソールでスナップショットファイルを確認します。View snapshot files in S3

  2. スナップショットデータを Amazon S3 から Alibaba Cloud OSS に転送します。

    Migrate applications from Amazon S3 to OSS

    転送後、OSS コンソールでスナップショットデータを確認します。

    Snapshot data in OSS

  3. スナップショットを Alibaba Cloud Elasticsearch クラスターに復元します。

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

      重要

      Elasticsearch のスナップショット移行では、各 Elasticsearch クラスターが専用のスナップショットリポジトリまたはパスを使用していることを確認する必要があります。複数のクラスターが同じリポジトリを共有すると、データの復元に失敗したり、データが失われたりする可能性があります。

      移行先の Alibaba Cloud Elasticsearch クラスターの Kibana コンソール (Kibana コンソールにログオンする) で、[開発ツール] > [コンソール] に移動し、同じ名前のスナップショットリポジトリを作成します。

      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

      View snapshot

      説明

      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 ドメインと一致します。View ES index data

手順 3:最終スナップショットの作成と復元

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

    movies インデックスにはすでに 3 件のドキュメントがあります。さらに 2 件挿入します。

    Insert two more documents

    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

    Amazon S3 バケットにリストされているファイルを確認します。

    View files in S3 bucket

  3. 増分スナップショットデータを Amazon S3 から Alibaba Cloud OSS に転送します。

    ossimport を使用して S3 から OSS にデータを移行します。新しいファイルのみを移行するには、local_job.cfgisSkipExistFile を true に設定します。

    isSkipExistFile が true の場合、sizeLastModifiedTime が一致するオブジェクトはスキップされます。false (デフォルト) の場合、既存のオブジェクトは上書きされます。このオプションは jobTypeaudit の場合は無効です。

    移行後、OSS で新しいファイルを確認します。

    New files migrated to 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

    復元後、movies インデックスには 5 件のドキュメントが含まれ、Amazon OpenSearch Service ドメインと一致します。

    Snapshot restore result

まとめ

スナップショットを使用して、Amazon OpenSearch Service から Alibaba Cloud Elasticsearch にインデックスデータを移行します。移行中の書き込みやリクエストを防ぐため、復元前に移行先クラスター上のインデックスをクローズする必要があります。

関連リソース:

よくある質問

なぜリポジトリの一意性が必要なのですか?

複数の Elasticsearch クラスターが同じスナップショットリポジトリを共有すると、次の問題が発生する可能性があります。

  1. メタデータの競合:複数のクラスターが同じリポジトリ上で動作すると、メタデータファイルが上書きまたは破損し、スナップショットを正しく識別できなくなる可能性があります。

  2. データの上書き:異なるクラスターのスナップショットが相互にデータファイルを上書きし、データ損失や破損が発生する可能性があります。

  3. 復元の失敗:Elasticsearch がどのデータがどのクラスターに属するかを判断できず、復元操作が失敗したり、誤ったデータが復元されたりする可能性があります。

OSS スナップショットの復元が失敗するのはなぜですか?

OSS 内のスナップショットオブジェクト名にスラッシュ (/) などの特殊文字が含まれている場合、このエラーが発生することがあります。

Alibaba Cloud Elasticsearch は、OSS スナップショットの復元時に特殊文字を含むオブジェクト名をサポートしていません。ossbrowser を使用して、スナップショットデータを標準的な名前のフォルダーに移動してください。