普段、業務でサーバーレスアーキテクチャを用いた開発が結構多く、Azure Blob Storageにファイルや画像がアップロードされたら、それをトリガーにAzure Functionsを起動させて処理するみたいな構成が度々あり、ファイル等を手元から手軽アップロードできるように、Azure Blob StorageのBlobをunixコマンドっぽく操作できるCLIツールをPythonで作ってみた。
AWS CLIのaws cli s3
コマンドみたいに使えれば良いなと思い、使用感はこちらを参考にさせてもらった。
AWS CLI での高レベル (S3) コマンドの使用 - AWS Command Line Interface
ソースコード
ソースコードはこちら
今回Pythonで作るにあたって、コマンドラインパーサーにclickを使った。
インストール
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ツールを作ってみてかなり楽になった!
もっと普段の業務などを楽にできるような便利ツールを作っていこうと思う。