Mac OS XのターミナルからWindows Azure Blobを操作する


Mac OS XやLinuxで開発をしていながら、Windows AzureをWebアプリケーションのデプロイ先としていると困ることの一つに、Mac OS XやLinuxからはAzure Blobにあるファイルを操作(直接アップロードやPrivateコンテナにあるファイルのダウンロードなど)を簡単にするためのツールが存在しないということがあります。

そのため、まずはコマンドラインツールを作り始めていたのですが、見つけちゃいました。コマンドラインで操作ができるものを。

xmbms / azure-sdk-tools-xplat (storageブランチ)
https://github.com/xmbms/azure-sdk-tools-xplat/tree/storage

Microsoftからオフィシャルで提供されているWindows Azure Cross-platform Command Line ToolsからForkして作られていて、本家のソースにマージして利用することも可能です。

と思ってこの記事を書いた2日後には、本家のdevブランチにマージされました。
https://github.com/WindowsAzure/azure-sdk-tools-xplat/tree/dev

と思ってこの記事を修正した2週間後には、stableとしてnpmのリポジトリに入ってました。
https://npmjs.org/package/azure-cli

これでMac OS XやLinuxからもAzure Blobを操作することができます。
(Windowsでも利用可能です。)

それでは、Mac OS XのターミナルでAzure Blobにアクセスできる環境を作ってみましょう。

※以下の方法は2013/08/25時点での手順です。

  1. node.jsで書かれていて実行に必要なので、node.jsをインストールします。
    node.jsのサイトからMac OS X用のインストーラーをダウンロードしてインストールします。
    http://nodejs.org/download/
  2. npmでazure-cliパッケージモジュールをインストールします。
    $ sudo npm install -g azure-cli

以上で環境はできました。

helpを表示して、利用できるようになっていることを確認してみましょう。

$ azure -h
info:             _    _____   _ ___ ___
info:            /_\  |_  / | | | _ \ __|
info:      _ ___/ _ \__/ /| |_| |   / _|___ _ _
info:    (___  /_/ \_\/___|\___/|_|_\___| _____)
info:       (_______ _ _)         _ ______ _)_ _
info:              (______________ _ )   (___ _ _)
info:
info:    Windows Azure: Microsoft's Cloud Platform
info:
info:    Tool version 0.7.1
help:
help:    Display help for a given command
help:      help [options] [command]
help:
help:    Opens the portal in a browser
help:      portal [options]
help:
help:    Commands:
help:      account                 Commands to manage your account information and publish settings
...省略...
help:      storage                 Commands to manage your Storage objects
help:      storage account         Commands to manage your Storage accounts
help:      storage account keys    Commands to manage your Storage account keys
help:      storage blob            Commands to manage your Storage blob
help:      storage container       Commands to manage your Storage container
...省略...
help:
help:    Options:
help:      -h, --help     output usage information
help:      -v, --version  output the application version

storage blobというコマンドが利用できるようになっているのがわかりますね。

さらに、storage blobコマンドのヘルプを見てみましょう。

$ azure storage blob -h
help:    Commands to manage your Storage blob
help:
help:    List storage blob in the specified storage container use wildcard and blob name prefix
help:      storage blob list [options] [container] [blob]
help:
help:    Show details of the specified storage blob
help:      storage blob show [options] [container] [blob]
help:
help:    Delete the specified storage blob
help:      storage blob delete [options] [container] [blob]
help:
help:    Upload the specified file to storage blob
help:      storage blob upload [options] [file] [container] [blob]
help:
help:    Download the specified storage blob
help:      storage blob download [options] [container] [blob] [destination]
help:
help:    Options:
help:      -h, --help  output usage information
  • storage blob list
    コンテナ内のblobをリストする
  • storage blob show
    blobの詳細情報を表示する
  • storage blob delete
    blobを削除する
  • storage blob upload
    blobストレージにファイルをアップロードする
  • storage blob download
    blobストレージからファイルをダウンロードする

