オブジェクト レプリケーションを使用すると、ソース ストレージ アカウントと宛先アカウントの間でブロック BLOB を非同期にコピーできます。 オブジェクト レプリケーションを構成するときに、ソース ストレージ アカウントと宛先アカウントを指定するレプリケーション ポリシーを作成します。 レプリケーション ポリシーには、ソース コンテナーと宛先コンテナーを指定し、レプリケートするソース コンテナー内のブロック BLOB を示す 1 つ以上のルールが含まれます。 オブジェクト レプリケーションの詳細については、「ブロック BLOB のオブジェクト レプリケーション」を参照してください。
この記事では、Azure portal、PowerShell、または Azure CLI を使用してオブジェクト レプリケーション ポリシーを構成する方法について説明します。 また、Azure Storage リソース プロバイダー クライアント ライブラリのいずれかを使用して、オブジェクト レプリケーションを構成することもできます。
[前提条件]
オブジェクト レプリケーションを構成する前に、ソース ストレージ アカウントと移行先ストレージ アカウントがまだ存在しない場合は作成します。 ソース アカウントと移行先アカウントには、汎用 v2 ストレージ アカウントまたは Premium ブロック BLOB アカウントのいずれかを指定できます。 詳細については、Azure Storage アカウントの作成に関するページを参照してください。
オブジェクト レプリケーションでは、ソース アカウントと移行先アカウントの両方で BLOB のバージョン管理が有効になっており、その BLOB 変更フィードがソース アカウントに対して有効になっている必要があります。 BLOB のバージョン管理の詳細については、 BLOB のバージョン管理に関するページを参照してください。 変更フィードの詳細については、 Azure Blob Storage での変更フィードのサポートに関するページを参照してください。 これらの機能を有効にすると、追加コストが発生する可能性があることに注意してください。
ストレージ アカウントのオブジェクト レプリケーション ポリシーを構成するには、ストレージ アカウント以上のレベルをスコープとする Azure Resource Manager 共同作成者 ロールが割り当てられている必要があります。 詳細については、Azure ロールベースのアクセス制御 (Azure RBAC) ドキュメントの Azure 組み込みロール を参照してください。
階層型名前空間が有効になっているアカウントでは、オブジェクト レプリケーションはまだサポートされていません。
ソース ストレージ アカウントと移行先ストレージ アカウントの両方にアクセスできる場合は、両方のアカウントでオブジェクト レプリケーション ポリシーを構成できます。 次の例は、Azure portal、PowerShell、または Azure CLI を使用してオブジェクト レプリケーションを構成する方法を示しています。
Azure portal でオブジェクト レプリケーションを構成する場合は、ソース アカウントでポリシーを構成するだけで済みます。 ソース アカウントの構成を完了すると、Azure ポータルにより、宛先アカウントにポリシーが自動的に作成されます。
Azure portal でレプリケーション ポリシーを作成するには、次の手順に従います。
Azure portal でソース ストレージ アカウントに移動します。
[ データ管理] で、[ オブジェクト レプリケーション] を選択します。
[レプリケーション ルールの作成] を選択します。
移行先のサブスクリプションとストレージ アカウントを選択します。
[ コンテナー ペアの詳細 ] セクションで、ソース アカウントからソース コンテナーを選択し、移行先アカウントから宛先コンテナーを選択します。 Azure portal から、レプリケーション ポリシーごとに最大 10 個のコンテナー ペアを作成できます。 10 個を超えるコンテナー ペア (最大 1000 個) を構成するには、「 JSON ファイルを使用したオブジェクト レプリケーションの構成」を参照してください。
次の図は、一連のレプリケーション規則を示しています。
必要に応じて、プレフィックス パターンに一致する BLOB のみをコピーする 1 つ以上のフィルターを指定します。 たとえば、プレフィックス bを指定した場合、その文字で始まる名前の BLOB のみがレプリケートされます。 プレフィックスの一部として仮想ディレクトリを指定できます。 最大 5 つのプレフィックス一致を追加できます。 プレフィックス文字列はワイルドカード文字をサポートしていません。
次の図は、レプリケーション ルールの一部としてコピーされる BLOB を制限するフィルターを示しています。
既定では、コピー スコープは新しいオブジェクトのみをコピーするように設定されています。 コンテナー内のすべてのオブジェクトをコピーするか、カスタム日時からオブジェクトをコピーするには、 変更 リンクを選択し、コンテナー ペアのコピー スコープを構成します。
次の図は、指定した日時以降にオブジェクトをコピーするカスタム コピー スコープを示しています。
[ 保存して適用] を選択してレプリケーション ポリシーを作成し、データのレプリケートを開始します。
オブジェクト レプリケーションを構成すると、次の図に示すように、レプリケーション ポリシーと規則が Azure portal に表示されます。
PowerShell を使用してレプリケーション ポリシーを作成するには、まず Az.Storage PowerShell モジュールのバージョン 2.5.0 以降をインストールします。 Azure PowerShell のインストールの詳細については、PowerShellGet を使用した Azure PowerShell のインストールに関するページを参照してください。
次の例は、レプリケーション先アカウントでレプリケーション ポリシーを作成してから、ソース アカウントで作成する方法を示しています。 山かっこ内の値は、実際の値に置き換えてください。
# Sign in to your Azure account.
Connect-AzAccount
# Set variables.
$rgName = "<resource-group>"
$srcAccountName = "<source-storage-account>"
$destAccountName = "<destination-storage-account>"
$srcContainerName1 = "source-container1"
$destContainerName1 = "dest-container1"
$srcContainerName2 = "source-container2"
$destContainerName2 = "dest-container2"
# Enable blob versioning and change feed on the source account.
Update-AzStorageBlobServiceProperty -ResourceGroupName $rgName `
-StorageAccountName $srcAccountName `
-EnableChangeFeed $true `
-IsVersioningEnabled $true
# Enable blob versioning on the destination account.
Update-AzStorageBlobServiceProperty -ResourceGroupName $rgName `
-StorageAccountName $destAccountName `
-IsVersioningEnabled $true
# List the service properties for both accounts.
Get-AzStorageBlobServiceProperty -ResourceGroupName $rgName `
-StorageAccountName $srcAccountName
Get-AzStorageBlobServiceProperty -ResourceGroupName $rgName `
-StorageAccountName $destAccountName
# Create containers in the source and destination accounts.
Get-AzStorageAccount -ResourceGroupName $rgName -StorageAccountName $srcAccountName |
New-AzStorageContainer $srcContainerName1
Get-AzStorageAccount -ResourceGroupName $rgName -StorageAccountName $destAccountName |
New-AzStorageContainer $destContainerName1
Get-AzStorageAccount -ResourceGroupName $rgName -StorageAccountName $srcAccountName |
New-AzStorageContainer $srcContainerName2
Get-AzStorageAccount -ResourceGroupName $rgName -StorageAccountName $destAccountName |
New-AzStorageContainer $destContainerName2
# Define replication rules for each container.
$rule1 = New-AzStorageObjectReplicationPolicyRule -SourceContainer $srcContainerName1 `
-DestinationContainer $destContainerName1 `
-PrefixMatch b
$rule2 = New-AzStorageObjectReplicationPolicyRule -SourceContainer $srcContainerName2 `
-DestinationContainer $destContainerName2 `
-MinCreationTime 2021-09-01T00:00:00Z
# Create the replication policy on the destination account.
$destPolicy = Set-AzStorageObjectReplicationPolicy -ResourceGroupName $rgName `
-StorageAccountName $destAccountName `
-PolicyId default `
-SourceAccount $srcAccountName `
-Rule $rule1,$rule2
# Create the same policy on the source account.
Set-AzStorageObjectReplicationPolicy -ResourceGroupName $rgName `
-StorageAccountName $srcAccountName `
-InputObject $destPolicy
Azure CLI を使用してレプリケーション ポリシーを作成するには、まず Azure CLI バージョン 2.11.1 以降をインストールします。 詳細については、「Azure CLI はじめに」を参照してください。
次に、 az storage account blob-service-properties update コマンドを呼び出して、ソース ストレージ アカウントとコピー先ストレージ アカウントで BLOB のバージョン管理を有効にし、ソース アカウントの変更フィードを有効にします。 山かっこ内の値は、実際の値に置き換えてください。
az login
az storage account blob-service-properties update \
--resource-group <resource-group> \
--account-name <source-storage-account> \
--enable-versioning \
--enable-change-feed
az storage account blob-service-properties update \
--resource-group <resource-group> \
--account-name <dest-storage-account> \
--enable-versioning
それぞれのストレージ アカウントに、ソース コンテナーと移行先コンテナーを作成します。
az storage container create \
--account-name <source-storage-account> \
--name source-container-1 \
--auth-mode login
az storage container create \
--account-name <source-storage-account> \
--name source-container-2 \
--auth-mode login
az storage container create \
--account-name <dest-storage-account> \
--name dest-container-1 \
--auth-mode login
az storage container create \
--account-name <dest-storage-account> \
--name dest-container-2 \
--auth-mode login
az storage account or-policy create を呼び出して、ターゲット アカウントに新しいレプリケーション ポリシーと関連付けられたルールを作成します。
az storage account or-policy create \
--account-name <dest-storage-account> \
--resource-group <resource-group> \
--source-account <source-storage-account> \
--destination-account <dest-storage-account> \
--source-container source-container-1 \
--destination-container dest-container-1 \
--min-creation-time '2021-09-01T00:00:00Z' \
--prefix-match a
Azure Storage では、新しいポリシーの作成時にポリシー ID が設定されます。 ポリシーにルールを追加するには、 az storage account または-policy rule add を呼び出し、ポリシー ID を指定します。
az storage account or-policy rule add \
--account-name <dest-storage-account> \
--resource-group <resource-group> \
--source-container source-container-2 \
--destination-container dest-container-2 \
--policy-id <policy-id> \
--prefix-match b
次に、ポリシー ID を使用してソース アカウントにポリシーを作成します。
az storage account or-policy show \
--resource-group <resource-group> \
--account-name <dest-storage-account> \
--policy-id <policy-id> |
az storage account or-policy create --resource-group <resource-group> \
--account-name <source-storage-account> \
--policy "@-"
ソース ストレージ アカウントに対するアクセス許可がない場合、または 10 個を超えるコンテナー ペアを使用する場合は、移行先アカウントでオブジェクト レプリケーションを構成し、ポリシー定義を含む JSON ファイルを別のユーザーに提供して、ソース アカウントで同じポリシーを作成できます。 たとえば、移行元アカウントが移行先アカウントとは異なる Microsoft Entra テナントにある場合は、このアプローチを使用してオブジェクト レプリケーションを構成できます。
ポリシー定義を含む JSON ファイルを作成する方法については、 ポリシー定義ファイルを参照してください。
注
ストレージ アカウントでは、テナント間オブジェクトレプリケーションが既定で許可されます。 テナント間のレプリケーションを防ぐために、 AllowCrossTenantReplication プロパティを設定して、ストレージ アカウントのテナント間オブジェクト レプリケーションを禁止できます。 詳細については、「 Microsoft Entra テナント間でのオブジェクト レプリケーションの防止」を参照してください。
このセクションの例では、移行先アカウントでオブジェクト レプリケーション ポリシーを構成し、そのポリシーの JSON ファイルを取得し、別のユーザーがソース アカウントでポリシーを構成するために使用できる方法を示します。
Azure portal で JSON ファイルを使用して宛先アカウントのオブジェクト レプリケーションを構成するには、次の手順に従います。
レプリケーション先アカウントのレプリケーション ポリシーを定義するローカル JSON ファイルを作成します。 Azure Storage でポリシー ID が定義されるように、 policyId フィールドを 既定値 に設定します。
レプリケーション ポリシーを定義する JSON ファイルを簡単に作成する方法は、まず Azure portal で 2 つのストレージ アカウント間にテスト レプリケーション ポリシーを作成することです。 その後、レプリケーション規則をダウンロードし、必要に応じて JSON ファイルを変更できます。
Azure portal で、移行先アカウントの オブジェクト レプリケーション 設定に移動します。
[ レプリケーション 規則のアップロード] を選択します。
JSON ファイルをアップロードします。 次の図に示すように、作成されるポリシーとルールが Azure portal に表示されます。
[ アップロード] を選択して、レプリケーション先アカウントにレプリケーション ポリシーを作成します。
その後、ソース アカウントを構成するために別のユーザーに提供できるポリシー定義を含む JSON ファイルをダウンロードできます。 この JSON ファイルをダウンロードするには、次の手順に従います。
Azure portal で、移行先アカウントの オブジェクト レプリケーション 設定に移動します。
次の図に示すように、ダウンロードするポリシーの横にある [ その他 ] ボタンを選択し、[ ルールのダウンロード] を選択します。
JSON ファイルをローカル コンピューターに保存して、別のユーザーと共有し、ソース アカウントでポリシーを構成します。
ダウンロードした JSON ファイルには、Azure Storage が宛先アカウントのポリシーに対して作成したポリシー ID が含まれます。 ソース アカウントでオブジェクト レプリケーションを構成するには、同じポリシー ID を使用する必要があります。
Json ファイルをアップロードして、Azure portal を使用して宛先アカウントのレプリケーション ポリシーを作成しても、ソース アカウントに同じポリシーが自動的に作成されない点に注意してください。 Azure Storage がオブジェクトのレプリケートを開始する前に、別のユーザーがソース アカウントにポリシーを作成する必要があります。
PowerShell から宛先アカウントのレプリケーション ポリシー定義を含む JSON ファイルをダウンロードするには、 Get-AzStorageObjectReplicationPolicy コマンドを呼び出してポリシーを返します。 次の例に示すように、ポリシーを JSON に変換し、ローカル ファイルとして保存します。 アングルブラケットとファイル パスの値は、必ず独自の値に置き換えてください。
$rgName = "<resource-group>"
$destAccountName = "<destination-storage-account>"
$destPolicy = Get-AzStorageObjectReplicationPolicy -ResourceGroupName $rgName `
-StorageAccountName $destAccountName
$destPolicy | ConvertTo-Json -Depth 5 > c:\temp\json.txt
JSON ファイルを使用して、PowerShell を使用してソース アカウントのレプリケーション ポリシーを定義するには、ローカル ファイルを取得し、JSON からオブジェクトに変換します。 次の例に示すように、 Set-AzStorageObjectReplicationPolicy コマンドを呼び出して、ソース アカウントのポリシーを構成します。
この例を実行するときは、 -ResourceGroupName パラメーターをソース アカウントのリソース グループに設定し、 -StorageAccountName パラメーターをソース アカウントの名前に設定してください。 また、山かっこ内の値とファイル パスは、自分の値に必ず置き換えてください。
$object = Get-Content -Path C:\temp\json.txt | ConvertFrom-Json
Set-AzStorageObjectReplicationPolicy -ResourceGroupName $rgName `
-StorageAccountName $srcAccountName `
-PolicyId $object.PolicyId `
-SourceAccount $object.SourceAccount `
-DestinationAccount $object.DestinationAccount `
-Rule $object.Rules
Azure CLI から宛先アカウントのレプリケーション ポリシー定義を JSON ファイルに書き込むには、 az storage account または-policy show コマンドを呼び出し、ファイルに出力します。
次の例では、ポリシー定義をpolicy.jsonという名前の JSON ファイルに書き込 みます 。 かっことファイルパスにある値を必ず自分の値に置き換えてください。
az storage account or-policy show \
--account-name <dest-account-name> \
--policy-id <policy-id> > policy.json
JSON ファイルを使用して Azure CLI を使用してソース アカウントのレプリケーション ポリシーを構成するには、 az storage account or-policy create コマンドを呼び出し、 policy.json ファイルを参照します。 角かっことファイルパスの値は、必ずご自身の値に置き換えてください。
az storage account or-policy create \
-resource-group <resource-group> \
--source-account <source-account-name> \
--policy @policy.json
レプリケーション メトリックを有効にする
新規および既存のオブジェクト レプリケーション ポリシーの両方でレプリケーション メトリックを有効にすることができます。 メトリックの監視が開始されるまでに数分かかる場合があります。
メトリックを有効にするには、新しい [メトリック] 列の [オブジェクト レプリケーション] ブレードを使用するか、"..." から OR ポリシー行でポリシーの [ルールの編集] セクションを編集します。
メトリックの有効化は、API バージョン 2021-08-01 以降でサポートされています。 新しいメトリック フィールドをレプリケーション ポリシーに追加できます。 サンプル:
{
"sourceAccount": "<source-account-name>",
"destinationAccount": "<destination-account-name>",
"metrics":
{
"enabled": true
},
"rules":
[
{
"ruleId": "<rule-id>",
"sourceContainer": "<source-container-name>",
"destinationContainer": "<destination-container-name>"
}
]
}
既存のデータをコピーするように構成されているポリシーでメトリックを有効にした場合、ポリシーが一覧表示の最初のフェーズで動作している間に、最初に量が増える可能性があります。 これが完了すると、レプリケーションが開始されます。
レプリケーション メトリックを表示する
[メトリック] 列の [表示 ] リンクをクリックすると、監視メトリックを表示できます
Azure Monitor でメトリックをさらに表示するには、メトリックのグラフをクリックします。 これにより、より多くのフィルター機能を備えた Azure Monitor メトリック ビューが表示されます。
BLOB のレプリケーションの状態を確認する
ソース アカウント内の BLOB のレプリケーションの状態は、Azure portal、PowerShell、または Azure CLI を使用して確認できます。 オブジェクト レプリケーションのプロパティは、レプリケーションが完了するか失敗するまで設定されません。
Azure portal でソース アカウント内の BLOB のレプリケーションの状態を確認するには、次の手順に従います。
- Azure portal でソース アカウントに移動します。
- ソース BLOB を含むコンテナーを見つけます。
- BLOB を選択して、そのプロパティを表示します。 BLOB が正常にレプリケートされた場合は、[ オブジェクト レプリケーション ] セクションに状態が [完了] に設定されていることがわかります。 このコンテナーのオブジェクト レプリケーションを管理する規則のレプリケーション ポリシー ID と ID も一覧表示されます。
PowerShell を使用してソース アカウント内の BLOB のレプリケーション状態を確認するには、次の例に示すように、オブジェクト レプリケーション ReplicationStatus プロパティの値を取得します。 山かっこ内の値は、実際の値に置き換えてください。
$ctxSrc = (Get-AzStorageAccount -ResourceGroupName $rgName `
-StorageAccountName $srcAccountName).Context
$blobSrc = Get-AzStorageBlob -Container $srcContainerName1 `
-Context $ctxSrc `
-Blob <blob-name>
$blobSrc.BlobProperties.ObjectReplicationSourceProperties[0].Rules[0].ReplicationStatus
Azure CLI を使用してソース アカウント内の BLOB のレプリケーション状態を確認するには、次の例に示すように、オブジェクト レプリケーション 状態 プロパティの値を取得します。
az storage blob show \
--account-name <source-account-name> \
--container-name <source-container-name> \
--name <source-blob-name> \
--query 'objectReplicationSourceProperties[].rules[].status' \
--output tsv \
--auth-mode login
ソース アカウントの BLOB のレプリケーションの状態が失敗を示している場合は、次の考えられる原因を調査します。
- 宛先アカウントに対してオブジェクト レプリケーション ポリシーが構成されていることを確認します。
- 宛先コンテナーがまだ存在することを確認します。
- 書き込み操作の一部としてカスタマー指定のキーでソース BLOB が暗号化されている場合、オブジェクトのレプリケーションは失敗します。 カスタマー指定のキーの詳細については、「BLOB ストレージに対する要求で暗号化キーを指定する」を参照してください。
レプリケーション ポリシーを削除する
レプリケーション ポリシーとそれに関連付けられている規則を削除するには、Azure portal、PowerShell、または CLI を使用します。
Azure portal でレプリケーション ポリシーを削除するには、次の手順に従います。
- Azure portal でソース ストレージ アカウントに移動します。
- [ 設定] で、[ オブジェクト レプリケーション] を選択します。
- ポリシー名の横にある [ その他 ] ボタンを選択します。
- [ ルールの削除] を選択します。
レプリケーション ポリシーを削除するには、ソース アカウントと移行先アカウントの両方からポリシーを削除します。 ポリシーを削除すると、それに関連付けられているルールも削除されます。
# Remove the policy from the destination account.
Remove-AzStorageObjectReplicationPolicy -ResourceGroupName $rgName `
-StorageAccountName $destAccountName `
-PolicyId $destPolicy.PolicyId
# Remove the policy from the source account.
Remove-AzStorageObjectReplicationPolicy -ResourceGroupName $rgName `
-StorageAccountName $srcAccountName `
-PolicyId $destPolicy.PolicyId
レプリケーション ポリシーを削除するには、ソース アカウントと移行先アカウントの両方からポリシーを削除します。 ポリシーを削除すると、それに関連付けられているルールも削除されます。
az storage account or-policy delete \
--policy-id <policy-id> \
--account-name <source-storage-account> \
--resource-group <resource-group>
az storage account or-policy delete \
--policy-id <policy-id> \
--account-name <dest-storage-account> \
--resource-group <resource-group>
N/A
オブジェクト レプリケーション ポリシーを再作成するときの動作
オブジェクト レプリケーション ポリシーが削除され、同じソースコンテナーと宛先コンテナーのペアで再作成されると、Azure は新しいポリシーを完全に別のレプリケーション関係として扱います。 次の動作が適用されます。
再作成されたポリシーの新しいポリシー ID が生成されます。
前のポリシーに関連付けられているレプリケーション タスクはすべて終了します。
宛先コンテナーには、新しいポリシー ID に関連付けられた新しいレプリケーション ロックが割り当てられます。
前のポリシーからのレプリケーション状態は再利用されません。
オブジェクト レプリケーション ポリシーを再作成した後のレプリケーション動作
ポリシーが再作成された後、Azure は対象となる BLOB のレプリケーションを再度試みます。結果は、ソース アカウントでの BLOB バージョン履歴の可用性によって異なります。
ソース BLOB に以前のバージョンが移行先で使用できない場合: Azure では、BLOB が以前のポリシーで既にコピーされていると判断されます。 その BLOB の再レプリケーションは成功しません。 新しい BLOB 書き込み (またはポリシーの再作成後に作成された新しいバージョン) のみが正常にレプリケートされます。
ソース BLOB に以前のバージョンが移行先で使用できる場合: Azure では、BLOB を再レプリケートできます。 BLOB は、新しいバージョンとしてコピー先に再度コピーされます。 これにより、データの不整合なしに既存の BLOB の再レプリケーションが成功します。
次のステップ