LoginSignup
1
0

More than 3 years have passed since last update.

EC2 インスタンス名の一部からインスタンス情報を瞬時に出す

Last updated at Posted at 2020-07-28

背景

あ、あの情報が必要なんだけど、なんだっけな。。
という時に、さくっと情報を取り出せたらスマートですよね。

業務上、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"
    }
]
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0