使ったことのあるコマンドのメモ。使ったものは順次追記していきます。
はじめに
動機
シェルでワンライナーしたい
--output text
は"特定の( InstanceId などの)値を持つ何か"を取得したい場合に便利。
「特定の値」を持つ何かを手打ちしてもいいんです。が、そこで「なんかスマート感がないんだよなぁ...」などと思ったらシェル芸の素質アリ。ワンライナー始めましょう。ちなみに私はまだまだシェル芸新卒1年生ぐらいのもんです。
filtersの表記
--filters オプションで指定するName=XXX,Values=XXX
ですが、Nameの表記が落とし穴です。
例えばEC2のdescribe-instances
などで出てくる InstanceId 、これを --filtersで検索しようとするときは
# [属性名] <---> [filters書式]
# InstanceId <---> instance-id
aws ec2 describe-instances --filters "Name=instance-id,Values=XXXXXXXX"
のように、 単語の頭を小文字 にした上で 単語間をハイフンで区切る 表記にする必要があります。
単発コマンド
EC2をタグ検索してInstance IDを取得
めちゃくちゃ便利なんだけど毎回どこかでタイポしてしまう。
aws ec2 describe-instances --filters "Name=tag:MyTagKey,Values=MyTagValue" --query "Reservations[].Instances[].InstanceId" --output text
ちなみに jq コマンドを使うと以下のような感じになる。
# タグ検索したEC2のInstanceId取得 jq版
# -rオプションは 別名"--raw-output"
# このオプションをつけない場合、二重引用符付きで文字列(InstanceId)が返される
aws ec2 describe-instances --filters "Name=tag:Project,Values=tech-cource" | jq -r .Reservations[].Instances[].InstanceId
StopしていないEC2インスタンスを列挙
※正確にはStop, Terminated 以外のステータスになっているインスタンスの列挙です。
aws ec2 describe-instances --filters "Name=instance-state-name,Values=pending,running,shutting-down,stopping"
StopしていないEC2インスタンスを列挙(全リージョン)
上記の(簡易)全リージョン版。出力結果はそのままだとちゃんとしたJSONにならないので注意。いい感じにまとめたい。
for rg in ap-northeast-1 ap-southeast-1 ap-southeast-2 eu-central-1 eu-west-1 sa-east-1 us-east-1 us-west-1 us-west-2 ;do aws ec2 describe-instances --region $rg --filters "Name=instance-state-name,Values=pending,running,shutting-down,stopping" ; done```
## Default VPCのIDを取得
```bash
aws ec2 describe-vpcs --filters "Name=is-default,Values=true" --query "Vpcs[].VpcId" --output text
AutoScaling Group の名前を一覧
aws autoscaling describe-auto-scaling-groups --query AutoScalingGroups[].AutoScalingGroupName --output text
複合系
バッククオートも使ってちょっと複雑な処理をワンライナーしてみます。
Default VPCに関連付けられたSGを取得
aws ec2 describe-security-groups --filters "Name=vpc-id,Values=`aws ec2 describe-vpcs --filters \"Name=is-default,Values=true\" --query \"Vpcs[].VpcId\" --output text`"
Default VPCに関連付けられたSGのGroupIdを取得
aws ec2 describe-security-groups --filters "Name=vpc-id,Values=`aws ec2 describe-vpcs --filters \"Name=is-default,Values=true\" --query \"Vpcs[].VpcId\" --output text`" --query "SecurityGroups[].GroupId" --output text
ELB配下インスタンスのIPを取得
aws ec2 describe-instances --instance-ids `aws elb describe-load-balancers --load-balancer-names some-elb-name --query LoadBalancerDescriptions[].Instances --output text` --query Reservations[].Instances[].PrivateIpAddress --output text