2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AWSのタグで指定する簡易的なAnsible Dynamic Inventory

Posted at

動機

AWSのEC2インスタンスにAnsibleを流すとき、Tagの設計を真面目にやっていないがあるタグに基づいてAnsibleのhostsを設定したい場合があります。

正しく設計できている場合は、Ansibleが提供しているec2.pyを使うと良いでしょう。

しかし、一部サーバのIPアドレスが取得できればいい場合は簡易的に実装したくなります。

方法

ansible.cfginventory = inventoryと指定し、inventoryディレクトリに実行可能ファイルを置くことで、プログラムによるDynamic Inventoryを利用可能です。

このプログラムは何でもいいのでawscliを使ったシェルスクリプトで簡易的にAWSのタグから取得したサーバのPrivate IP一覧を渡すことができます。

出力は定められたJSONフォーマットなので、echoで無理やり整形します。

# !/bin/bash

echo '{"webserver": {"hosts":'
aws ec2 describe-instances \
--filters "Name=tag:Name,Values=webserver*" \
--query "Reservations[*].Instances[*].PrivateIpAddress | [0]" \
--output json
echo '}}'

$ ./inventory/webserver
{"webserver": {"hosts":
[
    "172.31.26.164",
    "172.31.16.156",
    "172.31.19.1",
    "172.31.23.191"
]
}}

見た目は悪いですが、処理するのはAnsibleです。最低限実装できたことを喜びましょう。

AWSコマンドの解説

# aws ec2 describe-instances \
--filters "Name=tag:Name,Values=webserver*" \
--query "Reservations[*].Instances[*].PrivateIpAddress | [0]" \
--output json

このコマンドにより、tag:NameでNameタグ、Valueswebserver*とワイルドカードを指定できます。
これは、webserver1,webserver2,webserver3,webserver4のようなサーバを想定しています。適宜設定しましょう。

結果はPrivateIPさえわかればいいので--queryで絞ります。jqコマンドでも可です。

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?