背景
あ、あの情報が必要なんだけど、なんだっけな。。
という時に、さくっと情報を取り出せたらスマートですよね。
業務上、EC2 インスタンスID 知りたくなることがあります。
SSH over Session Manager で接続したいので、インスタンスID が必要だったり、 aws cli で AMI作りたいので、インスタンスID が必要だったり。
ブラウザからAWSコンソールにアクセスして調べたり aws cli で describe-instances を使って調べることももちろん可能です。
ただただ、スマートではありません。
調べようとしているうちに、他のエンジニアから質問を受けて、
あれ、何を調べようとしてたんだっけと、コンテキストスイッチが発生して、時間が余計にかかってしまいます。
(※ 質問するのがダメとか言いたいわけではありませんw)
前提
- aws cli がインストール済みである
- EC2 を業務でよくさわる
対応
簡単です
$ cat <<'FUNCTION' >> ~/.$(basename $SHELL)rc
function guess-ec2() {
function help() {
cat <<EOT >&2
guess-ec2 <guess> <profile>
<guess> ec2 インスタンスの tag:Name の文字列の一部を指定します
<profile> aws-cli で指定するプロファイルがある場合は指定します (任意)
ex.
1. guess-ec2 web prod
2. guess-ec2 batch
EOT
}
if [ $# -eq 0 ]; then
echo 引数は1つ以上指定してください >&2
help
return 1;
fi
GUESS=$1
PROFILE=default
if [ $# -ge 2 ]; then
PROFILE="$2"
fi
aws --profile $PROFILE \
ec2 describe-instances \
--filter "Name=tag:Name,Values=*$GUESS*" \
--query 'Reservations[].Instances[].{id:InstanceId,name:Tags[?Key==`Name`].Value|[0],ip:PrivateIpAddress}'
}
FUNCTION
// shell をリロード
$ $SHELL -l
これでOK
guess-ec2 ${tag:Name の一部}
と打つと欲しい情報が瞬時にとれます
情報が取れたあと、他のエンジニアから質問されても
そうだった、インスタンスID がほしかったんだと、仕事もスムーズです。
$ guess-ec2 web
[
{
"id": "i-0bdafc0a9",
"name": "production-web",
"ip": "10.0.16.94"
},
{
"id": "i-ef7ff14d",
"name": "production-web",
"ip": "10.0.23.84"
}
]