AzCopy を使用して Azure ストレージ アカウント間で BLOB をコピーする

AzCopy v10 コマンドライン ユーティリティを使用して、ストレージ アカウント間で BLOB、ディレクトリ、コンテナーをコピーできます。

ファイルのアップロード、BLOB のダウンロード、および BLOB ストレージとの同期など、他の種類のタスクの例については、この記事の「次のステップ」セクションに記載されているリンクを参照してください。

AzCopy では、サーバー間API が使用されます。そのため、データはストレージ サーバー間で直接コピーされます。

はじめに

AzCopy のダウンロード方法と、ストレージ サービスに認証資格情報を与える方法については、AzCopy の作業開始に関するページをご覧ください。

Note

この記事の例では、Microsoft Entra ID を使用することで認可の資格情報を指定したことと、Microsoft Entra の ID がソースとコピー先の両方のアカウントに対する適切なロール割り当てを持つことを前提としています。

または、各 AzCopy コマンドでソースまたはコピー先のいずれかの URL に 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 コマンドには次のガイドラインを適用します。

  • ソースとコピー先の両方で Microsoft Entra 認可を使用している場合、両方のアカウントが同じ Microsoft Entra テナントに属している必要があります。

  • クライアントは、ソース ストレージ アカウントと宛先ストレージ アカウントの両方へのネットワーク アクセスを持っている必要があります。 各ストレージ アカウントのネットワーク設定を構成する方法の詳細については、「Azure Storage ファイアウォールおよび仮想ネットワークを構成する」を参照してください。

  • Premium ブロック BLOB ストレージ アカウントにコピーする場合は、s2s-preserve-access-tierfalse に設定することで (例: --s2s-preserve-access-tier=false)、コピー操作から BLOB のアクセス層を除外します。 Premium ブロック BLOB ストレージ アカウントでは、アクセス層はサポートされません。

  • AZCOPY_CONCURRENCY_VALUE 環境変数の値を設定することによって、コピー操作のスループットを上げることができます。 詳細については、コンカレンシーの向上に関するページを参照してください。

  • ソース BLOB にインデックス タグがあり、それらのタグを保持する必要がある場合は、コピー先 BLOB に再適用する必要があります。 インデックス タグを設定する方法の詳細については、この記事のインデックス タグがある BLOB を別のストレージ アカウントにコピーする方法に関するセクションを参照してください。

BLOB をコピーする

azcopy copy コマンドを使用して、BLOB を別のストレージ アカウントにコピーします。

ヒント

この例では、パス引数を単一引用符 ('') で囲んでいます。 Windows コマンド シェル (cmd.exe) を除き、すべてのコマンド シェルで単一引用符を使用します。 Windows コマンド シェル (cmd.exe) を使用している場合は、単一引用符 ('') ではなく、二重引用符 ("") でパス引数を囲みます。

構文

azcopy copy 'https://<source-storage-account-name>.<blob or dfs>.core.windows.net/<container-name>/<blob-path>' 'https://<destination-storage-account-name>.<blob or dfs>.core.windows.net/<container-name>/<blob-path>'

azcopy copy 'https://mysourceaccount.blob.core.windows.net/mycontainer/myTextFile.txt' 'https://mydestinationaccount.blob.core.windows.net/mycontainer/myTextFile.txt'

例 (Data Lake Storage エンドポイント)

azcopy copy 'https://mysourceaccount.dfs.core.windows.net/mycontainer/myTextFile.txt' 'https://mydestinationaccount.dfs.core.windows.net/mycontainer/myTextFile.txt'

コピー操作は同期しているため、コマンドが返されると、それはすべてのファイルがコピーされていることを示します。

ディレクトリをコピーする

azcopy copy コマンドを使用して、ディレクトリを別のストレージ アカウントにコピーします。

ヒント

この例では、パス引数を単一引用符 ('') で囲んでいます。 Windows コマンド シェル (cmd.exe) を除き、すべてのコマンド シェルで単一引用符を使用します。 Windows コマンド シェル (cmd.exe) を使用している場合は、単一引用符 ('') ではなく、二重引用符 ("") でパス引数を囲みます。

構文

azcopy copy 'https://<source-storage-account-name>.<blob or dfs>.core.windows.net/<container-name>/<directory-path>' 'https://<destination-storage-account-name>.<blob or dfs>.core.windows.net/<container-name>' --recursive

azcopy copy 'https://mysourceaccount.blob.core.windows.net/mycontainer/myBlobDirectory' 'https://mydestinationaccount.blob.core.windows.net/mycontainer' --recursive

例 (Data Lake Storage エンドポイント)

azcopy copy 'https://mysourceaccount.dfs.core.windows.net/mycontainer/myBlobDirectory' 'https://mydestinationaccount.dfs.core.windows.net/mycontainer' --recursive

コピー操作は同期的に行われます。 コマンドが返されるとき、すべてのファイルはコピーされています。

コンテナーをコピーする

azcopy copy コマンドを使用して、コンテナーを別のストレージ アカウントにコピーします。

ヒント

この例では、パス引数を単一引用符 ('') で囲んでいます。 Windows コマンド シェル (cmd.exe) を除き、すべてのコマンド シェルで単一引用符を使用します。 Windows コマンド シェル (cmd.exe) を使用している場合は、単一引用符 ('') ではなく、二重引用符 ("") でパス引数を囲みます。

構文

azcopy copy 'https://<source-storage-account-name>.<blob or dfs>.core.windows.net/<container-name>' 'https://<destination-storage-account-name>.<blob or dfs>.core.windows.net/<container-name>' --recursive

