- [アーティクル]
-
-
オブジェクト レプリケーションを使用すると、ソース ストレージ アカウントと宛先アカウントの間でブロック 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 portal によって自動的に宛先アカウントにも作成されます。
Azure portal でレプリケーション ポリシーを作成するには、次の手順を実行します。
Azure portal でソース ストレージ アカウントに移動します。
[データ管理] で、 [オブジェクト レプリケーション] を選択します。
[レプリケーション規則の作成] を選択します。
宛先サブスクリプションとストレージ アカウントを選択します。
[コンテナー ペアの詳細] セクションで、ソース アカウントからソース コンテナーを選択し、宛先アカウントから宛先コンテナーを選択します。 Azure portal から、1 つのレプリケーション ポリシーにつき最大 10 個のコンテナー ペアを作成できます。 10 個を超えるコンテナー ペア (最大 1000 個) を構成するには、JSON ファイルを使用したオブジェクト レプリケーションの構成に関するページを参照してください。
次の図は、一連のレプリケーション ルールを示しています。
必要に応じて、1 つ以上のフィルターを指定し、プレフィックス パターンに一致する BLOB のみをコピーします。 たとえば、プレフィックス 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 or-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 ファイルを作成する方法については、「ポリシー定義ファイル」を参照してください。
Note
ストレージ アカウントでは、テナント間のオブジェクト レプリケーションが既定で許可されています。 テナント間のレプリケーションが行われないようにするには、お使いのストレージ アカウントでテナント間オブジェクト レプリケーションを禁止するように 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 でオブジェクトのレプリケートを開始する前に、別のユーザーがソース アカウントにポリシーを作成する必要があります。
宛先アカウントのレプリケーション ポリシー定義を含む JSON ファイルを PowerShell からダウンロードするには、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 or-policy show コマンドを呼び出して、ファイルに出力します。
次の例では、ポリシー定義を policy.json という名前の JSON ファイルに書き込みます。 山かっこ内の値とファイル パスは、実際の値に置き換えてください。
az storage account or-policy show \
--account-name <dest-account-name> \
--policy-id <policy-id> > policy.json
Azure CLI で JSON ファイルを使用してソース アカウントにレプリケーション ポリシーを構成するには、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
BLOB のレプリケーションの状態を確認する
Azure portal、PowerShell、または Azure CLI を使用して、ソース アカウントの BLOB のレプリケーションの状態を確認できます。 オブジェクト レプリケーションのプロパティは、レプリケーションが完了するか失敗するまで設定されません。
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 のレプリケーションの状態を確認するには、次の例に示すように、オブジェクト レプリケーションの status プロパティの値を取得します。
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 でソース ストレージ アカウントに移動します。
- [設定] で、 [オブジェクト レプリケーション] を選択します。
- ポリシー名の横にある [詳細] ボタンを選択します。
- [Delete Rules](ルールの削除) を選択します。
レプリケーション ポリシーを削除するには、ソース アカウントと宛先アカウントの両方からポリシーを削除します。 ポリシーを削除すると、それに関連付けられているルールも削除されます。
# 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>
次のステップ