Azure Cosmos DB バックアップ

技術情報
最終更新: 2025年08月10日 公開: 2025年04月10日

はじめに

Cosmos DB には 2 種類のバックアップモード(Backup policy mode)がある。

  • Periodic(定期的バックアップ:デフォルト)
  • Continuous(継続的バックアップ)

どちらの設定になっているかは 設定 > バックアップと復元 から確認できる。

図1 バックアップモードの確認図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 のダウンロード図2 Data Migration Tool のダウンロード

設定ファイル(migrationsettings.json)の編集

zip を解凍したフォルダに設定ファイルがある。
ここに入出力の設定を記述する。
SourceSink の方向にデータが出力される。

以下は 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