AzCopy を使用して Azure Blob Storage と同期する

AzCopy v10 コマンドライン ユーティリティを使用して、Azure Blob Storage とローカル ストレージを同期できます。

ローカル ファイル システムのコンテンツを BLOB コンテナーに同期できます。 また、コンテナーと仮想ディレクトリを相互に同期することもできます。 同期は一方向です。 言い換えると、2 つのエンドポイントのいずれかを同期元として、いずれかを同期先として選択します。 同期にもサーバー間 API が使用されます。 このセクションに示されている例は、階層型名前空間があるアカウントでも機能します。

Note

現行版の AzCopy では、他のコピー元とコピー先の間では同期されません (例:ファイル ストレージまたはアマゾン ウェブ サービス (AWS) S3 バケット)。

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

はじめに

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

Note

この記事の例では、Microsoft Entra ID を使って認可の資格情報を指定していることを前提としています。

SAS トークンを使用して BLOB データへのアクセスを承認する場合、各 AzCopy コマンドのリソース URL の先頭にそのトークンを追加できます。 (例: 'https://<storage-account-name>.blob.core.windows.net/<container-name><SAS-token>')。

ガイドライン

既定では、sync コマンドではファイル名と最後に変更されたタイムスタンプが比較されます。 最終変更タイムスタンプの代わりに MD5 ハッシュを使用するように、--compare-hash フラグを使用してその動作をオーバーライドできます。 省略可能な --delete-destination フラグの値を true または prompt に設定すると、コピー元のディレクトリにファイルがもう存在しなくなると、コピー先のディレクトリからそれらのファイルが削除されます。

  • --delete-destination フラグを true に設定すると、AzCopy では、プロンプトが表示されずにファイルが削除されます。 AzCopy でファイルが削除される前にプロンプトを表示する場合、--delete-destination フラグを prompt に設定します。

  • --delete-destination フラグを prompt または false に設定する場合は、sync コマンドではなく copy コマンドを使用し、--overwrite パラメーターを ifSourceNewer に設定することを検討してください。 copy コマンドでは、消費されるメモリ量が少なくなり、発生する課金コストが減ります。これは、コピー操作では、ファイルを移動する前にコピー元またはコピー先のインデックスを作成する必要がないからです。

  • --compare-hash フラグを使用する予定がない場合、sync コマンドを実行するマシンでは、ファイルを転送する必要があるかどうかの判断において最終変更時刻が重要になるため、正確なシステム クロックが必要になります。 システムのクロック スキューが大きい場合は、sync コマンドの実行を計画している時刻にあまりに近い時点で、コピー先でのファイル変更を行わないようにしてください。

  • AzCopy では、サーバー間 API を使用してストレージ アカウント間でデータを同期します。 つまり、データはストレージ サーバー間で直接コピーされます。 ただし、AzCopy では、各転送が設定され、監視されます。大規模なストレージ アカウント (たとえば、数百万の BLOB を含むアカウント) の場合、AzCopy ではこれらのタスクを実行するために大量のコンピューティング リソースが必要になる場合があります。 したがって、仮想マシン (VM) から AzCopy を実行している場合、VM に負荷を処理するのに十分なコア/メモリがあることを確認します。

  • 誤削除を防ぐために、--delete-destination=prompt|true フラグを使用する前に論理的な削除機能を有効にしてください。

ローカル ファイル システムへの変更を使用してコンテナーを更新する

この場合、コンテナーが宛先であり、ローカル ファイル システムがソースです。

ヒント

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

構文

azcopy sync '<local-directory-path>' 'https://<storage-account-name>.blob.core.windows.net/<container-name>' --recursive

azcopy sync 'C:\myDirectory' 'https://mystorageaccount.blob.core.windows.net/mycontainer' --recursive

コンテナーへの変更を使用してローカル ファイル システムを更新する

この場合、ローカル ファイル システムが宛先であり、コンテナーがソースです。

ヒント

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

構文

azcopy sync 'https://<storage-account-name>.blob.core.windows.net/<container-name>' 'C:\myDirectory' --recursive

azcopy sync 'https://mystorageaccount.blob.core.windows.net/mycontainer' 'C:\myDirectory' --recursive

別のコンテナーへの変更を使用してコンテナーを更新する

このコマンドに表示される最初のコンテナーがソースです。 2 つ目が宛先です。

Microsoft Entra ID を使用して認可の資格情報を指定する場合は、ソース アカウントと宛先アカウントで適切なロールが設定されていることを確認します。 「オプション 1: Microsoft Entra ID を使用する」を参照してください。

ヒント

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

構文

azcopy sync 'https://<source-storage-account-name>.blob.core.windows.net/<container-name>/<SAS-token>' 'https://<destination-storage-account-name>.blob.core.windows.net/<container-name>' --recursive

azcopy sync 'https://mysourceaccount.blob.core.windows.net/mycontainer?sv=2018-03-28&ss=bfqt&srt=sco&sp=rwdlacup&se=2019-07-04T05:30:08Z&st=2019-07-03T21:30:08Z&spr=https&sig=CAfhgnc9gdGktvB=ska7bAiqIddM845yiyFwdMH481QA8%3D' 'https://mydestinationaccount.blob.core.windows.net/mycontainer' --recursive

別のコンテナー内のディレクトリへの変更を使用してディレクトリを更新する

このコマンドに表示される最初のディレクトリがソースです。 2 つ目が宛先です。

Microsoft Entra ID を使用して認可の資格情報を指定する場合は、ソース アカウントと宛先アカウントで適切なロールが設定されていることを確認します。 「オプション 1: Microsoft Entra ID を使用する」を参照してください。

ヒント

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

構文

azcopy sync 'https://<source-storage-account-name>.blob.core.windows.net/<container-name>/<directory-name>/<SAS-token>' 'https://<destination-storage-account-name>.blob.core.windows.net/<container-name>/<directory-name>' --recursive

azcopy sync 'https://mysourceaccount.blob.core.windows.net/<container-name>/myDirectory?sv=2018-03-28&ss=bfqt&srt=sco&sp=rwdlacup&se=2019-07-04T05:30:08Z&st=2019-07-03T21:30:08Z&spr=https&sig=CAfhgnc9gdGktvB=ska7bAiqIddM845yiyFwdMH481QA8%3D' 'https://mydestinationaccount.blob.core.windows.net/mycontainer/myDirectory' --recursive

オプションのフラグに同期させる

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

シナリオ フラグ
ダウンロードの際に MD5 ハッシュを検証する厳密さを指定します。 --check-md5=[NoCheck|LogOnly|FailIfDifferent|FailIfDifferentOrMissing]
パターンに基づいてファイルを除外します。 --exclude-path
同期に関連するログ エントリの詳細レベルを指定します。 --log-level=[WARNING|ERROR|INFO|NONE]

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

Note

既定では、--recursive フラグは true に設定されています。 --exclude-pattern--include-pattern の各フラグはファイル名のみに適用され、ファイル パスの他の部分には適用されません。

次のステップ

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

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