Azure Cosmos DB バックアップ
目次
はじめに
Cosmos DB には 2 種類のバックアップモード(Backup policy mode)がある。
- Periodic(定期的バックアップ:デフォルト)
- Continuous(継続的バックアップ)
どちらの設定になっているかは 設定
> バックアップと復元
から確認できる。
図1 バックアップモードの確認
デフォルトでは以下の設定になっている。
- バックアップモードは
Periodic(定期)
- 4 時間(240分)ごとに自動バックアップ
- 最大 2 つまでのバックアップを保持
- 料金は無料(バックアップ保持数を 2 より大きくすると課金対象)
Periodic(定期)
の場合、復元したい時には Microsoft のサポートに連絡しなければならない。
データベースまたはコンテナーを誤って削除した場合は、サポート チケットを申請するか、Azure サポートに連絡して、自動オンライン バックアップからデータを復元できます。
自分で復元操作を行いたい場合は Continuous(継続)
を選択する必要があるが、課金対象となる。
そこで、Azure Cosmos DB のバックアップ機能を使用せずにデータをエクスポートする方法について調査してみた。
Azure ポータル
Azure ポータルのデータ エクスプローラーで Cosmos DB のデータを閲覧・編集することはできるが、エクスポートする機能はなさそう。
Upload Item
で JSON データをインポートすることはできるので、復元はここから可能。
Azure Cosmos DB Desktop Data Migration Tool
- オープンソースのコマンドラインツール
- エクスポート/インポートの両方ができる
- エクスポート/インポート先は JSON だけなく、CSV、Azure Blob Storage、SQL Server なども指定可能
- 入出力の指定は設定ファイルで行う
ダウンロード
GitHub の Releases から最新版をダウンロード
図2 Data Migration Tool のダウンロード
設定ファイル(migrationsettings.json)の編集
zip を解凍したフォルダに設定ファイルがある。
ここに入出力の設定を記述する。
Source
→ Sink
の方向にデータが出力される。
以下は Cosmos DB(Cosmos-NoSql) からローカル PC の json ファイルに出力する例。
{
"Source": "Cosmos-NoSql",
"Sink": "JSON",
"SourceSettings":
{
"ConnectionString": "AccountEndpoint=https://<Cosmos DBアカウント名>.documents.azure.com:443/;AccountKey=<アカウントキー>;",
"Database":"<データベース名>",
"Container":"<コンテナ名>",
"IncludeMetadataFields": true
},
"SinkSettings":
{
"FilePath": "output.json",
"Indented": true
}
}
実行
dmt.exe
カレントディレクトリに output.json
が出力される。
JSON から Cosmos DB へのインポートなど、他のパターンについては Example migrationsettings.json Files を参照。
補足
Cosmos DB は Request Unit(RU)課金なので、その分の課金は発生するが、ローカル PC にダウンロードしてもアウトバウンド転送(インターネットへの転送)料金は発生しない。(Azure Blob Storage ではアウトバウンド転送料金が発生する)
Azure Data Factory
- Cosmos DB → Azure Blob Storage にエクスポート
- Blob Storage からローカルにダウンロード可能
- 大規模データ向け、スケジュール可
SDK 経由でバックアップ
自前でプログラムを書く。
- .NET / Python / Node.js SDK でデータを取得し、ローカル JSON に保存
- Change Feed API を組み合わせれば差分エクスポートも可能
SELECT * FROM c
これで全件取得はできるので、あとはよしなに。
参考
Azure Cosmos DB の定期的なバックアップと復元
Azure Cosmos DB Desktop Data Migration Tool