はじめに
前回fzfとAWS CLIとjqを使いローカルホストから踏み台経由でログインする際にfssh
コマンド一発で簡単するという事に挑戦しました。EC2に入れるようになったらRedisにも同じ様にログインしたくなるのが性というものです。
特にキャッシュサーバはEC2に次いで頻繁にログインしたくなるホストかと思いますし、複数のサービスで別々のキャッシュサーバを立てていれば尚更実装することをおすすめします。というわけで今回は、踏み台経由でのRedisへのログインを簡単にするスクリプトを作成していきます。
準備
スクリプトを作成する前にインストールするべきライブラリがいくつかあります。このセクションの説明は前回もしているので、導入済みの方はRedis CLIのみインストールをして下さい。
1. ssh接続環境
ローカルホストから踏み台ホストへ接続出来るように秘密鍵・公開鍵を作成・配置して下さい。
2. AWS CLIが使える
AWS CLIをローカル(または踏み台)で使用します。なのでAWS CLIをインストールしておいて下さい。
3. jqが使える
JSON形式のデータを整形してくれるライブラリです。ログインするホストの情報を取得するためにRedis CLIでAPIを叩くのですが、レスポンスのJSONデータを整形するために使用します。
4. Redis CLIが使える
Redisの諸情報をコマンドから取得するためには、AWS CLIに加えてRedis CLIが必要です。AWSの公式ドキュメントが一番わかり易いです。
ログインスクリプト作成
準備が整いましたら次のコードを~/.zshrc
に追記して下さい。
fredis() {
END_POINT_JSON=`aws elasticache describe-cache-clusters --show-cache-node-info |
jq -c '.CacheClusters | .[] | { cluster: .CacheClusterId, endpoint: { address: .CacheNodes[0].Endpoint.Address, port: .CacheNodes[0].Endpoint.Port } }' |
sort | fzf`
END_POINT_HOST=`echo $END_POINT_JSON | jq -c -r .endpoint.address`
END_POINT_PORT=`echo $END_POINT_JSON | jq -c .endpoint.port`
ssh -tt Bastion redis-cli -h $END_POINT_HOST -c -p $END_POINT_PORT
}
source ~/.zshrc
かターミナルを再起動した後、fredis
とコマンドを実行するとElastiCache(Redis)のクラスター名と、エンドポイント(ホスト名とポート番号)のリストが出現して、選択するとRedisホストにログインするかと思います。
関数の一行目はRedis CLIのコマンドでクラスターの諸情報を出力しています。二行目ではjqを使って必要な情報のみを抽出しつつ一行ずつにまとめています。三行目では並び替えてからfzfにパイプで繋いでいます。
続く二行ではダブルクォーテーションを除去しながら変数にエンドポイントとなるホスト名とポート番号を格納しています。そして最終行で踏み台経由でRedisへの接続を行っています。
あえて言うこともないかと思いますが、Redisなどの各ホストへの接続は基本的に踏み台経由のみを許可することが多いです。そのためAWS CLIはローカルからでも実行出来るのですが、接続に関しては踏み台へのログインの後に実行しているのです。
以上です。
終わりに
あたかもキャッシュサーバがRedisであるかの様にRedis前提での記事を書いてしまいましたが、あくまでも自分がRedisを好んで使っているというだけですので誤解のないようお願い致します。