AzCopy を使用してネットワーク制限がある Azure ストレージ アカウント間で BLOB をコピーする
この記事では、AzCopy コマンド ライン ユーティリティを使用してストレージ アカウント間で BLOB をコピーする方法について説明します。 また、ストレージ アカウントに対してネットワーク制限が構成されている場合にコピー操作を実装する方法についても説明します。
背景
2 つのストレージ アカウント間で BLOB ファイルをコピーすることは、多くの Azure ユーザーにとって一般的な要件です。 Azure Storage では、あるストレージ アカウントから別のストレージ アカウントへの BLOB の直接コピーがサポートされています。これは、AzCopy コマンド ライン ユーティリティを使用して実装できます。 ユーザーは、ローカル ディスクまたはバッファーにファイルをダウンロードしてから、もう一度アップロードする必要はありません。
AzCopy を使用して 2 つのストレージ アカウント間で BLOB をコピーしても、ローカル コンピューターのネットワーク帯域幅には依存しません。 この方法では、ストレージ アカウントと Azure Virtual Network のパフォーマンスを利用して、ファイルのダウンロードとアップロードよりも優れたスループットを実現できます。 両方のストレージ アカウントが同じリージョンにある場合、帯域幅の料金は発生しません。
ストレージ アカウント間で BLOB をコピーするための AzCopy コマンド
Microsoft Entra ID を使用して承認資格情報を指定する場合は、次のコマンドを使用します。
azcopy copy 'https://<source-storage-account-name>.blob.core.windows.net/<container-name>/<blob-path>' 'https://<destination-storage-account-name>.blob.core.windows.net/<container-name>/<blob-path>'
このシナリオでは、Microsoft Entra ID に、移行元アカウントと移行先アカウントの両方に適切なロールの割り当てが割り当てられていることを確認する必要があります。
Shared Access Signature (SAS) トークンを使用する場合は、次のコマンドを使用します。
azcopy copy 'https://<source-storage-account-name>.blob.core.windows.net/<container-name>/<blob-path><SAS-token>' 'https://<destination-storage-account-name>.blob.core.windows.net/<container-name>/<blob-path><SAS-token>'
このシナリオでは、AzCopy コマンドで使用されるソース URL と宛先 URL の両方に SAS トークンを追加する必要があります。
詳細については、AzCopy v10 を使用した Azure ストレージ アカウント間の Copy BLOB のに関するページを参照してください。
アクセス制限があるストレージ アカウント間で Blob をコピーする
ストレージ ファイアウォール経由でソース ストレージ アカウントと移行先ストレージ アカウントの両方へのアクセスを制限する必要がある場合は、AzCopy を使用してストレージ アカウント間で BLOB をコピーするための構成が必要になる場合があります。 これは、2 つのストレージ アカウント間のコピー要求でプライベート IP アドレスが使用され、IP アドレスが動的であるためです。
サポートされる 2 つのシナリオを次に示します。
シナリオ 1: クライアントがパブリック エンドポイントを使用してストレージ アカウントにアクセスする
このシナリオでは、クライアントのパブリック IP アドレスまたは仮想ネットワーク (VNet) を、ソースおよび宛先ストレージ アカウントのファイアウォール許可リストに追加する必要があります。
次の図は、このシナリオでストレージ アカウント間で BLOB をコピーするプロセスを示しています。
シナリオ 2: クライアントの VNet にプライベート リンクが構成されており、プライベート エンドポイントを使用してストレージ アカウントにアクセスする
このシナリオでは、ファイアウォールの許可リストは必要ありません。
次の図は、このシナリオでストレージ アカウント間で BLOB をコピーするプロセスを示しています。
このメカニズムの 2 つのシナリオの完全なプロセスを次に示します。
- クライアントは PutBlockfromURL 要求を宛先ストレージに送信します。
- 宛先ストレージは要求を受信し、指定されたソース URL からブロックを取得しようとします。 ただし、移行先のストレージはソース ファイアウォールによって許可されていないため、"403 Forbidden" エラーを受け取ります。
- 宛先ストレージは、"403 Forbidden" エラーを受信した後、クライアントに代わって別の GetBlob 要求を送信します。 クライアントがソース ストレージにアクセスできる場合、宛先はソースからブロックを取得し、成功応答コードをクライアントに返すことができるようになります。
- クライアントは PutBlockList を宛先ストレージに送信してブロックをコミットし、要求から成功応答コードを受信した後にプロセスを完了します。
プライベート エンドポイントを使用してハブスポーク アーキテクチャのストレージ アカウント間で BLOB をコピーする
AzCopy を使用して、ハブ VNet 内の VM から異なるスポーク VNet 内のプライベート エンドポイントに接続されているストレージ アカウント間で BLOB をコピーすると、403 エラーが発生します。 AzCopy ログまたは Azure Storage ログに "403 This request is not authorized to perform this operation - CannotVerfiyCopySource" エラーが表示されます。 次のアーキテクチャ図は、エラーが発生するシナリオを示しています。
回避策 1: ソース VNet 内の宛先ストレージ アカウントのプライベート エンドポイントを作成する
考えられる回避策は、ソース VNet 内に宛先ストレージ アカウントのプライベート エンドポイントを作成することです。 この構成により、VM は AzCopy を使用してストレージ アカウント間で BLOB を正常にコピーできます。 次のアーキテクチャ図は、回避策 1 のストレージ アカウント間で BLOB をコピーするプロセスを示しています。
回避策 2: ソース ストレージ アカウントと同じ VNet に VM を配置し、宛先 VNet と VNet をピアリングする
もう 1 つのオプションは、ソース ストレージ アカウントと同じ VNet 内に VM を配置することです。 次に、この VNet と宛先 VNet の間でピアリングを確立します。 次のアーキテクチャ図は、回避策 2 のストレージ アカウント間で BLOB をコピーするプロセスを示しています。
回避策 3: 一時的なステージング アカウントを使用してデータをコピーする
前述の回避策を実装できない場合、またはストレージ アカウントまたは VNet の既存のネットワーク構成の変更が制限されている場合は、一時的なステージング アカウントを使用してデータをコピーできます。
- ソース ストレージ アカウントと移行先ストレージ アカウントと同じリージョンに一時ストレージ アカウントを作成します。
- AzCopy を使用して、ソース ストレージ アカウントから一時ストレージ アカウントにデータをコピーします。
- 一時ストレージ アカウントからコピー先ストレージ アカウントにデータをコピーします。 データ転送を実行する前に、一時ストレージ アカウントが宛先ストレージ アカウントと同じ VNet にプライベート エンドポイントを持っていることを確認します。
回避策 4: VM を使用してデータを VM にダウンロードし、データを宛先ストレージ アカウントにアップロードする
他の方法が実現できない場合にのみ、この回避策を使用してください。 VM を使用してソース ストレージ アカウントからデータをダウンロードし、それをコピー先のストレージ アカウントにアップロードします。 これは、AzCopy を使用して行うことができます。 VM のサイズとディスク容量がデータ転送プロセスに適していることを確認します。
お問い合わせはこちらから
質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。