Azure Blob Storageで管理されてる大きなサイズのファイルをダウンロードする際に

gigazine.net

商用データベース管理システムを開発するソフトウェア企業のCockroach Labsが、クラウドのパフォーマンスをベンチマークで比較した「2022年度クラウドレポート」を公開しました。

Amazon・Google・Microsoftのクラウドのパフォーマンスを比較した2022年度クラウドレポートが公開される - GIGAZINE

⇧ 比較対象にOracleクラウドが入ってないのは、「Cockroach Labs」がデータベースを扱ってるからということでしょうかね...

Oracleは、RDBMS(Realtional DataBase Management System)界隈で常に上位をキープしてますから、商売敵という気持ちもあるんかな...

個人的には、Oracleクラウドも比較に加えて欲しかった気がしますが。

Azure Blob Storageで管理されてる大きなサイズのファイルをダウンロードする際に

Azure Portalから、3GB相当の動画ファイルのダウンロードを実行した際に、8時間経っても終わる気配がなく断念したんですが、大きなサイズのファイルのダウンロードが不可能なら不可能で良いのでドキュメントに記載しといてって話ですけど...

世界的な大企業のMicrosoftさんは、ユーザー(利用者)をどう思ってるのか伺ってみたいものです...

ネット上で情報を探ってみたところ、

docs.microsoft.com

github.com

Hey @flixius . The error you are seeing seems to a network connectivity issue. How reliably does this repro for you? Also, if you need this file urgently, there are two other methods we recommend for downloads and uploads:

  • AzCopy, your best bet for big files.
  • Use the Azure Portal, not the best for big files, but might work.

https://github.com/Microsoft/AzureStorageExplorer/issues/582

⇧ Azure Portalからでもダウンロードできるとは言ってるけど、3GBのファイルでさえ8時間経ってもダウンロード完了しなかったから、当然信用できんよね...

stackoverflow.com

⇧ AzCopyコマンドなるものを推奨していますと。

コマンドの選択肢としては、AzCopyかAzure CLIになってくる模様

Azure Blob Storageの公式のドキュメントを見る限り、

docs.microsoft.com

⇧ ダウンロードが実施できるコマンドとしては、

  • AzCopy
  • Azure CLI

のどちらかをPCにインストールすることになってくるのかな?

C#JavaPythonJavaScriptといったプログラミング実装であれば、勿論ダウンロードできると思うけど。

■AzCopy

docs.microsoft.com

docs.microsoft.com

AzCopy は、ストレージ アカウント間の BLOB またはファイル コピーに利用できるコマンドライン ユーティリティです。

https://docs.microsoft.com/ja-jp/azure/storage/common/storage-use-azcopy-v10

 

■Azure CLI

docs.microsoft.com

Azure コマンド ライン インターフェイス (CLI) は、Azure に接続して Azure リソースに対して管理コマンドを実行するためのクロスプラットフォームのコマンド ライン ツールです。 これにより、対話型のコマンド ライン プロンプトを使用したターミナルまたはスクリプトを通じてコマンドを実行できます。

https://docs.microsoft.com/ja-jp/cli/azure/what-is-azure-cli?view=azure-cli-latest

 

2つのコマンドの違いとしては、

  • AzCopy
    外部のクラウドのストレージサービスと連携できる
  • Azure CLI
    Microsoft Azure内のサービスに対してのみ

といったところでしょうか。AzCopyはファイルのダウンロードやアップロードに特化したコマンドってことになるんかな?

ハマりどころは権限の問題

ハマりどころとしては、権限の問題が分かり辛いところでしょうか。

jpazpaas.github.io

Q. 所有者ロールが付与されているユーザーは Azure Portal で BLOB 一覧を閲覧できました。なぜ CLI では権限エラーが発生するのでしょうか。
A. ロールに Microsoft.Storage/storageAccounts/listKeys/action が含まれている場合、そのロールが割り当てられているユーザーは、アカウント アクセス キーを使って共有キー認証を使用してストレージ アカウントのデータにアクセスできます。

https://jpazpaas.github.io/blog/2021/01/29/storage-permission-mismatch.html

⇧ 罠が多過ぎる...

GUICUIで異なる挙動とか本当に勘弁して欲しい...

しかも、上記は「Azure CLI」の問題らしいのですが、自分は、「AzCopy」でこの事象に遭遇しました。

Microsoftさん、裏仕様みたいなの止めて...

必要な権限が究極的に分かり辛いのをどうにかして欲しい...

Azure CLIのaz storage blobコマンドでAzure Blob Storage で管理されてるファイルをダウンロード

話を戻しまして、大きなサイズのファイルのダウンロードですが、自分のケースでは、

docs.microsoft.com

⇧「Azure CLI」の「az storage blob download」というコマンドで、Azure Blob Storage にアップロードされていた大きなサイズの動画ファイルをダウンロードすることができました。

Azure Blob Storage 上にアップロードされてるファイルをローカル環境にダウンロードする場合は、

az storage blob download -f /path/to/file -c mycontainer -n myblob --account-name mystorageaccount --account-key myaccountkey

⇧ というようなコマンドになりますかね。

「mystorageaccount」と「myaccountkey」の値は、Azure Portal のAzure Blob Storage のリソースのページの左サイドバーから「アクセス キー」を選択し確認できます。

「ストレージ アカウント名」が「mystorageaccount」にあたり、『キーの表示』を選択すると、

「キー」の値が確認でき、この値が「myaccountkey」になります。

「mycontiner」と「myblob」については、Azure Portal のAzure Blob Storage のリソースのページの左サイドバーから「ストレージ ブラウザー(プレビュー)」の「BLOB コンテナー」で確認できます。

「BLOB コンテナー」に表示されてる一覧が「mycontiner」に該当し、適当に1つ「BLOB コンテナー」を選択してみて、

「BLOB コンテナー」に格納されてるのが「BLOB」になるので、「myblob」に設定する値になります。

「/path/to/file」については、ダウンロード先ですかね。

「file」の部分は、Azure Blob Storage のダウンロード対象の「BLOB」のファイル名と同じにすれば良いかと。

気を付けたいのは、ダウンロード先のフォルダは事前に作成しておかないとエラーになります。

⇧ downloadというサブフォルダを作っていなかったらエラーになった。

Azure CLIが良しなにフォルダを作成してくれるわけではない点に注意。

事前にフォルダを作っておくと、無事成功。

作成しておいたフォルダにダウンロードされました。

「BLOB コンテナー」内の全てをダウンロードできるっぽい「az storage blob download-batch」についても試してみた。

ただ、ファイルのサイズは、一番大きいものでも6.73 MBなので、大きいサイズのダウンロードの挙動の参考にはなりませんが...

docs.microsoft.com

「mystorageaccount」と「myaccountkey」は必須っぽい、ドキュメントの参考コマンドが省略してるのは何故なのか...

以下のような感じになるかと。

cd [ダウンロード先]
az storage blob download-batch -d . --pattern * -s mycontainer --account-name mystorageaccount --account-key myaccountkey

ダウンロードできたようです。

毎度モヤモヤ感が半端ない...

今回はこのへんで。