LoginSignup
24
17

More than 5 years have passed since last update.

AWS CLI でインスタンス情報を取得

Last updated at Posted at 2014-10-17

AWS CLIを使って、よく発生する作業リスト作成作業を効率化したい。
また、なんとかManagement Consoleに頼るのをやめたい。
使い慣れるために、発生しそうな作業を色々と試してみた。

環境

Mac OS X 10.9.5
Python 2.7.5
aws-cli 1.5.1

ホスト名(Nameタグ)取得方法

まずはインスタンスの一覧を取得。
自分の場合、ホスト名はNameタグに登録しておくことが多いので、describe-tags から取得。
Nameタグだけ取れてもあまり役に立たないので、インスタンスIDも一緒に取ってみる。

--queryオプションを使うと、返却する要素のselectと、フィルタ条件を付けられる。
ここでは、ResourceTypeが "instance" の インスタンスIDとNameタグ(タグKeyが"Name")を取得。

$ aws ec2 describe-tags --query 'Tags[?ResourceType==`instance`] | [?Key==`Name`].{ResourceId:ResourceId,ResourceName:Value}'

(結果)

[
    {
        "ResourceId": "i-xxxxxxx",
        "ResourceName": "hoge1"
    },
    {
        "ResourceId": "i-xxxxxxx",
        "ResourceName": "hoge2"
    },
]

ホスト名とIPの一覧を取得

こうなると、IPも一緒に取りたい。
ということで、describe-instance からとってみることにする。

パブリックIP,プライベートIP,インスタンスID,Nameタグの値を取得する。
[?~]で条件を書くことで、絞り込みが可能。

$ aws ec2 describe-instances --query 'Reservations[].Instances[].{PublicIp:PublicIpAddress,PrivateIp:PrivateIpAddress,InstanceId:InstanceId,Name:Tags[?Key==`Name`].Value}'

(結果)

[
    {
        "PublicIp": "x.x.x.1",
        "InstanceId": "i-xxxxxxxx",
        "Name": [
            "hoge1"
        ],
        "PrivateIp": "10.x.x.1"
    },
    {
        "PublicIp": "x.x.x.2",
        "InstanceId": "i-xxxxxxxx",
        "Name": [
            "hoge2"
        ],
        "PrivateIp": "10.x.x.2"
    },
    {
        "PublicIp": null,
        "InstanceId": "i-xxxxxxxx",
        "Name": [],
        "PrivateIp": null
    }
]

こんな感じで拾える。
Nameタグを登録していないインスタンスを省く場合は、
not_null関数を組み合わせて、
Name:Tags[?Key==`Name`].Value の部分を
         ↓
Name:Tags[?Key==`Name`] | [?not_null(Value)].Value} とすればOK。

また、--outputオプションをつけると、タブ区切りのテキストで返してくれる。
これは便利、と思ったが・・・

i-xxxxxxxx  10.x.x.1    x.x.x.1
NAME    hoge1
i-xxxxxxxx  10.x.x.2    x.x.x.2
NAME    hoge2

困ったことに、階層の違う要素が同じ行に出力されず、なんとも扱いにくい感じに。
うーん。誰か解決方法知りませんか。
今後の課題。

参考にしたサイトなど

AWS CLIのセットアップに関してはこちら。
http://dev.classmethod.jp/cloud/aws-command-line-tool-python/

--queryオプションの使い方
http://dev.classmethod.jp/etc/aws-cli-query/
http://dev.classmethod.jp/cloud/awscli-enhanced-query-opt-snipets/

--queryオプションの書式は、JMESPathというbotoのライブラリによるもの。なのでこちらも参考。
http://jmespath.readthedocs.org/en/latest/index.html
jq というJSON整形ツールの説明。
http://dev.classmethod.jp/tool/jq-manual-japanese-translation-roughly/
(最初こちらを調べようとしていたら、既に--queryオプションだけで事足りつつある、
 とのことだったのでサンプル程度でやめました。)

公式ドキュメントでも一応。
◆AWS Command Line Interface User Guide
http://docs.aws.amazon.com/cli/latest/userguide/controlling-output.html

24
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
17