本記事はFIXERが提供する「cloud.config Tech Blog」に掲載された「ストレージアカウント間でデータのコピーをしよう(AzureCLI) #Azureリレー」を再編集したものです。
azcopyコマンドでSAS(Shared Access Signature)発行云々を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/{コンテナー名}”と指定することでコンテナーを対象にすることもできます。 スクリプト化すれば複数ストレージアカウントをコピー元にしてデータのバックアップなんかもできます。
多田 祐一朗/FIXER
名古屋事業所所属のエンジニア。基盤インフラ経験が少しある。