AzCopyでファイルをBlobストレージへアップロードする

2024/06/01

オンプレからクラウドにファイルをアップロードするには?

いよいよこのあたりに手を付けないといけなくなったので、お勉強しました(Twitter)

Azure のBlobストレージに対して、ファイルをコピーするには、AzCopyというコマンドを使います。

このコマンドはこちらからダウンロードできます。Windows,Linux,Mac のバイナリコマンドが用意されているので、おおよそOSを問わずに使えそうです。今回はWindowsで試すので、64bit版をダウンロードしました。azcopy.exe というファイルがコマンドそのものです。Pathが通ったフォルダにコピーしておきます。

SASをつかう

基本的な使い方はめちゃめちゃ簡単でした。Azureのストレージアカウントから適当なコンテナーを作ります。(フォルダみたいなものです)。コンテナーの中に入ったら、「共有アクセストークン」という項目を開いて、許可する操作にチェックを付けた後、この後取得するトークンがどれだけの期間有効化も設定してから「SASトークンおよびURLを生成」をクリックします。

すると、下図のようなURLトークンとURLを取得できます。下の「BLOB SAS URL」のほうをコピーしておきます。

あとは、下のように取得したURLを含めたコマンドを使うだけ。え?これだけ?ってくらいあっけなかったです。

azcopy.exe copy "C:\temp\text.txt" "さっきコピーしたURL" --recursive=true

うまくいかなかった場合は、たぶんストレージアカウントのネットワーク制限がかかっているんだと思います。

ためしに、「すべてのネットワークから有効」に切り替えて試してみて、うまくいったら「選択した仮想ネットワークとIPアドレスから有効」にちゃんとアクセス元のIPアドレス範囲を設定しなおしてやりましょう。

たぶんイメージ図にすると、ローカルPCからBlobストレージへのファイル投稿はこんな感じ。

Azure仮想マシンからマネージドIDを使ってBlobへアクセス

仮想マシンをつかってクラウドtoクラウドでファイルのやり取りをしたいので、仮想マシンから同じようにSASをつかってみましたが、なぜかうまくいかず。

仮想マシンからの場合はマネージドIDをつかうと良いらしいと、こちらの記事を参考にさせていただきました。感謝です。

とても分かりやすかったのです。簡単にまとめると以下の通り。

  1. マネージドIDを作成する (リソース作成から、User Assigned Managed Identityを検索します)
  2. 適当なマネージドID名で作成してリソースIDを控えておく(これは後でazcopyにログインするとき使う)
  3. 仮想マシンのIDに先ほど作ったマネージドIDをユーザー割り当て済みから選択して登録する
  4. ストレージアカウントに戻って、IAMの「ストレージBLOB共同作成者」にマネージドIDを選択して登録(これでVMがBLOBに対してアクセス権を持つ)
  5. VMから azcopy login –identity –identity-client-id マネージドIDのクライアントID でログイン
  6. VMから azcopy cp “コピー元ファイル名" “https://ストレージアカウント名.blob.core.windows.net/コピー先コンテナー名/" でコピー実行

実は、5番のログインは成功するのに6番のコピーでは認証エラーが出てしまってハマりました。

理由は、ストレージアカウントのネットワーク設定でした。こちらもSASを使った方法の時と同じく、いったんすべてのネットワークからのアクセス可能にしてやるとうまくいきました。

ただ、全開放しているというのも不安です。AzureのVMの場合は、仮想ネットワークをもっており、ストレージアカウントのネットワーク設定ではその仮想ネットワークを選択することができました。

Azure 上の仮想マシンからBlobへのアクセスはこんな感じのイメージかな?

AzureのVM以外の場合は?

AWSやGoogle Cloudの場合は以下の方法で同じようにBlobストレージにデータを持ってきたりできるようです。このあたりもそのうち試してみないとね。

Amazon S3の場合はこちら https://learn.microsoft.com/ja-jp/azure/storage/common/storage-use-azcopy-s3?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json

Google Cloud Strageの場合はこちら https://learn.microsoft.com/ja-jp/azure/storage/common/storage-use-azcopy-google-cloud?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json