AWS + Ansibleのお悩み相談についてのやりとり

AWS + Ansibleのお悩み相談のブログをアップしたところ、Ansible本の筆者の@r_rudiさんから回答ブログをいただき、それに関わるやりとりをしたのでまとめました。 ・Ansible本はこちら。 http://www.amazon.co.jp/%E5%85%A5%E9%96%80Ansible-%E8%8B%A5%E5%B1%B1%E5%8F%B2%E9%83%8E-ebook/dp/B00MALTGDY
1
せちろー @sechiro

今日のInfrastructure as Code現状確認会の参加ブログ書いた。 #infra_sushi / “クックパッドの新オフィスでitamaeによる寿司の無限プロビジョニングを体験して、Ansibleのお悩み相談してきた…” htn.to/fJYyV3

2014-10-04 02:15:33
shirou - しろう @r_rudi

@sechiro ブログを書きました。 / Ansibleでの連番ホスト名をつけるなど tdoc.info/blog/2014/10/0… お悩みをちゃんと解決できるかどうかは分かりませんが、ご意見いただけるとありがたく思います。

2014-10-04 23:42:16
せちろー @sechiro

@r_rudi ブログありがとうございます! 反応いただけるとは思っていなかったので、ありがたいです。 ただ、スライドでは説明していないところがあって、その点、補足させてください。

2014-10-04 23:51:52
せちろー @sechiro

@r_rudi ホストの自動採番は、新規だけではなくて、既存である程度のホストがあって、空きホスト名から新しいホストにホスト名を割り振るという内容でした。既存ホストの情報が必要なので、AnsibleからデプロイのたびにYAMLのホストリストファイルを更新して対処しています。

2014-10-04 23:54:45
shirou - しろう @r_rudi

@sechiro なるほど。やはりそうでしたか。 "{{ groups['tag_role_web'] | length }}" とかで現在のホスト数を取ってそこから増やしていくことはできますが、おそらく欠番を埋めたりとかするでしょうし、そうなるとansibleではつらいですね。

2014-10-05 00:02:18
せちろー @sechiro

@r_rudi 前者の方は、一度それもやってみたのですが、ほかのPlaybookとの組み合わせで難が出たので、EC2用の別インベントリで対応しています。

2014-10-04 23:56:17
せちろー @sechiro

@r_rudi 具体的には、新規追加したホストのみ、共通のplaybookを適用する場面です。インベントリが既存ホストを含む場合、すでに既存サーバに適用したPlaybookを使うと新規ホストだけでなく、既存ホストにもPlaybookが適用されてしまいます。

2014-10-05 00:01:04
せちろー @sechiro

@r_rudi 思いますが、こうすると、既存のホストにも改めてplaybookが走ってしまいます。なので、EC2デプロイ時のみ別インベントリを用意しています。playbookは冪等性を担保しているので、それでも問題はないのですが、余計な動作はなくしたいのでこの構成です。

2014-10-05 00:08:51
せちろー @sechiro

@r_rudi 既存のホストがwebserversグループに所属していて、playbookでもwebserversグループが実行対象になっている場合、eb2モジュールで新規追加したホストも、webserversグループにadd_hostして、playbookを流すのが自然だと

2014-10-05 00:05:37
shirou - しろう @r_rudi

@sechiro それは冪等性が確保されていれば、既存ホストに対してplaybookを再度適用されても問題ないような気がしますが、そうもいかない、ということでしょうか。

2014-10-05 00:04:34
せちろー @sechiro

@r_rudi 返事が前後しましたが、冪等性は担保しているので、こちらは実行内容とデプロイ速度の最適化の問題ですね。

2014-10-05 00:11:16
shirou - しろう @r_rudi

@sechiro なにが自然かは分かりませんが、"新規作成したホスト"というグループを使ったほうが楽ならばそうしたほうがいいとは思います。

2014-10-05 00:12:25
せちろー @sechiro

@r_rudi ほかの問題としては、アブリのコードをS3から取得する必要があるため、そこでcommandを使ってしまっていて、アプリの更新がない場合もnotifyが引かれてしまうので、そこだけ冪等性に難があるというのもあります。

2014-10-05 00:14:06
せちろー @sechiro

@r_rudi 結局のところ、自分でもAnsible内でなんどかする方向にしているので、Ansible内でできるというのは、そうだと思います。

2014-10-05 00:16:06
shirou - しろう @r_rudi

@sechiro ふーむ。それはchanged_whenではカバーできない範囲ってことですよね。そうなると確かにつらいですね。また、必要がなければ動作させたくない、というのも分かります。

2014-10-05 00:18:35
せちろー @sechiro

@r_rudi そうですね。commandとかshellとか冪等性が担保されないモジュールは避けたいのですが、環境上の制約からそうせざるを得ないところがあり。。。そういう場合には自作のモジュールを作るのがAnsible的な感じがするのですが、現状そこまで手が回っていない感じです。

2014-10-05 00:25:20
shirou - しろう @r_rudi

@sechiro 分かりました。さらに言うと、Ansibleは「こうでないといけない」というのがあんまりない、とぼくは思っているので、楽に出来る方法があればそれを使うといいと思います。また、Ansibleにこだわる必要も特にないと思います。書かれていたとおり、適材適所ですね。

2014-10-05 00:26:32
せちろー @sechiro

@r_rudi ありがとうございます。デプロイツールは、Ansibleがいいと思っているので、Ansibleと別のツールとの組み合わせを考えたいと思います。ちょっとしたつぶやきに、親切にアドバイスをいただきありがとうございます。Ansible本はいつも参考にさせてもらっています。

2014-10-05 00:28:55
shirou - しろう @r_rudi

@sechiro Ansibleは拡張性が結構あるので、うまく組み合わせられるといいですね。また、Ansible本をご購入いただきありがとうございます!

2014-10-05 00:36:36
せちろー @sechiro

@r_rudi アドバイス、非常に助かりました。いただいた話はAnsibleを使っていくに当たって重要な話だと思うので、Togetterでまとめて、ブログに追記したいと思うのですが問題ないでしょうか?

2014-10-05 00:38:21
shirou - しろう @r_rudi

@sechiro 全然問題無いです。ありがとうございます!

2014-10-05 00:41:22