SASキーを使ってazcopyする。FileからBlobへコピーする。

前提

今日は下記ディレクトリで作業していく。
/Users/takumi/Documents/src/private_src/daily/2025-10-26/azcopy-sample

az copy のインストール

下記からダウンロードしてインストールする。
https://learn.microsoft.com/ja-jp/azure/storage/common/storage-use-azcopy-v10?tabs=dnf

mac は下記で。
https://learn.microsoft.com/ja-jp/azure/storage/common/storage-use-azcopy-v10?tabs=dnf#download-the-azcopy-portable-binary

Apple Silicon(M1/M2/M3)でのインストール手順

  1. ダウンロード
   # Apple Silicon用のAzCopyを直接ダウンロード
   curl -L https://aka.ms/downloadazcopy-v10-mac-arm64 -o azcopy.tar.gz
  1. インストール
   # ダウンロードしたファイルを解凍
   tar -xf azcopy.tar.gz

   # azcopyを実行可能にして、PATHに追加
   sudo mv azcopy_darwin_arm64_*/azcopy /usr/local/bin/
   chmod +x /usr/local/bin/azcopy

   # 一時ファイルを削除
   rm -rf azcopy_darwin_arm64_* azcopy.tar.gz
  1. 動作確認
   azcopy --version

azcopy version 10.30.1と出ればOK.

基本的な使用方法

SASキーを取得する

BlobとFileそれぞれでSASキーを発行します。

SAS tokenをコピーしておく。

本来であればkvとかに入れて使ったほうがいい。(もっというとEntra IDで認証して使ったほうがいいけど、今回はあくまで実験ということで。)

–from-to FileBlob
これを指定することで最適化されるようだ。今回はFileからBlobへのコピーなのでこれを入れておく。

下記も参考に。
https://learn.microsoft.com/ja-jp/azure/storage/common/storage-use-azcopy-v10?tabs=dnf#transfer-data

# コピーしたSASトークンを使う
FILE_SHARE_SAS_TOKEN="sv=2024-11-04&ss=f&srt=sco&sp=rl&se=2025-10-27T04:22:51Z&st=2025-10-26T20:07:51Z&spr=https&sig=hoge"
BLOB_SAS_TOKEN="sv=2024-11-04&ss=b&srt=sco&sp=rwdlactfx&se=2025-10-27T04:22:51Z&st=2025-10-26T20:07:51Z&spr=https&sig=hoge"

# URL構築
SOURCE_URL="https://${STORAGE_ACCOUNT_NAME}.file.core.windows.net/${FILE_SHARE_NAME}?${FILE_SHARE_SAS_TOKEN}"
TARGET_URL="https://${STORAGE_ACCOUNT_NAME}.blob.core.windows.net/${BLOB_CONTAINER_NAME}?${BLOB_SAS_TOKEN}"

echo "=== AzCopy実行 ==="
echo "ソース: ${SOURCE_URL}"
echo "ターゲット: ${TARGET_URL}"
echo ""

# AzCopyコマンド実行
echo "AzCopyコマンドを実行中..."

# -from-to FileBlobを指定することで、最適化された方法でコピーされる。
azcopy copy "${SOURCE_URL}" "${TARGET_URL}" --from-to FileBlob --recursive=true

if [ $? -eq 0 ]; then
    echo ""
    echo "✓ AzCopy実行完了"
    echo "File Share '${FILE_SHARE_NAME}' から Blob Container '${BLOB_CONTAINER_NAME}' へのコピーが成功しました"
else
    echo ""
    echo "✗ AzCopy実行失敗"
    exit 1
fi

ストレージアカウントを準備して、ファイルとBlobコンテナーを用意しました。

コピーされることを確認