Azure Blob Storage にコマンドでファイルをアップロードする

こんにちは。

備忘録までに、Azure Blob Strorageにファイルをコマンドにてアップロードする方法を記載します。

Azure Storage サービスにはいくつか種類があります。
詳細は以下を参照してください。
https://docs.microsoft.com/ja-jp/azure/storage/common/storage-introduction#example-scenarios

  • Azure Blob
  • Azure Files
  • Azure Disk
  • Azure キュー
  • Azure テーブル
  • Azure Date Like

たまにサーバー上で生成されたファイルやログファイル(非構造化データ)などをAzure上に格納する領域を準備して欲しいとご依頼を受ける時があります。
これらはどういうデータを格納するのか、また利用方法によって準備するストレージサービスも変わってきます。
(慣れ親しんでいるファイルサーバーみたいな使い方をしたい、今後大量のデータをアップする予定だ。など)

今回は、Azure Blob ストレージを使ってファイルの格納を行う方法について確認していきたいと思います。

Azure BLOB ストレージとは

Azure BLOB ストレージはファイルやJPGイメージ、ビデオコンテンツなどのような、決められた構造を持たない非構造化データを格納することができるものです。
また、大容量のデータ格納にも向いており、HTTPorHTTPS(REST API)経由でどこからでもアクセスできることが大きなメリットです。

使い方・ファイルのアップロード

ファイルサーバーなどのSMBプロトコルでのやりとりではなく、仮想マシンなどにマウントするような使い方ではありません。単純にサーバーにディスクをアタッチしたいとか、ファイルサーバーみたいな使い方をしたいということであれば、Azure Filesや、Azure Diskを利用する方がいいかもしれません。Azure Blobでのファイルのやり取りはざっくりいうと以下に分かれると思います。

  • Azure ポータル経由
  • Microsoft Azure Storage Explore(ツール)
  • AzCopy(ツール)

Azureポータル経由はそのままの通りでAzureポータルに接続し、対象コンテナ上で「アップロード」をクリックすれば、ファイルを保管できます。

Microsoft Azure Storage ExploreはAzureポータルに接続をしたときに「Exploreで開く」というメニューが表示されていることがわかります。
クリックすると、ツールをインストールできるのでダウンロードしましょう。

URLは以下になります。

Azure Storage Explore

Free tool to conveniently manage your Azure cloud storage resources from your desktop

こんな感じで表示されます。
ツールをひらけば、ファイルの操作ができるという感じです。

ただ、上記ではあくまで人の手でファイルのオペレーションを行う必要があります。
そこでAzcopyというコマンドラインのユーティリティが用意されております。

Azcopyによるコマンドラインでのアップロード

まずは、AzCopyコマンドを利用できるように、実行可能ファイルをダウンロードしておきます。

AzCopy をダウンロードする

まず、お使いのコンピューター上の任意のディレクトリに AzCopy V10 実行可能ファイルをダウンロードします。 AzCopy V10 は単に実行可能ファイルなので、インストールするものはありません。

次に、AzCopyを使いやすくするために、AzCopy実行可能ファイルのディレクトリパスを環境変数に追加しておきます。

準備が終われば、コマンドを実行してファイルコピーを試してみます。

例えば、以下適当なフォルダをコピーするとなったときは、以下のコマンドを実行すれば良いのですが、
これだけでは、資格情報がないと言われ、エラーが発生します。

azcopy copy ‘コピー元ファイル’ ‘コンテナURL’
※cmd.exe以外はシングルコーテーションで囲います。cmd.exeで実行する場合はダブルコーテーションです。

azcopy copy 'C:\work\azupload\tetete.txt' 'https://blobstrageadmin.blob.core.windows.net/testcontainer/'

以下のURLに記載の通り、複数のパターンのうち、どれかで認証情報を設定してあげる必要があります。
今回はSASを使ってファイルのアップロードを行いたいと思います。

Azure Storage に対する要求を承認する

Blob、File、Queue、または Table service 内のセキュリティで保護されたリソースに対して行われたすべての要求は、承認されている必要があります。 承認により、ストレージアカウント内のリソースは、必要な場合にのみアクセスできるようになり、アクセス権を付与するユーザーまたはアプリケーションのみにアクセスできるようになります。
次の表は、リソースへのアクセスを承認するために Azure Storage に用意されているオプションをまとめたものです。
Azure Storage Services共有キー (ストレージ アカウント キー)Shared Access Signature (SAS)Azure Active Directory (Azure AD)オンプレミス Active Directory Domain Services匿名のパブリック読み取りアクセス
Azure BLOBサポートされていますサポートされていますサポートされていますサポートされていませんサポートされています
Azure Files (SMB)サポートされていますサポートされていませんAAD ドメイン サービスでのみサポートされていますサポートされています。資格情報を Azure AD と同期する必要がありますサポートされていません
Azure Files (REST)サポートされていますサポートされていますサポートされていませんサポートされていませんサポートされていません
Azure キューサポートされていますサポートされていますサポートされていますサポートされていませんサポートされていません
Azure テーブルサポートされていますサポートされていますサポートされていますサポートされていませんサポートされていません

SAS(Shared Access Signature)とは

Shared Access Signatureキーの略称。日本語では「共有アクセス署名」。
リソースへの制限付きアクセス権と時間を組み合わせたトークン(URL)です。

上記SASトークンをコマンドに付与することで、ファイルへのアップロードを可能とします。

AzCopy を承認する

認証資格情報は、Azure Active Directory (AD) または Shared Access Signature (SAS) トークンを使用して提供できます。

以下対象のコンテナーの「共有アクセストークン」から必要アクセス許可権限と有効期限を設定し、「SASトークンおよびURLを生成」をクリックします。

すると、以下のようにURLが生成されます。

このURL情報を以下のようにコマンドラインに付与し、アップロードをおこないます。
※以下のコマンドの中に記載しているURLは適用なものです。

azcopy copy 'C:\work\azupload' 'https://blobstrageadmin.blob.core.windows.net/testcontainer?sp=racw&st=2021-08-28T06:36:02Z&se=2099-08-28T14:36:02Z&spr=https&sv=2020-08-04&sr=c&sig=MGCXiyEzbtttkr3ewJIh2AR8KrghSy1DGM9ovN734bQF4%Ex%2FiWA6utxaDwPuFiyU%3D' --recursive=true

以下のようにフォルダがアップロードされ、中身のファイル群も無事アップロードできていることを確認しました。

おまけ

その他、条件に該当するものだけをアップロードしたりすることもできるので、ご参考までに。

複数の完全なファイル名を指定する

azcopy copy コマンドを --include-path オプションと共に使用します。 セミコロン (;) を使用して、個々のファイル名を区切ります。

ワイルドカード文字を使用する

zcopy copy コマンドを --include-pattern オプションと共に使用します。 ワイルドカード文字を含む名前の一部を指定します。 セミコロン (;) で名前を区切ります。