Amazon Web Services ブログ

Amazon DocumentDB 3.6 を 5.0 にニアゼロダウンタイムでアップグレードする

本記事は 2024 年 4 月 5 日に公開された “Upgrade Amazon DocumentDB 3.6 to 5.0 with near-zero downtime” を翻訳したものです。

Amazon DocumentDB (with MongoDB compatibility) は、エンタープライズワークロードのスケーリングのために設計された、フルマネージド型のネイティブ JSON データベースです。MongoDB API 3.6、4.0、および 5.0 の同じアプリケーションコード、ドライバー、ツールを使用して、基盤となるインフラストラクチャの管理を心配することなく、Amazon DocumentDB 上でワークロードを実行、管理、スケーリングできます。ドキュメント指向データベースとして、Amazon DocumentDB は JSON データの保存、クエリ、インデックス作成を簡単に行うことができます。

Amazon DocumentDB バージョン 5.0 では、Amazon DocumentDB クラスターをバージョン 3.6 および 4.0 から 5.0 へメジャーバージョンアップグレードできるようになりました。これにより、ベクトル検索I/O 最適化ストレージドキュメント圧縮テキスト検索部分インデックスなどの最新機能を利用できるようになります。

この投稿では、インプレースメジャーバージョンアップグレードと Amazon DocumentDB ボリュームクローニング を使用して、ニアゼロダウンタイムで Amazon DocumentDB 3.6 から 5.0 へのアップグレードを実行する方法について説明します。

Amazon DocumentDB 4.0 から Amazon DocumentDB 5.0 へのメジャーバージョンアップグレードをニアゼロダウンタイムで実行するには、Amazon DocumentDB 4.0 を 5.0 にニアゼロダウンタイムでアップグレードするを参照してください。

既存のアップグレードオプション

現在、Amazon DocumentDB 3.6 ユーザーは以下のアプローチを使用して Amazon DocumentDB 5.0 へのメジャーバージョンアップグレードを実行できます:

  • mongodump と mongorestore – mongodump や mongorestore などのコマンドラインユーティリティを使用して、Amazon DocumentDB データベースのバイナリバックアップを作成し、新しい Amazon DocumentDB 5.0 クラスターに復元することができます。このアプローチではアップグレード中に Amazon DocumentDB クラスターがオフラインになるため、ダウンタイムを許容できるワークロードに最適です。
  • AWS DMS AWS Database Migration Service( AWS DMS )を使用して、既存のクラスターから新しい Amazon DocumentDB 5.0 クラスターにデータとインデックスを移行できます。AWS DMS は、サポートされているソースとターゲット間で既存のデータを移行するために使用できるマネージドサービスです。このアプローチでは、追加の Amazon DocumentDB I/O 料金と AWS DMS 使用料が発生します。詳細については、AWS Database Migration Service を使用した Amazon DocumentDB クラスターのアップグレードをご覧ください。
  • インプレースメジャーバージョンアップグレード – この機能を使用すると、データの移行やエンドポイントの変更なく、Amazon DocumentDB クラスターのインプレースアップグレードを実行できますが、一定のダウンタイムが必要であり、ダウンタイムの長さはデータベース、コレクション、インデックスの数によって異なります。詳細については、インプレースメジャーバージョンアップグレードのドキュメントを参照してください。

ソリューション概要

この投稿では、インプレースでのメジャーバージョンアップグレードと Amazon DocumentDB のクローニングを使用して、ニアゼロダウンタイムでメジャーバージョンアップグレードを実行するハイブリッドアプローチを紹介します。
このアプローチにより、クラスター全体のデータを新しいエンドポイントに移行する際に通常発生する I/O コストとアップグレード時間を最小限に抑えることもできます。
以下のステップでは、このソリューションの動作概要を示します:

  1. Python と mongo シェルを利用できる Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを使用して作成します。
  2. ソースの Amazon DocumentDB クラスターで変更ストリームを有効化します。
  3. Amazon DocumentDB MVU CDC 移行ツールを使用して、ソースクラスター全体の変更ストリームトークンを取得します。
  4. Amazon DocumentDB クラスターをクローン作成します。
  5. クローン作成したクラスターでインプレース形式のメジャーバージョンアップグレードを実行します。
  6. Amazon DocumentDB MVU CDC 移行ツールを使用して変更データキャプチャ (CDC) を複製します。
  7. レプリケーションが追いついた後、アプリケーションのエンドポイントをクローン作成したクラスターに変更します。
  8. アップグレード後のクリーンアップを実行します。