azcopy copy 'https://mysourceaccount.blob.core.windows.net/mycontainer' 'https://mydestinationaccount.blob.core.windows.net/mycontainer' --recursive

例 (Data Lake Storage エンドポイント)

azcopy copy 'https://mysourceaccount.dfs.core.windows.net/mycontainer' 'https://mydestinationaccount.dfs.core.windows.net/mycontainer' --recursive

コピー操作は同期的に行われます。 コマンドが返されるとき、すべてのファイルはコピーされています。

コンテナー、ディレクトリ、BLOB のコピー

azcopy copy コマンドを使用して、すべてのコンテナー、ディレクトリ、BLOB を別のストレージ アカウントにコピーします。

ヒント

この例では、パス引数を単一引用符 ('') で囲んでいます。 Windows コマンド シェル (cmd.exe) を除き、すべてのコマンド シェルで単一引用符を使用します。 Windows コマンド シェル (cmd.exe) を使用している場合は、単一引用符 ('') ではなく、二重引用符 ("") でパス引数を囲みます。

構文

azcopy copy 'https://<source-storage-account-name>.<blob or dfs>.core.windows.net/' 'https://<destination-storage-account-name>.<blob or dfs>.core.windows.net/' --recursive

azcopy copy 'https://mysourceaccount.blob.core.windows.net/' 'https://mydestinationaccount.blob.core.windows.net' --recursive

例 (Data Lake Storage エンドポイント)

azcopy copy 'https://mysourceaccount.dfs.core.windows.net/' 'https://mydestinationaccount.dfs.core.windows.net' --recursive

コピー操作は同期しているため、コマンドが返されると、それはすべてのファイルがコピーされていることを示します。

BLOB をコピーしてインデックス タグを追加する

BLOB を別のストレージ アカウントにコピーし、BLOB インデックス タグを対象の BLOB に追加します。

Microsoft Entra 認可を使用している場合は、セキュリティ プリンシパルに、ストレージ BLOB データ所有者ロールが割り当てられているか、カスタム Azure ロール経由で Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/writeAzure リソース プロバイダー操作に対するアクセス許可が付与されている必要があります。 Shared Access Signature (SAS) トークンを使用している場合、そのトークンは、t SAS アクセス許可を使用して BLOB のタグへのアクセスを提供する必要があります。

タグを追加するには、URL でエンコードされたキーと値のペアと共に --blob-tags オプションを使用します。

たとえば、キー my tag と値 my tag value を追加するには、宛先パラメーターに --blob-tags='my%20tag=my%20tag%20value' を追加します。

複数のインデックス タグを区切るには、アンパサンド (&) を使用します。 たとえば、キー my second tag と値 my second tag value を追加する場合、完全なオプション文字列は --blob-tags='my%20tag=my%20tag%20value&my%20second%20tag=my%20second%20tag%20value' になります。

--blob-tags オプションを使用する方法の例を次に示します。

ヒント

これらの例では、パス引数を単一引用符 ('') で囲んでいます。 Windows コマンド シェル (cmd.exe) を除き、すべてのコマンド シェルで単一引用符を使用します。 Windows コマンド シェル (cmd.exe) を使用している場合は、単一引用符 ('') ではなく、二重引用符 ("") でパス引数を囲みます。

BLOB の例


azcopy copy 'https://mysourceaccount.blob.core.windows.net/mycontainer/myTextFile.txt' 'https://mydestinationaccount.blob.core.windows.net/mycontainer/myTextFile.txt' --blob-tags='my%20tag=my%20tag%20value&my%20second%20tag=my%20second%20tag%20value'

ディレクトリの例

azcopy copy 'https://mysourceaccount.blob.core.windows.net/mycontainer/myBlobDirectory' 'https://mydestinationaccount.blob.core.windows.net/mycontainer' --recursive --blob-tags='my%20tag=my%20tag%20value&my%20second%20tag=my%20second%20tag%20value'

コンテナーの例

azcopy copy 'https://mysourceaccount.blob.core.windows.net/mycontainer' 'https://mydestinationaccount.blob.core.windows.net/mycontainer' --recursive --blob-tags='my%20tag=my%20tag%20value&my%20second%20tag=my%20second%20tag%20value'

アカウントの例

azcopy copy 'https://mysourceaccount.blob.core.windows.net/' 'https://mydestinationaccount.blob.core.windows.net' --recursive --blob-tags='my%20tag=my%20tag%20value&my%20second%20tag=my%20second%20tag%20value'

コピー操作は同期的に行われます。 コマンドが返されるとき、すべてのファイルはコピーされています。

Note

ソースのディレクトリ、コンテナー、またはアカウントを指定すると、コピー先にコピーされたすべての BLOB のタグは、コマンドで指定したものと同じになります。

オプションのフラグを使用してコピーする

オプションのフラグを使用して、コピー操作を調整できます。 以下にいくつか例を示します。

シナリオ フラグ
ブロック、ページ、または追加 BLOB として BLOB をコピーします。 --blob-type=[BlockBlob|PageBlob|AppendBlob]
特定のアクセス層 (アーカイブ層など) にコピーします。 --block-blob-tier=[None|Hot|Cool|Archive]
自動的にファイルを圧縮解除します。 --decompress=[gzip|deflate]

完全な一覧については、オプションを参照してください。

次のステップ

他の例については、次の記事を参照してください。

設定の構成、パフォーマンスの最適化、および問題のトラブルシューティングを行うには、次の記事を参照してください。