Ansibleによるインフラ自動化入門 / ansible-guide

12a5cec7a54018170b1a009731acf477?s=47 VTRyo
July 12, 2017

Ansibleによるインフラ自動化入門 / ansible-guide

2017/7/14 サポーターズ勉強会資料
Github: https://github.com/VTRyo/ansible_for_wordpress
Qiita: http://qiita.com/VTRyo
blog: https://blog.vtryo.me/

12a5cec7a54018170b1a009731acf477?s=128

VTRyo

July 12, 2017
Tweet

Transcript

  1. Ansibleによるインフラ自動化入門 インフラはコード化で加速する 1 Infra/SRE RYO

  2. 目次 1.自己紹介 2.今日の目的 3.インフラから見るAnsibleって何 4.AnsibleはMacでもwindowsでもlinuxでも始められる件 5.Ansible始めて訪れた変化 6.既存のサーバをAnsible化するなら 7.Ansibleを書くときに気をつけたいこと 8.おわりに 2

  3. 自己紹介 3 ・15年卒 社会人3年目 ・新卒でせっかく入社した会社を1年半で退職して現在に至る ・最近のトレンド趣味 ・激辛大好物(北極では物足りないので情報求ム) ・バイク(2012〜) ・筋トレ(2017/5/1~) ・技術/趣味ブログ構築予定(ドメイン購入済!)

    ・SNS Qiita:http://qiita.com/VTRyo Github: https://github.com/VTRyo/ansible_for_wordpress facebook, 名刺交換積極実施中です! 夏には北の大地へ 職場近くにある20辛のラーメン
  4. ・学習コスト・導入コストが低く入門しやすい ・yamlが読みやすく書きやすくそして美しい ・部分的自動化でも圧倒的効果がある ・インフラにスピード感をもたらしてくれる Ansibleはいいぞ(今日の目的) 4

  5. インフラから見るAnsibleって何? ・手動で25台も同じ作業なんてやってられるか俺は帰るぞ!! ・手順書漏れ。依存関係あるんで一旦全部アンインストールします (エッ・・・工数足りないけど) ・え?何その設定いつ入れたの?エビデンスは?ログは?無い?? 5 こんな経験ありませんか?

  6. 心のなかで渦巻く闇・・・ よみがえる連日徹夜作業・・・ インフラから見るAnsibleって何?

  7. インフラ構築する際に発生するいろんなストレスから 解放してくれた技術 インフラから見るAnsibleって何?

  8. インフラから見るAnsibleって何? 環境自動構築を目的としたChefやPuppet Ansibleとはそもそも思想が違う 8 ・開発者の負担を減らそうという考え方で出来ている ・「スクリプトを送り込んで実行するツール」として使ってもいい ・「今のやり方」を尊重しながらAnsibleを使うことができる 学習コストだけでなく、導入コストも低い!

  9. AnsibleはMacでもwindowsでもlinuxでも 始められる件 Window10の場合(bash on Windows) ※コマンドプロンプトでbashを起動している前提 詳しくはこちら http://qiita.com/VTRyo/items/5e137cd171768d1bf707 9

  10. AnsibleはMacでもwindowsでもlinuxでも 始められる件 Macの場合 10

  11. AnsibleはMacでもwindowsでもlinuxでも 始められる件 Linuxの場合(CentOS6.x, Amazon Linux) ※もちろんsudo権限で 11

  12. AnsibleはMacでもwindowsでもlinuxでも 始められる件 対象のサーバにSSHできる設定は済ませておく 12 Hostに名前解決するホスト名を記述 HostNameにはIPアドレス(AWSのパブリックDNSでもよさげ) あとは鍵を指定しておいてすぐにsshできるようにしておく

  13. Ansible始めて訪れた変化 ・設定変更や構築作業に信頼性を持たせられる ・サーバ構築の圧倒的スピード感 ・突然の依頼に対しても対応できる ・コードレビューという文化 ・サーバの構成をより注意深く考えるようになる 13

  14. こんな環境はコード化しておきたい ・100%発生する作業 例)ユーザ作成、ssh-keygen、visudo ・今後発生しそうな作業 例)「WEBサーバ立てて。明日までに」 ・サーバ台数が多い環境 例)ホスト名だけ違うサーバが100台 14

  15. 既存のサーバをAnsible化するなら ではどうやって書いていくか? ・yaml形式 ・プログラマじゃなくても書けるほど簡単 ・インデントを使った階層構造 ・シンプルに書いていい ・上から順番に処理される ・「モジュール:引数」という定型 15

  16. 既存のサーバをAnsible化するなら 書き方の型を覚えてしまうのが最も速い学習方法 ↓この型が繰り返えされるイメージ 16

  17. 既存のサーバをAnsible化するなら Ansibleのディレクトリ構造 17 ベストプラクティス例 wordpress一台構成

  18. 既存のサーバをAnsible化するなら ファイルの役割は? ・hosts(inventory) ・ホストを定義するファイル ・[webserver][dbserver]などホストをグルーピングできる ・group_vars ・変数を格納したファイル ・「all.yml」「dbserver.yml」「webserver.yml」など ファイル名はhostsに定義した名前で作るか、allという名前で作る 18

  19. 既存のサーバをAnsible化するなら 19 group_vars hosts 「vtryo.meというドメインの中に prd, dev環境があるよ」と定義 リポジトリを指定したり その他変数を定義しておく 「webserverという

    グループの中にvtryo-web01 というホストがいるよ」と定義 「prdという環境の中に webserverという グループがいるよ」と定義
  20. 既存のサーバをAnsible化するなら ファイルの役割は? ・wordpress.yml ・Ansibleに実行させる命令を書くファイル ・どのタスクを実行させるか制御する ・roles ・playbookのタスクを別ファイルに切り出したもの ・tasks/main.ymlが必須 20

  21. 既存のサーバをAnsible化するなら 21 wordpress.yml roles 対象のグループを指定。 もちろんhost単体も指定できる becomeはsudo権限を使用する かどうか rolesでどの処理をさせるか指定。 rolesの中にはそれぞれtaksが格納されている

    rolesにミドルウェアごとにtaskを切り分けてある。 commonは全環境で共通して設定したいtaskが格納 されている
  22. 既存のサーバをAnsible化するなら これさえ使えれば大抵のサーバはコード化出来る!! ・yum yumコマンド ・service serviceコマンド ・copy copyコマンド ・template ファイル内の変数展開ができるcopy

    ・user user add, user delなどの操作 ・authorized_key 鍵の登録など ・file mkdir, touch, rmなどファイル操作 22
  23. 既存のサーバをAnsible化するなら Ansible化による恩恵はすさまじい ユーザ作成のコード 23

  24. 既存のサーバをAnsible化するなら Ansible化による恩恵はすさまじいパート2 hostsに書かれたHost名 を読み込んで展開 24 ↑zabbix-agentd.conf

  25. 既存のサーバをAnsible化するなら MySQL5.7の小ネタ /root/.my.cnfに初期パスワードが格納される!! もう/var/log/mysqld.logを確認しなくていい!! 25

  26. 既存のサーバをAnsible化するなら 使えるとさらに捗るAnsibleモジュール ・get_url wgetコマンド ・lineinfile 文字列挿入, 置換操作など ・unarchive 解凍系コマンド ・mysql_user

    mysqlのユーザ操作 ・mysql_db mysqlのDB操作 ※MySQL操作はそれなりに大変なのでインストールまで自動化して あとは割り切って手動にするのもアリ } 26 どこまでを構成管理対象とするか? その判断もインフラの腕次第
  27. Ansibleを書くときに気をつけること ・command, shellモジュールは極力使わない ・なるべく変数化 ・ディレクトリの構成 (環境が増えたときにinventory_hostname出来るようにしておく) ・DryRunを信用しない ・モジュールの依存関係 27

  28. Ansibleを書くときに気をつけること command, shellモジュールは極力使わない ・冪等性がなくなるので避ける ・大抵は使わずに済むモジュールが存在している ・どうしても使わざるを得ない時はchanged_whenか 冪等性が保てる方法を考える 28 ※この処理内容も書き換えができる→

  29. Ansibleを書くときに気をつけること 29 お前が考えつくことなんてみんな考えつくんだよ!! といわんばかりに既にある。だいたいある。 この処理は明示的にpipのパスを指定したかったもの。 executableでパスを指定することでshellモジュールの使用を 避けることができる ※sysctlモジュール(Swappinessとか) letsencryptモジュールもあったりする ↓↓

  30. Ansibleを書くときに気をつけること なるべく変数化 ・templateモジュールを使いたい ・group_varsに定義した値を書き換えるだけで 流用出来るようなる ・読みやすい 30

  31. Ansibleを書くときに気をつけること ディレクトリの構成(特にprd, dev環境で差分のある構成管理をする時) ・複数サーバがあるときに便利なinventory_hostname を利用できる構成にする ・conf系のファイルをサーバ別にcopyするときに重宝 31 templateで展開する方法と同じ {{ item.src

    }}の部分をhostsに記載した名前に合わせると変数として展開してくれる
  32. Ansibleを書くときに気をつけること DryRunを信用しない ・DryRunは--checkをつけることで実際の処理をさせずに Syntaxテストができる仕組み ・ただのシミュレーションにすぎない ・処理の順番が重要なタスクはDryRunに失敗する 例)add user → authorized_keyというタスクでは

    userがない状態ではauthorized_keyのDryRunは失敗する 32
  33. Ansibleを書くときに気をつけること DryRunを信用しない ・DryRunで成功していても本番適用で失敗することもある ・phpモジュールなど依存関係が複雑なミドルウェアは特に注意 33 コード化したら必ず--checkなしで本番適用してみること!! get_urlやrpm_keyなどDryRunではスキップするモジュールもある!!

  34. Ansibleを書くときに気をつけること モジュールの依存関係 ・MySQLやPHPなどの複雑な依存パッケージ ・明示的に指定してインストールさせる必要がある 34 見切れるほどあるのでソースを見てください(笑) https://github.com/VTRyo/ansible_for_wordpress

  35. おわりに 35 「Ansibleはいいぞ」と教えてくれた先輩がいました。 その人の教えは日々厳しく、日々悩みもがきながら前に進んでいます。 やればやるほど奥が深く、難しいのもAnsibleの良さです。 Ansibleの門はとても広くできているので、誰でも始めることができます。 これからAnsibleを始める人は覚悟してください。 自動化に成功したとき、Ansibleの楽しさから抜けられなくなっているかもしれません

  36. 参考文献 36 ・Ansible Documentation http://docs.ansible.com/ansible/index.html ・ADACHIN SERVER Lab https://blog.adachin.me/wordpress/ ・第6回「現状を活かしながら環境構築自動化をするならAnsibleがお勧め!」

    http://www.intellilink.co.jp/article/column/devops06.html