前提条件

さらに進めるには、インプレースでのメジャーバージョンアップグレードボリュームのクローン作成について高いレベルの理解が必要です。
このソリューションでは、Amazon DocumentDB 変更ストリームと EC2 インスタンスに関連する最小限のコストがアカウントに発生します。
構成に基づいたコストの見積もりには、AWS 料金計算ツールを使用できます。

Amazon DocumentDB クラスターを上位バージョンにアップグレードする際は、非推奨の機能やオペレーター、使用方法の変更がないか確認してください。
新しいバージョンでアプリケーションを実行し、計画された変更点以外は、ドライバーの動作とパフォーマンスが以前のバージョンと同じであることを確認してください。

アップグレードプロセス中も、ソースとなる 3.6 クラスターは引き続き稼働し、アプリケーショントラフィックを処理することができます。

エンドポイントの切り替えにはまだ若干のダウンタイムが発生することに注意してください。本番環境で実施する前に、ステージング環境などでこのアプローチの複数回のテスト実行を行うことを強くお勧めします。

Python と mongo シェルを使用した EC2 インスタンスの作成

既存の EC2 インスタンスを選択するか、新しいインスタンスを構成することができます。
この EC2 インスタンスは、トークンをキャプチャし、Amazon DocumentDB MVU CDC 移行ツールを使用して CDC の移行を行うスクリプトを実行するために使用します。

  1. インスタンスのセキュリティグループを設定して、Amazon DocumentDB クラスター (ポート 27017) に接続します
  2. EC2 インスタンスに mongo シェルをインストールします。手順については、Install the mongo shell を参照してください。
  3. Amazon Linux 2 AMI EC2 インスタンスで、次のコマンドを使用して python、pymongo、および git をインストールします。
sudo yum install python 
sudo yum install git 
sudo pip3 install pymongo

Amazon DocumentDB 3.6 クラスターでの変更ストリームの有効化

Amazon DocumentDB クラスターのメジャーバージョンアップグレードをダウンタイムを最小限に抑えて実行するには、クラスターで 変更ストリーム を有効にします。変更ストリームは、Amazon DocumentDB クラスター内で発生する更新イベントの時系列順のシーケンスを提供します。

変更ストリームログの保持期間を設定して、CDC で欠落したトランザクションがないことを確認してください。変更ストリームログの保持期間のデフォルトは 3 時間です。この期間は 1 時間から 7 日間の間で任意の値に設定できます。この設定を少なくとも 24 時間に設定することをお勧めします。

以下の AWS Command Line Interface (AWS CLI) コマンドは保持期間を 24 時間に延長します:

aws docdb modify-db-cluster-parameter-group \ 
	--db-cluster-parameter-group-name <parameter group name> \
	--parameters "ParameterName=change_stream_log_retention_duration,
		ParameterValue=86400,ApplyMethod=immediate"

Amazon DocumentDB コンソールからも変更ストリームの保持期間を変更できます。クラスターがデフォルトのパラメータグループを使用している場合は、まずそれをカスタムパラメータグループに変更する必要があり、これにはクラスターの再起動が必要です。

すべてのデータベースで変更ストリームを有効にするには、mongo シェルを使用して Amazon DocumentDB クラスターに接続し、次のコマンドを使用して変更ストリームを有効にします。

db.adminCommand({modifyChangeStreams: 1,database :"",collection:"", enable: true});

