AWS CLIっぽくAzure Blob StorageのBlobを操作できるCLIツールを作った

普段、業務でサーバーレスアーキテクチャを用いた開発が結構多く、Azure Blob Storageにファイルや画像がアップロードされたら、それをトリガーにAzure Functionsを起動させて処理するみたいな構成が度々あり、ファイル等を手元から手軽アップロードできるように、Azure Blob StorageのBlobをunixコマンドっぽく操作できるCLIツールをPythonで作ってみた。

AWS CLIaws cli s3コマンドみたいに使えれば良いなと思い、使用感はこちらを参考にさせてもらった。

AWS CLI での高レベル (S3) コマンドの使用 - AWS Command Line Interface

ソースコード

ソースコードはこちら

github.com

今回Pythonで作るにあたって、コマンドラインパーサーにclickを使った。

click.palletsprojects.com

rnakamine.hatenablog.com

インストール

PyPIからインストールする

$ pip install blobcli

環境変数に操作するBlob Storageの接続文字列を格納する。

$ export AZURE_STORAGE_CONNECTION_STRING="<接続文字列>"

blobcliコマンドで使用可能

$ blobcli
Usage: blobcli [OPTIONS] COMMAND [ARGS]...

  blob storage easy operation cli (v0.0.1)

Options:
  --help  Show this message and exit.

Commands:
  cp  Copy blob.
  ls  List containers or blobs.
  mv  Move blob.
  rm  Delete blob.

コンテナ、Blobの一覧を表示する

lsオプションでコンテナの一覧を表示

$ blobcli ls
2021-04-04 12:41:09+00:00 samplecontainer01
2021-04-04 12:41:19+00:00 samplecontainer02
2021-04-04 12:41:26+00:00 samplecontainer03

コンテナを指定するとBlobの一覧を表示できる。

$ blobcli ls samplecontainer01
                            PRE sample-dir01/
                            PRE sample-dir02/
2021-04-04 12:43:49+00:00    0B sample01.txt
2021-04-04 12:43:54+00:00    0B sample02.txt
2021-04-04 12:43:58+00:00    0B sample03.txt

Blobのコピー、移動

cp,mvオプションを付けてunixコマンドっぽくファイルの移動、コピーができる。

Blob Storage側を指定する場合は以下のようにblob://を付け加える。

blob://<コンテナ名>/<Blob名>

ローカルからBlob StorageへBlobをコピー

$ blobcli cp sample05.txt blob://samplecontainer01/sample-dir01/
copy: sample05.txt to blob://samplecontainer01/sample-dir01/

Blob StorageからローカルへBlobを移動

$ blobcli mv blob://samplecontainer01/sample-dir01/sample05.txt .
move: blob://samplecontainer01/sample-dir01/sample05.txt to .

Blobの削除

rmオプションを付けて、こちらもunixコマンドっぽくファイルの削除ができる。

$ blobcli rm blob://samplecontainer01/sample03.txt
delete: blob://samplecontainer01/sample03.txt

まだできないこと

AWS CLIではできるが、まだblobcliでは対応できてない機能がいくつかある。

  • コンテナの作成、削除
  • ディレクトリの再帰的な操作
  • オブジェクトの同期 など

感想

普段業務で開発中に毎回Azure Portalからファイルをアップロードして検証していたりしていてなかなか面倒だったので、 今回CLIツールを作ってみてかなり楽になった!

もっと普段の業務などを楽にできるような便利ツールを作っていこうと思う。