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 ストレージ アカウント間で BLOB をコピーする」を参照してください。

アクセス制限があるストレージ アカウント間で BLOB をコピーする

ストレージ ファイアウォールを使用してソースストレージ アカウントと移行先ストレージ アカウントの両方へのアクセスを制限する必要がある場合は、AzCopy を使用してストレージ アカウント間で BLOB をコピーするための構成が必要になる場合があります。 これは、2 つのストレージ アカウント間のコピー要求でプライベート IP アドレスが使用され、IP アドレスが動的であるためです。

サポートされる 2 つのシナリオを次に示します。

シナリオ 1: クライアントがパブリック エンドポイントを使用してストレージ アカウントにアクセスする

このシナリオでは、クライアントのパブリック IP アドレスまたは仮想ネットワーク (VNet) を、ソースおよび宛先ストレージ アカウントのファイアウォール許可リストに追加する必要があります。

次の図は、このシナリオでストレージ アカウント間で BLOB をコピーするプロセスを示しています。

シナリオ 1 のストレージ アカウント間で BLOB を処理するプロセスを示す図。

このシナリオでは、ファイアウォール許可リストは必要ありません。

次の図は、このシナリオでストレージ アカウント間で BLOB をコピーするプロセスを示しています。

シナリオ 2 のストレージ アカウント間で BLOB を処理するプロセスを示す図。

2 つのシナリオのこのメカニズムの完全なプロセスを次に示します。

  1. クライアントは PutBlockfromURL 要求を宛先ストレージに送信します。
  2. 宛先ストレージは要求を受け取り、指定されたソース URL からブロックを取得しようとします。 ただし、移行先のストレージはソース ファイアウォールによって許可されていないため、"403 Forbidden" エラーを受け取ります。
  3. 宛先ストレージが "403 Forbidden" エラーを受け取ると、クライアントに代わって別の GetBlob 要求が送信されます。 クライアントがソース ストレージにアクセスできる場合、宛先はソースからブロックを取得し、成功応答コードをクライアントに返します。
  4. クライアントは PutBlockList を宛先ストレージに送信してブロックをコミットし、要求から成功応答コードを受け取った後にプロセスを完了します。

プライベート エンドポイントを使用してハブスポーク アーキテクチャのストレージ アカウント間で BLOB をコピーする

AzCopy を使用して、ハブ VNet 内の VM から異なるスポーク VNet 内のプライベート エンドポイントに接続されているストレージ アカウント間で BLOB をコピーすると、403 エラーが発生します。 AzCopy ログまたは Azure Storage ログに "403 この要求は、この操作を実行する権限がありません - CannotVerfiyCopySource" エラーが表示されます。 次のアーキテクチャ図は、エラーが発生するシナリオを示しています。

プライベート エンドポイントを使用してハブ & スポーク アーキテクチャのストレージ アカウント間で BLOB をコピーする 403 エラーを示す図。

回避策 1: ソース VNet で宛先ストレージ アカウントのプライベート エンドポイントを作成する

考えられる回避策は、移行元 VNet で宛先ストレージ アカウントのプライベート エンドポイントを作成することです。 この構成により、VM は AzCopy を使用してストレージ アカウント間で BLOB を正常にコピーできます。 次のアーキテクチャ図は、回避策 1 のストレージ アカウント間で BLOB をコピーするプロセスを示しています。

回避策 1 のストレージ アカウント間で BLOB をコピーするプロセスを示す図。

回避策 2: VM をソース ストレージ アカウントと同じ VNet に配置し、宛先 VNet と VNet をピアリングする

もう 1 つのオプションは、ソース ストレージ アカウントと同じ VNet 内に VM を配置することです。 次に、この VNet と宛先 VNet の間でピアリングを確立します。 次のアーキテクチャ図は、回避策 2 のストレージ アカウント間で BLOB をコピーするプロセスを示しています。

回避策 2 のストレージ アカウント間で BLOB をコピーするプロセスを示す図。

回避策 3: 一時的なステージング アカウントを使用してデータをコピーする

前述の回避策を実装できない場合、またはストレージ アカウントまたは VNet の既存のネットワーク構成の変更が制限されている場合は、一時的なステージング アカウントを使用してデータをコピーできます。

  1. ソース ストレージ アカウントと移行先ストレージ アカウントと同じリージョンに一時ストレージ アカウントを作成します。
  2. AzCopy を使用して、ソース ストレージ アカウントから一時ストレージ アカウントにデータをコピーします。
  3. 一時ストレージ アカウントからコピー先ストレージ アカウントにデータをコピーします。 データ転送を実行する前に、一時ストレージ アカウントが宛先ストレージ アカウントと同じ VNet にプライベート エンドポイントを持っていることを確認します。

回避策 4: VM を使用して VM にデータをダウンロードし、データを移行先ストレージ アカウントにアップロードする

他の方法が実現できない場合にのみ、この回避策を使用してください。 VM を使用してソース ストレージ アカウントからデータをダウンロードし、コピー先のストレージ アカウントにアップロードします。 これは AzCopy で行うことができます。 VM のサイズとディスク容量がデータ転送プロセスに適していることを確認します。

お問い合わせはこちらから

質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。