さらに、各々のコマンドのヘルプも見れます。

$ azure storage blob list -h
help:    List storage blob in the specified storage container use wildcard and blob name prefix
help:
help:    Usage: storage blob list [options] [container] [blob]
help:
help:    Options:
help:      -h, --help                                  output usage information
help:      -v, --verbose                               use verbose output
help:      --json                                      use json output
help:      --container                                 Storage container name
help:      -p, --prefix                                Blob name prefix
help:      -a, --account-name                          Azure Storage account name
help:      -k, --account-key                           Azure Storage account key
help:      -c, --connection-string                     Azure Storage connection string
help:      --debug                                     Run storage command in debug mode

では実際にblobにアクセスしてみましょう。
(それぞれのコマンドのオプションの詳細は-hオプションで確認してください。)

storage blob listコマンドでコンテナ内のblobの一覧を表示します。

$ azure storage blob list -a demostorageaccountname -k demostorageaccountkey democontainer
info:    Executing command storage blob list
+ Looking up blobs in container democontainer
data:    Name                                  BlobType  Length       Content-Type              Last-Modified                  SnapshotTime
data:    ------------------------------------  --------  -----------  ------------------------  -----------------------------  ------------
data:    iperf-xs01-iperf-xs01-2013-07-24.vhd  PageBlob  32212255232  application/octet-stream  Fri, 02 Aug 2013 07:22:14 GMT
data:    iperf01-iperf01-2013-07-24.vhd        PageBlob  32212255232  application/octet-stream  Fri, 02 Aug 2013 07:22:19 GMT
data:    xdemo-xdemo-2013-06-30.vhd            PageBlob  32212255232  application/octet-stream  Sat, 03 Aug 2013 15:42:13 GMT
info:    storage blob list command OK

ここでは-a, -kオプションでストレージアカウント名、ストレージキーを指定しましたが、環境変数AZURE_STORAGE_ACCOUNTとAZURE_STORAGE_ACCESS_KEYでそれぞれを指定することも可能です。

$ export AZURE_STORAGE_ACCOUNT=demostorageaccountname
$ export AZURE_STORAGE_ACCESS_KEY=demostorageaccountkey
$ azure storage blob list democontainer
info:    Executing command storage blob list
+ Looking up blobs in container democontainer
data:    Name                                  BlobType  Length       Content-Type              Last-Modified                  SnapshotTime
data:    ------------------------------------  --------  -----------  ------------------------  -----------------------------  ------------
data:    iperf-xs01-iperf-xs01-2013-07-24.vhd  PageBlob  32212255232  application/octet-stream  Fri, 02 Aug 2013 07:22:14 GMT
data:    iperf01-iperf01-2013-07-24.vhd        PageBlob  32212255232  application/octet-stream  Fri, 02 Aug 2013 07:22:19 GMT
data:    xdemo-xdemo-2013-06-30.vhd            PageBlob  32212255232  application/octet-stream  Sat, 03 Aug 2013 15:42:13 GMT
info:    storage blob list command OK

storage blob showコマンドで指定したblobの詳細を表示します。

$ azure storage blob show democontainer xdemo-xdemo-2013-06-30.vhd
info:    Executing command storage blob show
+ Retrieving Storage blob information
data:    {
data:        container: 'democontainer',
data:        blob: 'xdemo-xdemo-2013-06-30.vhd',
data:        metadata: { pirtag: '1' },
data:        etag: '"0x8D05E7A20C47A36"',
data:        lastModified: 'Sat, 03 Aug 2013 16:03:28 GMT',
data:        contentType: 'application/octet-stream',
data:        contentMD5: '0KsJ1Xs4D5d5/vsrt/cJnQ==',
data:        contentLength: '32212255232',
data:        blobType: 'PageBlob',
data:        leaseStatus: 'locked',
data:        leaseDuration: 'infinite',
data:        leaseState: 'leased',
data:        sequenceNumberHeader: '6',
data:        copyStatus: 'success',
data:        copyCompletionTime: 'Sun, 30 Jun 2013 11:34:25 GMT',
data:        copyId: 'cead020d-e1f0-42bf-9fd9-f2650cd8ad24',
data:        copyProgress: '32212255232/32212255232',
data:        requestId: '3e527f55-9399-421a-9995-91d62272b2fd'
data:    }
info:    storage blob show command OK

