DenoでSSM Parameter StoreのCLIツール作った
はじめに
こんにちは!
ispecのVPoEのいしかわです
Deno Advent Calendar 2023の21日目の記事です!
ECSでサーバーを立てる時の環境変数に入れる値の置き場として AWS Systems Manager Parameter Storeが使えますが、値の確認がめんどくさい!
ってことでFuzzy FindできるCLIを作りました🦖
作ったもの
SSM Parameter Storeの FuzzyFindや値の取得、作成、更新ができます
denoとBrewでインストールできます
# Deno
$ deno install -A https://deno.land/x/denosm/index.ts -n sm -f
# Homebrew
$ brew install YumaFuu/tap/sm
使用技術
ベースはみんな大好き デノ(ディノが正しいらしい) です🦖
そのシンプルさから愛用していますが、特にこういったCLIツールを作るのにはもってこいです
Dax
Dax はDenoで動くShellツールです。
shellでパイプやリダイレクトを頑張って書くのは読むのも書くのも大変ですがそれを解決してくれるツールです。
import $ from "https://deno.land/x/dax/mod.ts";
const list = await $`aws ssm describe-parameters --profile ${profile}`.json();
こんな感じでaws cliの結果のjsonをjsでゴニョゴニョしています
zennでもいくつかの記事が上がっていますので、要チェック!!
Cliffy
DenoでCLIツールを作る際のフレームワークです
smコマンドでは、cliコマンドの作成とtty, keypressを使っています。
import { colors, tty } from "https://deno.land/x/cliffy@v1.0.0-rc.3/ansi/mod.ts";
// ...
tty.cursorHide();
// ...
tty
.cursorTo(0, 0)
.eraseScreen();
// ...
highlighted += colors.bold.blue(s);
promptやtable描画などもあるのでDenoでCLIツールを作る時はこれ使えば間違い無いです✌️
fzf-for-js
fzfのアルゴリズムのJS実装です
fzfはコマンドラインで愛用していますが、今回はDenoなので esm.sh で配信されているfzf-for-jsを使いました
const fzf = new Fzf(options);
let hits = fzf.find(search);
といった感じでかなり簡単に曖昧検索が実装できます
ghr
GitHub Release に複数のアーティファクトをアップロードするツールで体験が良かったです
denoは複数のプラットフォームに向けてバイナリを作成できるので、それをリリースしました
actions用のパッケージがあったのでこちらを使っています
release:
name: Release Packages
runs-on: ubuntu-latest
needs:
- compile
steps:
- uses: actions/checkout@v3
- { uses: actions/download-artifact@v3, with: { name: x86_64-unknown-linux-gnu, path: release/ } }
- { uses: actions/download-artifact@v3, with: { name: x86_64-apple-darwin, path: release/ } }
- { uses: actions/download-artifact@v3, with: { name: aarch64-apple-darwin, path: release/ } }
- name: Release
uses: fnkr/github-action-ghr@v1
env:
GHR_PATH: release/
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
終わりに
かなり簡単に満足いくものが作れました
値の作成、更新の機能もつけたらもっと使いやすくなりそうなのでぼちぼちやっていきたいです🚶
Discussion