ようへいの日々精進XP

よかろうもん

逆引き jq で aws cli を操る

はじめに

  • aws cli は良くも悪くも JSON で値が返ってくる
  • 普通の grep では追っつかないこともあるので jq で色々と頑張ることにする
  • ただし、タイトル負けする内容

参考


逆引きパターン

準備

アクセスキーやシークレットアクセスキーを下記のように設定して適当なファイル名で保存する。

[default]
aws_access_key_id=xxxxxxxxxxxxxxxxxxxxx
aws_secret_access_key=yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
region=ap-northeast-1

例えば info.txt というファイル名で設定した場合には以下のように環境変数に登録する。

export AWS_CONFIG_FILE=info.txt

全てのインスタンスの情報を取得する!

aws ec2 describe-instances | jq '.Reservations[].Instances[]'

以下のような出力が得られる。

{
  "AmiLaunchIndex": 0,
  "StateTransitionReason": null,
  "RootDeviceType": "ebs",
  "VirtualizationType": "paravirtual",
  "RootDeviceName": "/dev/sda1",
  "StateReason": {
    "Code": "Client.InstanceInitiatedShutdown",
    "Message": "Client.InstanceInitiatedShutdown: Instance initiated shutdown"
  },
  "Architecture": "x86_64",
  "BlockDeviceMappings": [
    {
      "Ebs": {
        "AttachTime": "2013-08-31T13:36:43.000Z",
        "VolumeId": "vol-xxxxxxx",
        "DeleteOnTermination": true,
        "Status": "attached"
      },
      "DeviceName": "/dev/sda1"
    }
  ],
  "Hypervisor": "xen",
  "Placement": {
    "AvailabilityZone": "ap-northeast-1a",
    "GroupName": null,
    "Tenancy": "default"
  },
  "Tags": [
    {
      "Key": "Name",
      "Value": null
    }
  ],
  "ProductCodes": [],
  "LaunchTime": "2013-08-31T22:46:41.000Z",
  "EbsOptimized": false,
  "State": {
    "Name": "stopped",
    "Code": 80
  },
  "KernelId": "aki-xxxxxxx",
  "PublicDnsName": null,
  "Monitoring": {
    "State": "disabled"
  },
  "InstanceId": "i-xxxxxxx",
  "ImageId": "ami-fe6ceeff",
  "PrivateDnsName": null,
  "KeyName": "xxxxxxxxx",
  "SecurityGroups": [
    {
      "GroupId": "sg-xxxxxxx",
      "GroupName": "quick-start-8"
    }
  ],
  "ClientToken": "xxxxxxxxxxxxxxxx",
  "InstanceType": "t1.micro",
  "NetworkInterfaces": []
}

全てのインスタンスの Public IP と Public DNS Name を取得する!

aws ec2 describe-instances | jq '.Reservations[].Instances[] | {PublicDnsName, PublicIpAddress}'

以下のような出力が得られる。

{
  "PublicIpAddress": "xx.xxx.xxx.xxx",
  "PublicDnsName": "ec2-xx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com"
}

全てのインスタンスのタグ名を取得する!

aws ec2 describe-instances | jq '.Reservations[].Instances[].Tags[] '

以下のような出力が得られる。

{
  "Key": "Name",
  "Value": null
}

タグ名をつけていない場合には上記のように値は null っとなる。


最後に

  • まだまだ続く!
  • やりたいこととしてはタグ名を取得してデプロイ先のホスト情報を取得できればなーと考えている