2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【OCI クラウド移行ガイド】AWSのOpenSearchからOCI Search with OpenSearchへ移行の検証

Last updated at Posted at 2024-08-29

2024年8月の内容です。

OCI Search with OpenSearchって?

Oracle Cloud Infrastructure Search Service with OpenSearch は、OpenSearch に基づいてアプリケーション内検索ソリューションを構築するために使用できるマネージド・サービスです。

ドキュメントはこちら

概要資料はこちら

チュートリアルはこちら

流れ

  • STEP1.【AWS】手動のスナップショット作成
  • STEP2.【OCI】そのスナップショットをOCIのObjectStorageへアップロード
  • STEP3.【OCI】移行先クラスタを作成し、リポジトリを登録
  • STEP4.【OCI】スナップショットをリストア

AWSに関しては、以下の記事を参考に、

OCIに関しては、以下の記事を参考に検証を進めていきます。

今回は権限周りに関して、上記のドキュメントに記載されている権限は既に付与されているものとします。特段今回は解説しないのでご承知おきください。

バージョンに注意してください。
AWSとOCIのOpenSearchバージョンが一緒であることを確認してください。(特にOCIは2.11までしかサポートされてません) ※2024/8時点

ちなみに、私はAWSのバージョンが2.15で移行時にエラーを出しました

OCIでクラスタを作成するときは、スナップショットをインポートするソース・クラスタ(今回はAWS)と同じノード構成でクラスタを構成してください。

前提

事前にAWSのOpenSearchには、OCIのチュートリアルであるデータセットを入れておき、
スナップショットを取って、OCIでリストアした際にそのデータセットが見れることを確認します。

AmaberさんのデータをOCIのOpenSearchでも見れることがゴールとします。
image.png

STEP1.【AWS】手動のスナップショット作成

こちらの記事を参考に、スナップショット作成しました。

必要なポリシーやロールなどの権限周りは、上記の公式サイトを見てもいいですし、
ググるといろんな方の検証記事も出てきます。

  • スナップショット作成
入力
PUT /_snapshot/index-repo-s3/snapshot0829
  • スナップショットの確認
入力
GET /_snapshot/index-repo-s3/_all

Cloudshellを使って、S3からローカルにダウンロードする。

スナップショットの作成が上手くいくと、予め作成したS3バケットにファイルが吐かれました。
image.png

  • Cloudshell上にコピー
[cloudshell-user@ip-10-134-17-224 ~]$ aws s3 cp s3://bucket-es-repo-snapshot-0826 ./snapshot20240829 --recursive
  • 該当ファイルをzip化
[cloudshell-user@ip-10-134-17-224 ~]$ zip snapshot20240829.zip -r snapshot20240829/

[アクション]から[ファイルのダウンロード]を押し、該当zipをダウンロードする

image.png
image.png

STEP2.【OCI】そのスナップショットをOCIのObjectStorageへアップロード

ObjectSroategeにバケットを作成

以下のチュートリアルの「1.コンソール画面の確認とバケットの作成」を参考に実施する

ちなみに私はこんなバケットを今回用の作成しました。
バケット名だけわかりやすく指定して、それ以外はデフォルト値です。

image.png

スナップショットをバケットにアップロードする

  • CloudShellにzipファイルをアップロード

今回はCloudShellを使って、CLIでスナップショットをオブジェクトストレージにアップロードします。

Cloudshellはコンソール画面の右上から出すことができます。
image.png

CloudShellの右上の歯車マークからアップロードを選択し、さっきのzipファイルを選択して、アップロードします。
image.png

  • 解凍
ritsuko_to@cloudshell:~ (ap-osaka-1)$ unzip snapshot20240829.zip 
  • アップロード
    今回はフォルダ構成も含むので、CLIでサクッとアップロードしたいと思います。
    ご自身の環境に、以下の3つの箇所は編集してコマンドを打ってください。
oci os object bulk-upload -bn <バケット名> -ns <ネームスペース> --src-dir <アップロードしたいフォルダ名>     

