📚
【Azure Blob Storage × AzCopy】フォルダ移行での失敗と正しいコピー方法
はじめに
業務でAzure Storage(Azure Blob Storage)を扱う中で/配下のファイル全てを引っ越したい場面があり、少し工程を踏む必要があったので記事に残します。
※az及びazcopyはインストールされている想定です。
状況について
例えになりますが以下のような状況です。
<AsIs>
aaa/bbb/ccc/ddd.txt
上記のccc配下には複数のファイルがある想定。
<ToBe>
zzz/bbb/ccc/ddd.txt
bbb配下をzzz配下へ移行したい。
SAS の用意
以下を実行
az storage container generate-sas \
--account-name {ストレージ名} \
--name sample-container \
--permissions rlw \
--expiry 2026-01-01 \
--output tsv
上記コマンドは、Blob コンテナに対して
読み取り(Read)・書き込み(Write)・一覧(List) の操作を許可する
SAS トークンを発行する例です。
実行
azcopy copy \
"https://storage.blob.core.windows.net/container/aaa/bbb/*?{発行したSAS}" \
"https://storage.blob.core.windows.net/container/zzz/?{発行したSAS}" \
--recursive=true
上記実行後ストレージを確認すると
zzz/aaa/bbb/ccc/ddd.txt
コピー元のパスが連結されてしまいました。。。
パスが連結されてしまった原因
コピー先がzzzのみだったため元の階層が保持されなかった
そのため、コピー元のパスに「bbb/」を含めるを含めてあげる必要がありました。
実行
$ azcopy copy \
"https://example.blob.core.windows.net/container/aaa/bbb/*?{発行したSAS}" \
"https://example.blob.core.windows.net/container/zzz/bbb/?{発行したSAS}" \
--recursive=true
結果を見てみてみると
zzz/bbb/ccc/ddd.txt
理想通りの形式になっていました。
終わりに
Azure blob Storageや他のクラウドサービスのストレージは/ごとに階層分けされているように思いがちですが、区切り文字でしかないため改めて注意が必要と感じました。
今後もAzure関連でトラブルシュートなどした際はまとめたいと思います。
Discussion