AzCopyでファイルをBlobストレージへアップロードする
オンプレからクラウドにファイルをアップロードするには?
いよいよこのあたりに手を付けないといけなくなったので、お勉強しました(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をつかうと良いらしいと、こちらの記事を参考にさせていただきました。感謝です。
とても分かりやすかったのです。簡単にまとめると以下の通り。
- マネージドIDを作成する (リソース作成から、User Assigned Managed Identityを検索します)
- 適当なマネージドID名で作成してリソースIDを控えておく(これは後でazcopyにログインするとき使う)
- 仮想マシンのIDに先ほど作ったマネージドIDをユーザー割り当て済みから選択して登録する
- ストレージアカウントに戻って、IAMの「ストレージBLOB共同作成者」にマネージドIDを選択して登録(これでVMがBLOBに対してアクセス権を持つ)
- VMから azcopy login –identity –identity-client-id マネージドIDのクライアントID でログイン
- VMから azcopy cp “コピー元ファイル名" “https://ストレージアカウント名.blob.core.windows.net/コピー先コンテナー名/" でコピー実行
実は、5番のログインは成功するのに6番のコピーでは認証エラーが出てしまってハマりました。
理由は、ストレージアカウントのネットワーク設定でした。こちらもSASを使った方法の時と同じく、いったんすべてのネットワークからのアクセス可能にしてやるとうまくいきました。
ただ、全開放しているというのも不安です。AzureのVMの場合は、仮想ネットワークをもっており、ストレージアカウントのネットワーク設定ではその仮想ネットワークを選択することができました。
Azure 上の仮想マシンからBlobへのアクセスはこんな感じのイメージかな?
AzureのVM以外の場合は?
AWSやGoogle Cloudの場合は以下の方法で同じようにBlobストレージにデータを持ってきたりできるようです。このあたりもそのうち試してみないとね。
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
ディスカッション
コメント一覧
まだ、コメントがありません