ansible ec2とは
ec2上のインスタンスをansibleのinventoryとして扱えるようにしてくれる便利なものです。
例えば、
- name: do something
hosts: 'tag_Name_{{tag}}'
...
のようにすると、特定のタグがついたインスタンスに対し同じ操作を行う、という設定が用意にできます。
auto scalingなどしているときはとても便利です。
しかしansibleをupdate(1.8.4 -> 1.9.4)し、上記のinventory scriptも更新したところ軒並み動かなくなりました。
ec2のtagを確認
ec2のコンソールから確認したところ想定したタグはちゃんとついていたのですが、
PLAY [hogehoge] *******************************************
skipping: no hosts matched
PLAY RECAP ********************************************************************
というように、そんなタグついたインスタンスないよという返事でした。
ec2インスタンスを全部取得
下記コマンドで、管理下のインスタンスリストが取得できます。
inventory/ec2.py --list
このリストを眺めていて気付いたのですが、ec2上では"hoge-fuga-piyo"というタグが付いている場合、ansible ec2インベントリ的には"tag_Name_hoge_fuga_piyo"というふうに、ハイフンが全てアンスコになっていました。
そこで、先ほどのymlで指定していたタグもアンスコに変更することで、ちゃんとec2インスタンスが取得できるようになりました。
自分が関わるリリースが近いときに、気軽にバージョンを上げてはいけないという教訓を新たにしました。