ようへいの日々精進XP

よかろうもん

よく使う aws-cli 「私的」コマンドチートシートとか jq の使い方とか

はじめに

  • とりあえずメモ

参考


aws-cli チートシート

インスタンスの情報を取得(1)

インスンタンスへ ssh でアクセスするのに必要な情報を取得する。

aws ec2 describe-instances --filters Name=tag-value,Values="hogehoge*" |jq '.Reservations[].Instances[]|{InstanceId,PublicIpAddress,PrivateIpAddress,Tags}'

インスタンスの情報を取得(2)

${instance_ID} の IP アドレスとアクセスに必要な ssh キーの情報を取得する。

aws ec2 describe-instances --filters Name=instance-id,Values="${instance_ID}" | jq '.Reservations[].Instances[]|{PublicIpAddress,KeyName}'

インスタンスの情報を取得(3)

アカウント上で稼働、停止しているインスタンスインスタンス ID とタグで設定している名前、プライベート、パブリック IP を取得して csv 形式で出力する。

aws ec2 describe-instances | ~/bin/jq -r '@csv "\(.Reservations[].Instances[] | [.InstanceId, .Tags[0].Value,.PrivateIpAddress,.PublicIpAddress])"'

インスタンスを作成後に作成したインスタンス ID を取得する

aws ec2 run-instances \
--image-id ${ami_ID} \
--count 1 \
--instance-type t1.micro \
--key-name ${keyname} \
--security-group-ids ${security-group_ID} \
--subnet-id ${subnet_ID} \
--associate-public-ip-address | jq -c -r '.Instances[]|.InstanceId'

インスタンスを停止する

${instance_ID} を一時的に停止する。

aws ec2 stop-instances --instance-ids ${instance_ID}

セキュリティグループ内からソースの IP と送信先のポートを取得して csv 形式で出力

セキュリティグループ内の情報からソースの IP と送信先のポートの情報を取得して csv 形式で出力する。

aws ec2 describe-security-groups  | jq -r '@csv "\(.SecurityGroups[].IpPermissions[]|[.IpRanges[0].CidrIp,.ToPort])"'

jq チートシート

ダブルクォートとかは排す

従来は jq でパースした結果からダブルクォートを削除する為に sed とかを駆使して取り除いていたけどそんなことすること無かった。

aws ec2 describe-instances | ~/bin/jq '.Reservations[].Instances[].InstanceType' | sed s/\"//g 

以下のような感じで出力される。

t1.micro
t1.micro
t1.micro
t1.micro
t1.micro

ただ、sed とか使う必要なくて以下のように jq だけで完結出来た。

aws ec2 describe-instances | ~/bin/jq -r '.Reservations[].Instances[].InstanceType'

おお。

select 文字列を部分一致させる

以下のように S3 のバケットのリストがあったとする。

{
  "Buckets": [
    {
      "Name": "aa-buckets",
      "CreationDate": "2014-01-25T09:56:47.000Z"
    },
    {
      "Name": "bb-buckets",
      "CreationDate": "2013-12-07T05:00:44.000Z"
    }
    {
      "Name": "cc-buckets",
      "CreationDate": "2013-12-05T04:00:44.000Z"
    }
  ],
  "Owner": {
    "ID": "1234567890123456789012345678901234567890123456789012345678900000",
    "DisplayName": "hogehoge"
  }
}

この出力の中から Namebb が含まれる Name を出力する場合には...

aws s3api list-buckets | jq -r '.Buckets[]|select(.Name |contains("bb"))'

とする。

csv 形式で出力させる

@sh@csv を付けると任意の形式で出力することが出来る。

オプション 出力
@sh 入力が配列の場合、出力はスペースで区切られた文字列となる
@csv 入力が配列の場合、出力はカンマ区切りの文字列となる

他にも @html@base64 等があるが何に使うのだろうか...と思ってしまうが、とりあえず以下のようにすると...

aws ec2 describe-instances | ~/bin/jq -r '@csv "\(.Reservations[].Instances[] | [.InstanceType, .InstanceId, .Tags[0].Value])"'

以下のようにインスタンスタイプとインスタンスの ID とタグで設定した名前が csv 形式の出力となる。

"t1.micro","i-1234567a",
"t1.micro","i-1234567b",
"t1.micro","i-1234567c","aaaaaaaaaa"
"t1.micro","i-1234567d","ccccccccccc"
"t1.micro","i-1234567e","bbbbbbbbbbbb"

さらに @sh を指定すると...

't1.micro' 'i-1234567a' null
't1.micro' 'i-1234567b' null
't1.micro' 'i-1234567c' 'aaaaaaaaaa'
't1.micro' 'i-1234567d' 'ccccccccccc'
't1.micro' 'i-1234567e' 'bbbbbbbbbbbb'

おお、スペースで区切られた出力となる。便利。


最後に

  • すぐに忘れるので
  • まだまだ続く