このエントリは2020/09/10現在の情報に基づいています。将来の機能追加・変更により記載内容との乖離が発生する可能性があります。
US時間2020/09/09にBlobストレージに格納されているオブジェクトの非同期レプリケーションが一般提供されるようになった。
Azure Blob storage object replication is now generally available
https://azure.microsoft.com/updates/azure-blob-storage-object-replication-is-now-generally-available/
いままでPreviewだった機能で、これを使えば、
- 他リージョンなどの別のストレージに対してオブジェクトをプラットフォーム側でコピーしてくれる(わざわざバッチ処理を作る必要がなくなる)
- 利用者に近い場所にオブジェクトを展開できるので、利用者のユーザー体験向上にも寄与する可能性がある
が期待できる。
ドキュメント
ブロック BLOB のオブジェクト レプリケーション / Object replication for block blobs
https://docs.microsoft.com/azure/storage/blobs/object-replication-overview
ブロック BLOB のオブジェクト レプリケーションを構成する / Configure object replication for block blobs
https://docs.microsoft.com/en-us/azure/storage/blobs/object-replication-configure
構成時の注意点
レプリケーションの方向
- ソースからターゲットへの片方向のレプリケーション(双方向ではない)
ソース側で有効化すべきもの
- 変更フィード
- バージョン管理
Azure Blob Storage の変更フィードのサポート / Change feed support in Azure Blob Storage
https://docs.microsoft.com/azure/storage/blobs/storage-blob-change-feed
BLOB のバージョン管理 / Blob versioning
https://docs.microsoft.com/azure/storage/blobs/versioning-overview

利用できないストレージアカウント
- 階層型名前空間(Azure Data Lake Storage Gen2)を持つストレージアカウントでは未サポート
レプリケーション・ポリシー
- 1個のストレージアカウントを、最大2個のターゲットアカウントのソースとして指定可能。ターゲットアカウントにはソースを最大2個まで指定可能。
- ポリシーには最大10個のレプリケーション・ルールを作成可能(2022/05/02に上限が1000にまで拡大)。
ターゲット側のBlobコンテナー
- レプリケーション先のコンテナーは読み取り専用に変わる。読み書き可能に変更することはできない
- 階層ストレージのTier変更は可能
試してみる
以下の構成をためしてみる。

今回はAzure Portalから設定しているが、PowerShell、CLIでも可能。CLIの場合、オブジェクトレプリケーション機能の操作のために、以下のコマンドでAzure CLIに機能追加する必要がある。
az extension add -n storage-or-preview
以下の構成を実施する。
- ストレージアカウントを3個作成(easternjapan1とwesternjapan1、westernjapan2)
- easternjapan1では変更フィード、バージョン管理を有効化しておく
- easternjapan1にはBlobコンテナを2個(今回はej1-container1とej1-container2)、その他のストレージアカウントにはBlobコンテナを1個づつ作成(今回はwj1-containerとwj2-container)
- ソースのBlobコンテナ(ej1-container1とej1-container2)に対し、レプリケーションポリシー、およびルールを作成し割り当てる。

- ターゲットのサブスクリプション、ストレージアカウントを指定してレプリケーション・ポリシーを作成
- BlobコンテナのFrom/Toを指定してレプリケーション・ルールを作成。このコンテナーペアは最大10個まで設定できる。なお、ルールとして以下の設定が可能。
- フィルタ設定:ワイルドカードによる指定はできない。指定した文字(列)に前方一致したオブジェクトのみがレプリケーション対象としてフィルタリングされる
- 上書きコピーの設定:デフォルトは新規追加分のみ。それ以外に全て、もしくは指定日時以後に作成されたオブジェクトのみをコピー対象に指定できる。

設定するとこんな感じ。

これで設定は終了。ej1-container1にファイルを入れてみる。するとwj1-containerにコピーされているはず。

wj1-containerの中身はこんな感じ。

では、ej1-container2に1GBのファイルを30個入れてみる。

当方の環境では、およそ2分ほどの遅延でレプリケーション先のwj2-containerに転送されていた。

非同期レプリケーションなので、リアルタイム性はないこと、レプリケーションのタイミングはファイルサイズ等によって変わる可能性があり一貫性はないことは認識しておかなければならないが、静的コンテンツを伝播したいという場合には有用そう。
価格
通常のBlobストレージの利用料金に加え、変更フィードの価格が必要。さらにリージョン間をまたぐ場合にはネットワーク転送料金も必要。