はじめに
こんにちは。TIG/EXユニット所属の宮永です。
本記事ではS3バケットをtreeするCLIコマンドを紹介します。
クラスメソッドさんの記事(S3 バケットの中身を tree 形式で表示してくれる s3-tree を Amazon Linux 2 にインストールして使ってみた)を拝見して、s3-treeというツールの存在を知ったのですが、profileを指定できなかったり、バケット単位でしか指定できなかったりと細かな部分で不自由さを感じたためGoでCLIツールを作成しました。
作成したツールは以下リンク先で公開しています。
streeは「エスツリー」と読みます。先に語感の良い名称を思いついたため、衝動に身を任せて開発しました。
機能概要
まずは利用画面を見ていただいたほうがイメージ付きやすいかと思いますのでgif画像を添付します。
streeは以下の機能をサポートしています。
- バケット名、プレフィックス名指定によるtree表示
- プロファイル、リージョンの指定
- LocalStack上のS3バケットのtree表示
- カラー表示(オプションで無効化も可能です)
インストール方法
GoとHomebrew経由でインストール可能です。
各種ビルド済みのバイナリも公開しているのでReleaseから手動インストールもできます。
Goによるインストール
go install github.com/orangekame3/stree@latest |
Homebrewによるインストール
brew install orangekame3/tap/stree |
使い方
前提
aws cliで利用するconfig及びcredentialsは事前に設定しておく必要があります。
以降、configとcredentialsが以下の通り設定されているものとします。
[my_profile] |
[my_profile] |
基本的なコマンド
バケット名とprofileを指定して、以下のコマンドを実行します。
プロファイルは--profile(-p)
で指定します。
stree my-bucket -p my_profile |
以下のような出力が得られます。
my-bucket |
プレフィックスを指定
通常のユースケースを考えると、バケットの中には大量のオブジェクトが存在していることが予想されます。
そのため、バケット指定しかできない状況では使い物になりません。バケット名に続けてprefixを指定することで、ユーザーが確認したいパスの情報のみを確認できます。
stree my-bucket/test/dir2 -p my_profile |
このコマンドの実行結果は以下のようになります。
my-bucket |
リージョンのオーバーライド
--region(-r)
でリージョンを指定できます。
profileに記載しているリージョンとは別のリージョンを指定したいときなどは--region
フラグを利用してオーバーライドしてください。
Localstackでの利用
Localstackでも利用できます。
ローカルスタックで利用する場合、endpointとregionはデフォルトで以下の通り設定していると思います。
endpoint = http://localhost:4566 |
大多数の場合は↑の設定で利用しているかと思いますのでLocalstack用のフラグを追加しています。--local(-l)
がそれです。
stree my-bucket/test/dir2 -l |
特別な事情でエンドポイントやリージョンを変更する場合もあるかと思いますので、--region(-r)
フラグと--endpoint(-e)
でオーバーライドすることもできます。
stree my-bucket/test/dir2 -r us-east-1 -e http://localhost:4537 |
出力は同じであるため省略します。
カラー出力を無効化
--no-color(-n)
でカラー出力を無効化できます。
▼カラーつき
▼カラーなし
さいごに
実装に取り掛かるうえでtreeは骨が折れそうだなと思ったのですが、既にgteeというパッケージがGitHubで公開されていました。
パッケージの利用方法なども記事で公開されていて実装に困ることはありませんでした。
▼参考
また、gtreeの作者である@ddddddOさんにはstreeにissueを起票いただいており、本記事公開前に致命的なバグを修正できました。ありがとうございます。
gtreeでstreeの機能の核は難なく実装できたため、着想から実装完了まで1日もかかりませんでした。
S3をtreeしてみたくなったらぜひstreeを利用してみてください。
本記事をお読みいただきありがとうございました。