storage blob uploadコマンドでファイルをblobストレージにアップロードします。

$ azure storage blob upload jpegfile.jpg democontainer
info:    Executing command storage blob upload
+ Checking blob jpegfile.jpg in container democontainer
+ Uploading jpegfile.jpg to blob jpegfile.jpg in container democontainer
Percentage: 100.0% (127.96KB/127.96KB) Speed: 127.96KB/S Elapsed Time: 00:00:01
+ Retrieving Storage blob information
data:    {
data:        container: 'democontainer',
data:        blob: 'jpegfile.jpg',
data:        metadata: {},
data:        etag: '"0x8D05E7D1B87726E"',
data:        lastModified: 'Sat, 03 Aug 2013 16:24:48 GMT',
data:        contentType: 'image/jpeg',
data:        contentMD5: 'KAGSFZsdoqdCd0Z8Js8Yug==',
data:        contentLength: '131036',
data:        blobType: 'BlockBlob',
data:        leaseStatus: 'unlocked',
data:        leaseState: 'available',
data:        requestId: 'ada8f577-603d-424a-b5cf-0b316929a1d2'
data:    }
info:    storage blob upload command OK

storage blob deleteコマンドでblobを削除します。

$ azure storage blob delete democontainer jpegfile.jpg
info:    Executing command storage blob delete
+ Deleting Blob jpegfile.jpg in container democontainer
info:    Blob jpegfile.jpg deleted successfully
info:    storage blob delete command OK

ちなみに、コンテナの作成はstorage container createコマンドで実施できます。(このコマンドはMSオフィシャルのWindows Azure Cross-platform Command Lineでも可能です。)
-pオプションでコンテナのパーミッションを指定します。(OFF: Private / Blob: blobのみPublic / Container: Public)

$ azure storage container create -p Off democontainer
info:    Executing command storage container create
+ Creating Windows Azure Storage container democontainer
+ Retrieving Storage container information
data:    {
data:        name: 'democontainer',
data:        metadata: {},
data:        etag: '"0x8D05E7AA5A1D007"',
data:        lastModified: 'Sat, 03 Aug 2013 16:07:11 GMT',
data:        leaseStatus: 'unlocked',
data:        leaseState: 'available',
data:        requestId: '9223954c-df82-477c-9a45-1b989d2973e2',
data:        publicAccessLevel: 'Off'
data:    }
info:    storage container create command OK

これでMac OS XからAzure Blobの一通りの操作ができることをご覧いただけました。
今回はAzure Blobをコマンドラインで操作するものを紹介しましたが、Webブラウザで操作するためのPHPスクリプト「Azure Blob Editor」というものもあります。


タグ: , ,


コメント / トラックバック2件

  1. 田中 より:

    AZURE_STORAGE_CONNECTION_STRING を設定しようとして、時間を無駄にしました。

    $ env | grep AZURE
    AZURE_STORAGE_CONNECTION_STRING=
    AZURE_STORAGE_ACCESS_KEY=HBX…==
    AZURE_STORAGE_ACCOUNT=xxxxxxstorage
    $ azure storage container list
    info: Executing command storage container list
    + Getting storage containers
    data: Name Public-Access Last-Modified
    data: ——- ————- —————————–
    data: $root Container Mon, 13 Apr 2015 08:09:41 GMT
    data: images Container Tue, 25 Nov 2014 03:20:35 GMT

  2. 田中 より:

    1 ファイルづつしかダウンロードできない、という単純は事実に気がつくまでに、また時間がかかってしまいました。

コメントをどうぞ