ここにドキュメントも置いておくので、コマンドで困ったらこちらもご確認下さい。
https://docs.oracle.com/en-us/iaas/tools/oci-cli/3.47.0/oci_cli_docs/cmdref/os/object/bulk-upload.html

上手くいくと、該当のObjectStorageにフォルダが吐かれます。

image.png

STEP3.【OCI】移行先クラスタを作成し、リポジトリを登録

OCIでOpenSearchのクラスタを作成

具体的な作成手順は、以下のチュートリアルがとても参考になります。

上記のサイトの「2.クラスタへの接続」までを実施して、
OpenSearchのダッシュボードへアクセスの確認をしておきます。
image.png

リポジトリの登録

以下のようにレポジトリを登録します。<>はご自身の環境に応じて修正下さい

PUT _snapshot/<repository_name> ※レポジトリ名を指定
{
   "type": "oci",
      "settings": {
      "client": "default",
      "endpoint": "<objectstorage_endpoint>", ※ご自身のオブジェクト・ストレージ・バケットのエンドポイントに修正
      "bucket": "<bucket_name>", ※作成したオブジェクトストレージのバケット名に修正
      "namespace": "<namespace>", ※作成したバケットのオブジェクト・ストレージ・ネームスペース。
      "authType": "RESOURCE_PRINCIPAL",
      "bucket_compartment_id": "<bucket_compartment_OCID>", ※バケットが配置されているコンパートメントのOCID。
      "forceBucketCreation": true
   }
}

objectstorage_endpointbucket_namenamespacebucket_compartment_OCIDをどこで確認すればいいかは、
以下に解説しているので、気になる方は▶をクリックしてご確認下さい。

objectstorage_endpoint

オブジェクトストレージのエンドポイントは個々の環境によって変わるのではなく、リージョン単位で変わります。
以下のリンクの「オブジェクト・ストレージおよびアーカイブ・ストレージApi」の「オブジェクト・ストレージAPI」にリージョン毎のエンドポイントが書いてあります。
ちなみに東京リージョンであれば、https://objectstorage.ap-tokyo-1.oraclecloud.comになります。

https://docs.oracle.com/ja-jp/iaas/Content/API/Concepts/apiref.htm

bucket_name これです。

image.png

namespace これです。

image.png

bucket_compartment_OCID これです。

image.png

実行結果

image.png

STEP4.【OCI】スナップショットをリストア

このドキュメントを参考に、リストアをします。
個人的に、考え無しにドキュメントのひな形を使った結果、
注意点としては"rename_replacement": "restored_$1",と書いてるので、
リストアしたインデックスには先頭にrestored_が付くことです。

POST _snapshot/<repository_name>/<snapshot_name>/_restore
{
    "indices": "<index_name_to_include>,-<index_name_to_exclude>",
    "ignore_unavailable": true,
    "include_global_state": false,
    "rename_pattern": "(.+)",
    "rename_replacement": "restored_$1",
    "include_aliases": true
repository_name

先ほどの手順でOCI上で作成したリポジトリ名です。

snapshot_name

AWSでスナップショット作成する際に、指定した名前です。

index_name_to_include と index_name_to_exclude リストア先に同じindex名が存在するとリストア出来ない為、 リストアしたいindexとリストアから除きたいindex名を指定できます。

実行結果

POST _snapshot/index-repo-oci/snapshot0829/_restore
{
    "indices": "account",
    "ignore_unavailable": true,
    "include_global_state": false,
    "rename_pattern": "(.+)",
    "rename_replacement": "restored_$1",
    "include_aliases": true
}

確認

試しに検索してみます。

GET restored_accounts/_search
{
  "query": {
    "match": {
      "firstname": "Amber"
    }
  }
}

出てきました!!!

image.png

正直ここらへんの記事は1つにまとまっていることがなく、
いろんな記事を参考に検証してみて、今回1つにまとめてみました。
(個人的には権限周りの設定が足りなく苦労しました。)

不備などあれば、ご連絡下さい。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?