はじめに

大阪にある株式会社鈴木商店の姜です。

弊社は100%自社開発で受託開発を行っている会社です。

主にAWS上にフルスクラッチでシステムを構築することが多く、クライアント毎にAWSアカウントが複数あります。

その中でそれぞれのアカウントのEC2にアクセスして作業するのは大変です。

そこで、普段の業務でEC2のIPアドレスやDBの情報などをなるべく楽に見れるように使っているワンライナーを公開します。


利用方法

こんな感じです。

# 全てのEC2の情報を取得する

$ ec2 foo # fooは後述のアカウント名
| InstanceName | PublicIpAddress | InstanceId | InstanceType | KeyName | State |
| -------------- | --------------- | ------------------- | ------------ | -------- | ------- |
| pro-ec2-batch | XX.XX.XX.XX | i-xxxxxxxxxxxxxxxxx | t2.micro | keypairA | running |
| pro-ec2-mta | YY.YY.YY.YY | i-yyyyyyyyyyyyyyyyy | t2.micro | keypairB | stopped |

# 起動中のEC2のみ取得する
$ ec2-running foo
| InstanceName | PublicIpAddress | InstanceId | InstanceType | KeyName | State |
| -------------- | --------------- | ------------------- | ------------ | -------- | ------- |
| pro-ec2-batch | XX.XX.XX.XX | i-xxxxxxxxxxxxxxxxx | t2.micro | keypairA | running |

# RDSの情報を取得する
$ rds foo
| DBInstanceIdentifier | DBInstanceStatus | DBName | Address |
| -------------------- | ---------------- | ------- | -------------------------------------- |
| pro-ZZZZZ | available | DB_NAME | AA.XX.ap-northeast-1.rds.amazonaws.com |
| stg-ZZZZZ | available | DB_NAME | BB.YY.ap-northeast-1.rds.amazonaws.com |


下準備


AWSアカウントの設定

AWS CLIを使うので、各アカウントにIAMユーザを作成してキーを取得して設定しておきます。

$ cat ~/.aws/credentials

[foo]
aws_access_key_id = AKIAXXXXXXX
aws_secret_access_key = XXXXXXXX


各種ツールをインストール


  • pip

sudo easy_install pip


  • aws cli

sudo pip install awscli


  • jq

brew install jq


  • csvkit

pip install csvkit


関数を登録

次に~/.bashrc にでも以下を登録します。

source ~/.bashrc を忘れないように。

alias aws="aws --region ap-northeast-1"

function rds {
aws --profile $1 rds describe-db-instances | jq -r '[ "DBInstanceIdentifier", "DBInstanceStatus", "DBName", "Address" ], (.DBInstances[] | [ .DBInstanceIdentifier, .DBInstanceStatus, .DBName, .Endpoint.Address]) | @csv' | csvsort -c DBInstanceIdentifier | csvlook
}

function ec2-running {
aws --profile $1 ec2 describe-instances --filter "Name=instance-state-name,Values=running" | jq -r '[ "InstanceName", "PublicIpAddress", "InstanceId", "InstanceType", "KeyName", "State" ], (.Reservations[].Instances[] | [(.Tags[] | select(.Key=="Name").Value), .PublicIpAddress, .InstanceId, .InstanceType, .KeyName ,.State.Name]) | @csv' | csvsort -c InstanceName | csvlook
}

function ec2 {
aws --profile $1 ec2 describe-instances | jq -r '[ "InstanceName", "PublicIpAddress", "InstanceId", "InstanceType", "KeyName", "State" ], (.Reservations[].Instances[] | [(.Tags[] | select(.Key=="Name").Value), .PublicIpAddress, .InstanceId, .InstanceType, .KeyName, .State.Name]) | @csv' | csvsort -c InstanceName | csvlook
}

function ec2-start {
aws --profile $1 ec2 start-instances --instance-ids $2
}

function ec2-stop {
aws --profile $1 ec2 stop-instances --instance-ids $2
}

以上。


番外編

他にもよく使うものをご紹介。


  • グローバルIPを取得

curl ifconfig.io


  • マージ済みのローカルブランチを削除(AWSとは関係ないですが・・)

git branch --merged | grep -vE '^\*|master$|develop$' | xargs -I % git branch -d %


  • Apacheログをステータスコードでフィルタする(これは500番台)

cat access_log | awk '($9 >= 500 && $9 < 600 || $7 >= 500 && $7 < 600) {print $0 }' | less


  • sshdが上がってくるまで再接続を試みるスクリプト

sshr() {

while ! ssh -o ConnectTimeout=1 $@; do sleep 1; done
}