Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ansibleで3台のビルドサーバーを3分で構築した話 / Set up build servers in 3 min by Ansible

4a05d4c03e5f9c6f78ec4b3c57dc63c4?s=47 oohira
December 20, 2016

Ansibleで3台のビルドサーバーを3分で構築した話 / Set up build servers in 3 min by Ansible

4a05d4c03e5f9c6f78ec4b3c57dc63c4?s=128

oohira

December 20, 2016
Tweet

Transcript

  1. Ansibleで 3台のビルドサーバーを 3分で構築した話 第8回ビアバッシュLT in なにわ弐 2016/12/20 oohira

  2. きっかけ

  3. 3台がかりでもビルド間に合わん master slave 1 slave 2 slave 3

  4. このままでは(私の立場が) まずい…

  5. _人人人人人人_ > 金の弾丸 <  ̄Y^Y^Y^Y^Y ̄

  6. 検証機用の余剰VM 3台をさらに投入する

  7. 3台も設定するの面倒だな… そのうちまた増えるんでしょ…

  8. None
  9. ・サーバー構築を自動化するツール (構成管理ツールというジャンル) ・エージェントレスで対象サーバーに SSH接続して諸々の設定を反映する Ansibleとは master master master SSH

  10. 最小構成

  11. 管理対象のホストを定義したINIファイル $ cat hosts [build] 192.168.74.140 192.168.74.141 192.168.74.142 inventory

  12. 実行する手順をまとめたYAMLファイル $ cat playbook.yml - hosts: build user: root tasks:

    - name: test connection ping: playbook
  13. 実行 $ ansible-playbook -i hosts playbook.yml PLAY *************************************************************************** TASK [setup]

    ******************************************************************* ok: [192.168.74.140] ok: [192.168.74.141] ok: [192.168.74.142] TASK [test connection] ********************************************************* ok: [192.168.74.140] ok: [192.168.74.141] ok: [192.168.74.142] PLAY RECAP ********************************************************************* 192.168.74.140 : ok=2 changed=0 unreachable=0 failed=0 192.168.74.141 : ok=2 changed=0 unreachable=0 failed=0 192.168.74.142 : ok=2 changed=0 unreachable=0 failed=0
  14. モジュール

  15. tasks: - name: Copy motd to remote copy: src: ./files/motd

    dest: /etc/motd copy
  16. tasks: - name: Install Git yum: name: git state: present

    - name: Add symbolic link for Git file: src: /usr/bin/git dest: /usr/local/bin/git state: link force: yes yum, file
  17. tasks: - name: Add rsadmin user user: name: rsadmin uid:

    5004 password: "{{'hoge'|password_hash('sha512')}}" state: present user
  18. tasks: - name: Install Oracle JDK unarchive: src: ./file/jdk-8u45-linux-x64.tar.gz dest:

    /usr/java creates: /usr/java/jdk1.8.0_45 - name: Update alternative JDK alternatives: name: java link: /usr/bin/java path: /usr/java/jdk1.8.0_45/bin/java unarchive, alternative
  19. つづきはWebで http://docs.ansible.com/ansible/list_of_all_modules.html

  20. 冪等性 (べきとうせい)

  21. ある操作を1回実行しても 複数回実行しても同じ結果に なることを表す数学概念 ↓ 構成管理ツールを何回実行しても 同じサーバー状態に収束すること

  22. $ cat playbook.yml - hosts: build user: root tasks: -

    name: Install Git yum: name: git state: present yumの場合
  23. 実行1回目 $ ansible-playbook -i hosts playbook.yml PLAY *************************************************************************** TASK [setup]

    ******************************************************************* ok: [192.168.74.140] ok: [192.168.74.141] ok: [192.168.74.142] TASK [Install Git] ************************************************************* changed: [192.168.74.140] changed: [192.168.74.141] changed: [192.168.74.142] PLAY RECAP ********************************************************************* 192.168.74.140 : ok=2 changed=1 unreachable=0 failed=0 192.168.74.140 : ok=2 changed=1 unreachable=0 failed=0 192.168.74.140 : ok=2 changed=1 unreachable=0 failed=0
  24. 実行2回目 $ ansible-playbook -i hosts playbook.yml PLAY *************************************************************************** TASK [setup]

    ******************************************************************* ok: [192.168.74.140] ok: [192.168.74.141] ok: [192.168.74.142] TASK [Install Git] ************************************************************* ok: [192.168.74.140] ok: [192.168.74.141] ok: [192.168.74.142] PLAY RECAP ********************************************************************* 192.168.74.140 : ok=2 changed=0 unreachable=0 failed=0 192.168.74.140 : ok=2 changed=0 unreachable=0 failed=0 192.168.74.140 : ok=2 changed=0 unreachable=0 failed=0
  25. Ansibleのメリット

  26. ・Excel手順書さようなら ・手動コストほぼゼロ ・人為的なミスほぼゼロ 1. 自動化

  27. ・途中で失敗しても何度でも実行 できる ・最終的にはあるべき状態に収束 している安心感 2. 冪等性

  28. ・インフラレベルも設定や手順、 変更履歴を見える化 ・インフラチームへの不必要な 設定確認の手間が減る ・開発とインフラが同じコードで 相互レビューして改善しやすい 3. Infrastructure as Code

  29. 話していないこと

  30. ・繰り返しや条件付き実行などのより 複雑な手順 ・playbookを分割管理するための ベストプラクティス ・秘密鍵など機密情報の管理方法 ・類似ツール(Chefとか)との比較 ・コンテナ技術との使い分け

  31. まとめ

  32. よさげ!

  33. 告知

  34. Advent Calendarも大詰め!

  35. おわり