AWSアカウントを横断してEC2を検索できる「ec2-search」を作った
AWSからメンテナンスメールが来たりするんですが、
アカウントIDとインスタンスIDしか記載されていないので、
「どこのサーバーが対象なんだ?」というのがすぐわからず
対象のアカウントIDのコンソールに入ってEC2を検索…みたいなことをやっていました。
いい加減煩わしくなってきたので、
AWSアカウントを横断して検索できる「ec2-search」を作りました!
https://github.com/morix1500/ec2-search
ec2-searchとは
タイトルの通り「AWSアカウントを横断して」EC2の検索が出来るGo言語製のコマンドラインツールです。
以下が使用例です。
tagName | instance id | private ip | public ip |
---|---|---|---|
hoge-instance1 | i-hogexxx | 10.0.0.0 | 11.22.33.44 |
hoge-instance2 | i-hogeyyy | 10.0.0.1 | 22.33.44.55 |
AWS Account: fuga
tagName | instance id | private ip | public ip |
---|---|---|---|
fuga-instance1 | i-fugaxxx | 10.0.0.2 | 33.44.55.66 |
fuga-instance2 | i-fugayyy | 10.0.0.3 | 44.55.66.77 |
AWS Account: puyo
tagName | instance id | private ip | public ip |
---|---|---|---|
puyo-instance1 | i-puyoxxx | 10.0.0.4 | 55.66.77.88 |
puyo-instance2 | i-puyoyyy | 10.0.0.5 | 66.77.88.99 |
$ cat ~/.aws/credentials [hoge] aws_access_key_id = XXXXXXXXXXX aws_secret_access_key = XXXXXXXXXXX [fuga] aws_access_key_id = XXXXXXXXXXX aws_secret_access_key = XXXXXXXXXXX [piyo] aws_access_key_id = XXXXXXXXXXX aws_secret_access_key = XXXXXXXXXXX $ ec2-search --name fuga-instance1 Name InstanceID InstanceType PrivateIP PublicIP PublicDNSName LaunchTime fuga-instance1 i-fugaxxx t2.micro 10.0.0.2 33.44.55.66 ec2-33-44-55-66.ap-northeast-1.compute.amazonaws.com 2017-08-18 07:04:04 $ ec2-search --name fuga-instance1 | ruler -t tsv +----------------+------------+--------------+-------------+---------------+--------------------------------------------------------+---------------------+ | Name | InstanceID | InstanceType | PrivateIP | PublicIP | PublicDNSName | LaunchTime | +----------------+------------+--------------+-------------+---------------+--------------------------------------------------------+---------------------+ | fuga-instance1 | i-fugaxxx | t2.micro | 10.0.0.2 | 33.44.55.66 | ec2-33-44-55-66.ap-northeast-1.compute.amazonaws.com | 2017-08-18 07:04:04 | +----------------+------------+--------------+-------------+---------------+--------------------------------------------------------+---------------------+
加工しやすいように、tsv形式でEC2の情報を表示してます。
拙作ですが見やすいように「Ruler」で表形式にしてます。
CSVやLTSVを表形式で出力するGo製のコマンド「Ruler」を作った
https://blog.haramishio.xyz/post/000006/
ec2-searchの特徴
このコマンドの特徴は、複数のAWSアカウントでEC2を検索できることです。
よくあるシチュエーションとして、
設定ファイルなどに記述されている「謎のIP」がどのEC2インスタンスのものかがこのコマンドを使うと楽に検索できます。
$ ec2-search --pip 33.44.55.66 Name InstanceID InstanceType PrivateIP PublicIP PublicDNSName LaunchTime fuga-instance1 i-fugaxxx t2.micro 10.0.0.2 33.44.55.66 ec2-33-44-55-66.ap-northeast-1.compute.amazonaws.com 2017-08-18 07:04:04
ec2-searchの使用方法
では、ec2-searchの使用方法についてです。
インストール
バイナリを置くだけです。
$ wget https://github.com/morix1500/ec2-search/releases/download/v0.1.1/ec2-search_linux_amd64 -O /usr/local/bin/ec2-search $ chmod u+x /usr/local/bin/ec2-search
オプション
$ ec2-search --help Usage of ec2-search: -config string Specify aws credential file path. (default "~/.aws/credentials") -eip string Specify instance public ip. -id string Specify instance id. -name string Specify instance name. -pip string Specify instance private ip. -region string Specify region. (default "ap-northeast-1") -v Output version number.
configオプションについて
AWSのcredentialファイルのパスを指定します。
デフォルトだと「~/.aws/credentials」です。
なにも指定せず、上記credentialファイルがない場合
通常のAWS認証の方法を使用します。
例えば
が指定されていれば、そこのAWSリソースを検索しに行きます。
nameオプションについて
EC2のタグ「Name」で検索するオプションです。
aws cliのec2 describe instancesで利用される「Filter」を使えるので、ワイルドカードも使えます。
$ ec2-search --name fuga-* | ruler -t tsv +----------------+------------+--------------+-----------+-------------+------------------------------------------------------+---------------------+ | Name | InstanceID | InstanceType | PrivateIP | PublicIP | PublicDNSName | LaunchTime | +----------------+------------+--------------+-----------+-------------+------------------------------------------------------+---------------------+ | fuga-instance1 | i-fugaxxx | t2.small | 10.0.0.2 | 33.44.55.66 | ec2-33-44-55-66.ap-northeast-1.compute.amazonaws.com | 2017-08-18 07:04:04 | | fuga-instance2 | i-fugaxxx | t2.small | 10.0.0.3 | 44.55.66.77 | ec2-44-55-66-77.ap-northeast-1.compute.amazonaws.com | 2017-08-18 08:01:01 | +----------------+------------+--------------+-----------+-------------+------------------------------------------------------+---------------------+
最後に
個人ユースの場合、こんな手間を感じることは少ないと思いますが
多くのAWSアカウントを扱っている場合、結構困ります。
今まではシェルスクリプト製のものを自作で使ってましたが、
あまりにも遅いためGo言語で再実装してみたら高速でびっくりしました。
同じ課題でお悩みの方、ぜひ使ってみてください!
では!