変更ストリームの作成を確認するには、$listChangeStreams 集計パイプラインステージを使用して、クラスターで有効化されているすべての変更ストリームを一覧表示します。詳細については、変更ストリームの有効化 を参照してください。

Amazon DocumentDB MVU CDC 移行ツールを使用したクラスター全体の変更ストリームトークンの取得

クラスター全体の変更ストリームトークンを取得するには、Amazon DocumentDB MVU CDC 移行ツール を実行する必要があります。以下の手順を完了してください:

  1. リポジトリをクローンし、ツールフォルダに移動します:
git clone https://github.com/awslabs/amazon-documentdb-tools.git 
cd amazon-documentdb-tools/migration/mvu-tool/
  1. Amazon DocumentDB 認証局 (CA) 証明書をダウンロードする
  1. MVU CDC 移行ツールを get-resume-token オプションで実行して、クラスター全体のトークンを取得します。
    注意: source-cluster-uri のリードプリファレンス設定が secondaryPreferred でないことを確認してください。Amazon DocumentDB はプライマリインスタンスでのみ変更ストリームをサポートしています。
python3 mvu-cdc-migrator.py --source-uri '<source-cluster-uri>' --start-position 0 --verbose --get-resume-token

このツールはトークンを出力に表示します。また、get-resume-token-.txt ファイルにトークンを記録します。

Amazon DocumentDB クラスターのクローン作成

Amazon DocumentDB クローニングを使用すると、同じ Amazon DocumentDB クラスターボリュームを使用し、Amazon DocumentDB 本番クラスターと同じデータを持つ新しいクラスターを作成できます。
クローンの作成は、スナップショットの復元などの他の手法を使用してデータを物理的にコピーするよりも高速で、容量効率に優れています。

AWS CLI を使用してクローンを作成するには、Amazon DocumentDB クローンの作成を参照してください。

AWS Management Console で本番クラスターのクローンを作成するには、次の手順を実行します:

  1. Amazon DocumentDB コンソールで、ナビゲーションペインから クラスター を選択します。
  2. Amazon DocumentDB 本番クラスターを選択し、Actions メニューから クローンを作成する を選択します。
  3. クラスター識別子 には、クローンしたクラスターに付ける名前を入力します(例:cloned-docdb-cluster)。
  4. インスタンスの詳細、構成、ネットワーク設定、保存時の暗号化、ログエクスポート、ポート、削除保護については、Amazon DocumentDB クラスターと同じ設定を使用します。

Amazon DocumentDB クラスターとインスタンスの設定について詳しくは、Amazon DocumentDB クラスターの管理 をご覧ください。

  1. Create clone を選択して、Amazon DocumentDB クラスターのクローンを起動します。

クローンが作成されると、クラスター ページの他の Amazon DocumentDB クラスターと共に一覧表示され、現在の状態が表示されます。クローンの状態が「available」になると、使用する準備が整います。

クローンされたクラスターでのインプレースメジャーバージョンアップグレードの実行

このステップでは、クローンされた Amazon DocumentDB 3.6 クラスターを 5.0 にアップグレードします。
クローンされたクラスターでその場でのメジャーバージョンアップグレードを実行しても、追加料金は発生しません。

インプレース方式のメジャーバージョンアップグレードを実行する前に、すべての前提条件のステップを完了してください。詳細については、Amazon DocumentDB インプレースメジャーバージョンアップグレードを参照してください。

Amazon DocumentDB イベントサブスクリプションへのサブスクライブ の手順に従って、クローンされたクラスターのメンテナンスイベントをサブスクライブします。その後、以下の手順を実行してクラスターをアップグレードしてください:

  1. Amazon DocumentDB コンソールの クラスター ページで、クローンされたクラスターを選択し、アクション メニューから 変更 を選択します。
  2. クラスター識別子 に、クラスターの名前を入力します。
  3. エンジンバージョン で、5.0.0 を選択します。
  4. VPC セキュリティグループを指定するか、既存のものを使用します。
  5. クラスターオプション セクションで、適切なデフォルトまたはカスタムクラスターパラメータグループを選択し、続行 を選択します。
  6. 変更のスケジュール セクションで、すぐに適用 を選択します。
  7. クラスターの変更 を選択して、クラスターのその場でのアップグレードを開始します。

