ストレージアカウント間でデータのコピーをしよう(AzureCLI) #Azureリレー
2021-04-08
azblob://2022/11/11/eyecatch/2021-04-08-storage-account-copy-azurecli.jpg

azcopyでsas発行云々をAzureCLIでやろうとするとしんどかったので、他に方法が無いか調べたらよさそうなのがありました。

az storage copy

デフォルトでアクセスキーを使ってストレージアカウントの認識をしてくれます。今回は接続文字列を使用した方法を紹介します。

ストレージアカウントの用意

データコピー元とコピー先でそれぞれ用意します。
ここでは以下の名称で作成しました。名称カッコ悪いですが許して。

コピー元
・リソースグループ: srcstorageaccount
・ストレージアカウント: srcstorageaccount2021

コピー先
・リソースグループ: deststorageaccount
・ストレージアカウント: deststorageaccount2021

次にデータを用意します。コピー元ストレージアカウントにコンテナーを作って適用にファイルを置きます。

後述のコマンド実行で必要な接続文字列は「アクセスキー > 接続文字列」の値を使用します。

コマンド実行

本題のコマンドです。

az storage copy `
    -s "コピー元ストレージアカウントのエンドポイント" `
    --src-conn "コピー元ストレージアカウントの接続文字列" `
    -d "コピー先ストレージアカウントのエンドポイント" `
    --connection-string "コピー先ストレージアカウントの接続文字列" `
    --recursive `
    --only-show-errors

変数を用意します。それぞれ値を置き換えてください。

# コピー元ストレージアカウントのエンドポイント
$srcEndpoint = "https://{コピー元ストレージアカウント名}.blob.core.windows.net/"

# コピー元ストレージアカウントの接続文字列。
$srcAccountConnectionString = "XXX"

# コピー先ストレージアカウントのエンドポイント
$destEndpoint = "https://{コピー先ストレージアカウント名}.blob.core.windows.net/"

# コピー先ストレージアカウントの接続文字列
$destAccountConnectionString = "XXX"

コマンドに上の変数を指定すると以下になります。

az storage copy `
    -s $srcEndpoint `
    --src-conn $srcAccountConnectionString `
    -d $destEndpoint `
    --connection-string $destAccountConnectionString `
    --recursive `
    --only-show-errors

正常にコマンドが完了すればコピー先にデータがあります。

終わり

エンドポイントですが、"https://{ストレージアカウント名}.blob.core.windows.net/{コンテナー名}"と指定することでコンテナーを対象にすることもできます。
スクリプト化すれば複数ストレージアカウントをコピー元にしてデータのバックアップなんかもできます。