クラスターのステータスが「upgrading」に変わります。アップグレードが完了すると、クラスターのステータスは「available」に戻り、「Database cluster major version has been upgraded」イベントが表示されます。Eventsページをモニタリングすることで、アップグレードの進行状況を追跡することもできます。

  1. インプレースメジャーバージョンアップグレードが完了したら、アップグレードされたクローンが機能し、すべてのデータとインデックスが無事であることを確認するための整合性チェックを実行します。

クローンされたクラスターのデータを変更しないよう注意する必要があります。データの不整合を引き起こす可能性があるためです。

Amazon DocumentDB MVU CDC 移行ツールを使用した CDC のレプリケーション

このステップでは、クローン作成以降のすべてのデータベース変更を複製することで、クローンされたクラスターを Amazon DocumentDB ソースクラスターと同期させます。MVU CDC 移行ツールは、作成した変更ストリームトークンから CDC 変更を複製します。このツールは Amazon DocumentDB 本番クラスターからデータを読み取り、ターゲットのクローンクラスターに書き込みます。

すでに MVU CDC 移行ツールのリポジトリをクローンしているので、変更ストリームトークンを渡して mvu-cdc-migrator.py ツールを実行し、変更を移行します:

cd ~/amazon-documentdb-tools/migration/mvu-tool/
python3 mvu-cdc-migrator.py --source-uri '<source-cluster-uri>' --target-uri '<target-cluster-uri>' --start-position <change stream token> --verbose

Amazon DocumentDB はプライマリインスタンスでのみ変更ストリームをサポートしているため、source-cluster-urisecondaryPreferred という読み取り設定を含めないでください。

Amazon DocumentDB MVU CDC 移行ツールのさまざまなオプションは、GitHub リポジトリで確認できます。

最終的に、ソースとターゲットは同期されます。コレクションに対して count() 操作を実行し、すべての変更イベントが移行されたことを確認することで、同期されているかどうかを検証できます。

Amazon DocumentDB DataDiffer ツールを使用してデータ検証を実行することもできます。

レプリケーションが追いついた後に 5.0 クラスターへアプリケーションエンドポイントを変更する

新しい Amazon DocumentDB 5.0 クラスターが同期され、すべてのチェックに合格したことを確認したら、アプリケーションのデータベース接続エンドポイントを Amazon DocumentDB 3.6 クラスターから Amazon DocumentDB 5.0 クラスターに変更できます。

アップグレード後のクリーンアップの実行

以下の手順を実行して、リソースをクリーンアップしてください:

  1. Amazon DocumentDB 3.6 クラスターを削除します
  2. クローン作成操作中に変更ストリームの設定が 5.0 クラスターにコピーされたため、Amazon DocumentDB 5.0 本番クラスターの変更ストリームを無効にします。
  3. EC2 インスタンスを削除します。
  4. Amazon DocumentDB 5.0 クラスターに追加のインスタンスを追加して Amazon DocumentDB 本番クラスターと一致させるには、Amazon DocumentDB コンソールの クラスターページでクローンされたクラスターを選択し、アクションメニューから インスタンスの追加 を選択します。
  5. Amazon DocumentDB 3.6 クラスターに設定されていたモニタリングとアラートをコピーまたは設定します。

結論

この投稿では、現行環境でのメジャーバージョンアップグレードと Amazon DocumentDB のクローン作成機能を使用して、最小限のコストとニアゼロダウンタイムで Amazon DocumentDB 3.6 から 5.0 にアップグレードする方法を紹介しました。

著者について

この記事は、Kunal Agarwal, Anshu Vajpayee によって投稿された記事を翻訳したものです。