Slide 1

Slide 1 text

ChefからAnsibleへ引っ越したい
 人のためのAnsible入門
 
 July Tech Festa 2015/7/26
 @iwashi86 / Yoshimasa Iwase
 1 https://www.flickr.com/photos/gsfc/13902795556/in/photolist-nbxsKE-barXrZ-azd68k-bxoSSp-egb7rB-mhaDLa-bRYwBH-8NGh4Z-4d2XZ-dkiRVQ-36ELQM-ftbvxr-8LeQta-6cfCfe-9iWrrE-dZUfSq-neTxeK-ntL9MW-gzYp8-efDEVP-5j2f4x-bdd9ea-kJrs1Z-dz6k4z-oWv5Tp-tvQXW7-nuM4RK-66Khgv-8CPZUQ-MRo3L-khBpLd-pugD9j-pjjMoj-7DQWhU-5kMcmT -priEv3-ticgYH-9jt6GK-d2McUy-aXHTdn-nRaCfF-hsuYJX-naQgip-edLBtV-edScNj-edSefj-aaEDDi-9Kzoa-c5gQRN-dyhNrD

Slide 2

Slide 2 text

2 Yoshimasa Iwase
 @iwashi86 NTTコミュニケーションズ
 技術開発部 (R&D部門) Web/インフラ エンジニア


Slide 3

Slide 3 text

 WebRTC
 3 ブラウザだけで P2Pで音声映像通信する技術

Slide 4

Slide 4 text

4 http://is.gd/html5jt#1111 遊んでみる!

Slide 5

Slide 5 text

5 SkyWay = CPaaS
 (Communication Paas)


Slide 6

Slide 6 text

6 2014年前半の裏側
 https://www.flickr.com/photos/torkildr/3462607995/in/photolist-6gYLHR-4H1hyC-2Wrvx-65cUp7-5RvGZs-6NAXg-n6mHgT-6iUZPe-Je5v9-9v7Kgx-5fipyz-iygJ-cKbUb-ac3oaX-NhE1s-bjtT-2XQgfL-JebAB-82PXBP-6gYLjx-2kAaZ-cfXKY1-mZJBc2-8XH6Na-4YVJXw-7YNxq-bf2wtK-exjsm-cEeN1-6h3W3 W-4PGC7o-3M87z-5nSsLu-cqqwcb-8NwzC-eWnwZ-akqkB-8cd3Np-icgBtX-tCk6d-2JXe1q-dX67NU-7MriLM-a6kpxQ-mMwb-5fnQef-DqpnY-8b8puq-9cggqL-YD7Db

Slide 7

Slide 7 text

7 ある理由で移行 https://www.flickr.com/photos/torkildr/3462607995/in/photolist-6gYLHR-4H1hyC-2Wrvx-65cUp7-5RvGZs-6NAXg-n6mHgT-6iUZPe-Je5v9-9v7Kgx-5fipyz-iygJ-cKbUb-ac3oaX-NhE1s-bjtT-2XQgfL-JebAB-82PXBP-6gYLjx-2kAaZ-cfXKY1-mZJBc2-8XH6Na-4YVJXw-7YNxq-bf2wtK-exjsm-cEeN1-6h3W3 W-4PGC7o-3M87z-5nSsLu-cqqwcb-8NwzC-eWnwZ-akqkB-8cd3Np-icgBtX-tCk6d-2JXe1q-dX67NU-7MriLM-a6kpxQ-mMwb-5fnQef-DqpnY-8b8puq-9cggqL-YD7Db

Slide 8

Slide 8 text

8 自身の例で、振り返ってみてください
 
 前提
 VM上のインフラ・ミドル構築をする
 これまで構成管理ツールの利用経験無し


Slide 9

Slide 9 text

9 発見 導入 運用 新技術を導入時の工程


Slide 10

Slide 10 text

10 Chef凄い らしいぞ! 発見 導入 運用

Slide 11

Slide 11 text

11 発見 導入 運用 (1冊程度勉強して) 導入もOK!

Slide 12

Slide 12 text

12 半年後


Slide 13

Slide 13 text

13 ん? 発見 導入 運用

Slide 14

Slide 14 text

14 https://www.flickr.com/photos/ro_buk/4207903199/in/photolist-7pQB2a-7oP9vq-8xbiHx-7Ajmwj-8zemoB-7ehuXP-94aHzE-93jvSN-5gCQp-nRdqb-7ESvZP-5eMSN-4izRk-gdCx68-7H5QhG-hm25eq-gdCArW-gdCvG6-99Q3YA-gdD9sZ-4iA9c-8uzbUL-7hWskX-24apZ- 6JCtXT-765WDT-7cpma4-765UzM-8wAnxv-8xtXNE-23HQ3r-79kxLp-9uu261-6JgUhP-62GZde-6HTovP-7xJsr-tXPfoF-6JkZB3-3aWJ47-6JkZtY-5fFxrT-5fKTRL-bzSKLU-RTQ8y-hGmu1-5fKTgm-5fFvFn-3D3gk9-769MNG 完全に忘れた・・・
 メンテ辛い・・・


Slide 15

Slide 15 text

15 おまけに・・・

Slide 16

Slide 16 text

16 https://www.flickr.com/photos/ro_buk/4207903199/in/photolist-7pQB2a-7oP9vq-8xbiHx-7Ajmwj-8zemoB-7ehuXP-94aHzE-93jvSN-5gCQp-nRdqb-7ESvZP-5eMSN-4izRk-gdCx68-7H5QhG-hm25eq-gdCArW-gdCvG6-99Q3YA-gdD9sZ-4iA9c-8uzbUL-7hWskX-24apZ- 6JCtXT-765WDT-7cpma4-765UzM-8wAnxv-8xtXNE-23HQ3r-79kxLp-9uu261-6JgUhP-62GZde-6HTovP-7xJsr-tXPfoF-6JkZB3-3aWJ47-6JkZtY-5fFxrT-5fKTRL-bzSKLU-RTQ8y-hGmu1-5fKTgm-5fFvFn-3D3gk9-769MNG rubyで書けるからと言って
 recipeを調子に乗って
 自由に書きすぎた…
 
 


Slide 17

Slide 17 text

17 https://www.flickr.com/photos/ro_buk/4207903199/in/photolist-7pQB2a-7oP9vq-8xbiHx-7Ajmwj-8zemoB-7ehuXP-94aHzE-93jvSN-5gCQp-nRdqb-7ESvZP-5eMSN-4izRk-gdCx68-7H5QhG-hm25eq-gdCArW-gdCvG6-99Q3YA-gdD9sZ-4iA9c-8uzbUL-7hWskX-24apZ- 6JCtXT-765WDT-7cpma4-765UzM-8wAnxv-8xtXNE-23HQ3r-79kxLp-9uu261-6JgUhP-62GZde-6HTovP-7xJsr-tXPfoF-6JkZB3-3aWJ47-6JkZtY-5fFxrT-5fKTRL-bzSKLU-RTQ8y-hGmu1-5fKTgm-5fFvFn-3D3gk9-769MNG rubyで書けるからと言って
 recipeを調子に乗って
 自由に書きすぎた…
 
 チーム全体の学習コスト高い…


Slide 18

Slide 18 text

18 そんなとき

Slide 19

Slide 19 text

19 ansibleというのが流行ってるらしい
 補足:当時はItamaeに気づいてませんでした

Slide 20

Slide 20 text

20 これならチームでメンテできそう!
 まず使ってみよう!(そのまま導入)


Slide 21

Slide 21 text

21 本題

Slide 22

Slide 22 text

22 本日のゴール
 (主にChef利用経験のあるご自身が) 
 ChefからAnsibleへ移行する
 第一歩を踏み出せる気分になること https://www.flickr.com/photos/opopododo/2571337302/in/photolist-4VdLZL-7b3bhQ-e9gbB-rCxB4-74Qv6t-7qFu1J-djqaWe-7qFjRU-9qhzWG-4zQ58L-7TjN4c-xvKpv-8a6rY5-5Zgg2m-foXf8P-52o5Gc-7qgahb-46ZCmT-7z9gq6-29XcLr-gok6wW-d47M9o-7g3JQC-eWLKj-7FigNd-7GjPxg-8KmWj Q-mFWxJV-9vvqNJ-5NpC4G-7reTfX-dkwWyU-iRpzkL-7fdVJk-dND4jW-exLA6M-fS1km-bdD5hM-qrK89n-7dCcE4-pVyBQ7-drMZqC-4y7cC7-pcvQqb-rEN56p-4WdiMB-pLTQeU-pLWNDL-7uPUoT-gtsSos

Slide 23

Slide 23 text

23 本日の流れ • Ansibleとは(概要) • Ansibleの基本的な使い方 • Ansibleの応用的な使い方 https://www.flickr.com/photos/gsfc/13902795556/in/photolist-nbxsKE-barXrZ-azd68k-bxoSSp-egb7rB-mhaDLa-bRYwBH-8NGh4Z-4d2XZ-dkiRVQ-36ELQM-ftbvxr-8LeQta-6cfCfe-9iWrrE-dZUfSq-neTxeK-ntL9MW-gzYp8-efDEVP-5j2f4x-bdd9ea-kJrs1Z-dz6k4z-oWv5Tp-tvQXW7-nuM4RK-66Khgv-8CPZUQ-MRo3L-khBpLd-pugD9j-pjjMoj-7DQWhU-5kMcmT -priEv3-ticgYH-9jt6GK-d2McUy-aXHTdn-nRaCfF-hsuYJX-naQgip-edLBtV-edScNj-edSefj-aaEDDi-9Kzoa-c5gQRN-dyhNrD

Slide 24

Slide 24 text

24 本日の流れ • Ansibleとは(概要) • Ansibleの基本的な使い方 • Ansibleの応用的な使い方 https://www.flickr.com/photos/gsfc/13902795556/in/photolist-nbxsKE-barXrZ-azd68k-bxoSSp-egb7rB-mhaDLa-bRYwBH-8NGh4Z-4d2XZ-dkiRVQ-36ELQM-ftbvxr-8LeQta-6cfCfe-9iWrrE-dZUfSq-neTxeK-ntL9MW-gzYp8-efDEVP-5j2f4x-bdd9ea-kJrs1Z-dz6k4z-oWv5Tp-tvQXW7-nuM4RK-66Khgv-8CPZUQ-MRo3L-khBpLd-pugD9j-pjjMoj-7DQWhU-5kMcmT -priEv3-ticgYH-9jt6GK-d2McUy-aXHTdn-nRaCfF-hsuYJX-naQgip-edLBtV-edScNj-edSefj-aaEDDi-9Kzoa-c5gQRN-dyhNrD

Slide 25

Slide 25 text

25 一言で

Slide 26

Slide 26 text

26 サーバ構築を 自動化するシンプルな 構成管理ツール(+α)

Slide 27

Slide 27 text

27 Provisioning Toolchain

Slide 28

Slide 28 text

28 Application Service Orchestration (デプロイ・ノード間連携など) System Configuration (OSやミドルの構成管理など) Bootstrapping (OSの初期インストールなど) Provisioning Tool Chain 引用元:Provisioning Toolchain by Lee Thompon (Velocity 2010)

Slide 29

Slide 29 text

29 Application Service Orchestration (デプロイ・ノード間連携など) System Configuration (OSやミドルの構成管理など) Bootstrapping (OSの初期インストールなど) Provisioning Tool Chain 引用元:Provisioning Toolchain by Lee Thompon (Velocity 2010)

Slide 30

Slide 30 text

30 Application Service Orchestration (デプロイ・ノード間連携など) System Configuration (OSやミドルの構成管理など) Bootstrapping (OSの初期インストールなど) Provisioning Tool Chain 引用元:Provisioning Toolchain by Lee Thompon (Velocity 2010)

Slide 31

Slide 31 text

31 Application Service Orchestration (デプロイ・ノード間連携など) System Configuration (OSやミドルの構成管理など) Bootstrapping (OSの初期インストールなど) Provisioning Tool Chain 引用元:Provisioning Toolchain by Lee Thompon (Velocity 2010)

Slide 32

Slide 32 text

32 Application Service Orchestration (デプロイ・ノード間連携など) System Configuration (OSやミドルの構成管理など) Bootstrapping (OSの初期インストールなど) Provisioning Tool Chain 引用元:Provisioning Toolchain by Lee Thompon (Velocity 2010)

Slide 33

Slide 33 text

33 特徴

Slide 34

Slide 34 text

34 引用 http://www.ansible.com/home

Slide 35

Slide 35 text

35 引用 http://www.ansible.com/home 数時間で使える 人間(非rubyプログラマ) も読みやすい

Slide 36

Slide 36 text

36 引用 http://www.ansible.com/home エージェント不要 SSH等があればOK 数時間で使える 人間(非rubyプログラマ) も読みやすい

Slide 37

Slide 37 text

37 引用 http://www.ansible.com/home エージェント不要 SSH等があればOK 構成管理のみならず デプロイ・オーケストレーション そして冪等性も対応 数時間で使える 人間(非rubyプログラマ) も読みやすい

Slide 38

Slide 38 text

38 比べてみる

Slide 39

Slide 39 text

39 Ansible Chef エージェント エージェントレス エージェントとサーバ 接続プロトコル SSHなど SSHなど 記述方法 YAML Ruby 柔軟さ △ ○ シンプルさ ○ △ テンプレート形式 Jinja2 erb 共用 Ansible Galaxy Community Cookbook (参考)開発言語 Python Ruby Ansible と Chef の比較

Slide 40

Slide 40 text

40 本日の流れ • Ansibleとは(概要) • Ansibleの基本的な使い方 • Ansibleの応用的な使い方 https://www.flickr.com/photos/gsfc/13902795556/in/photolist-nbxsKE-barXrZ-azd68k-bxoSSp-egb7rB-mhaDLa-bRYwBH-8NGh4Z-4d2XZ-dkiRVQ-36ELQM-ftbvxr-8LeQta-6cfCfe-9iWrrE-dZUfSq-neTxeK-ntL9MW-gzYp8-efDEVP-5j2f4x-bdd9ea-kJrs1Z-dz6k4z-oWv5Tp-tvQXW7-nuM4RK-66Khgv-8CPZUQ-MRo3L-khBpLd-pugD9j-pjjMoj-7DQWhU-5kMcmT -priEv3-ticgYH-9jt6GK-d2McUy-aXHTdn-nRaCfF-hsuYJX-naQgip-edLBtV-edScNj-edSefj-aaEDDi-9Kzoa-c5gQRN-dyhNrD

Slide 41

Slide 41 text

41 • インストール • 使ってみる • 実行対象ホストを決める • 対象ホストで任意の処理を実施 Ansibleの基本的な使い方

Slide 42

Slide 42 text

42 インストール // RedHat系 (EPEL導入後) $ sudo yum install ansible // Ubuntu等 $ sudo apt-get install software-properties-common $ sudo apt-add-repository ppa:ansible/ansible $ sudo apt-get update $ sudo apt-get install ansible // Mac OS $ brew update $ brew install ansible Pythonがある前提

Slide 43

Slide 43 text

43 設定ファイル inventory 実行対象を設定するファイル ini形式で記述

Slide 44

Slide 44 text

44 設定ファイル inventory playbook 実行対象を設定するファイル ini形式で記述 task(実施する処理)を まとめて記述したファイル

Slide 45

Slide 45 text

45 設定ファイル inventory playbook ansible.cfg 実行対象を設定するファイル ini形式で記述 task(実施する処理)を まとめて記述したファイル Ansible自体の設定ファイル // 今回は省略

Slide 46

Slide 46 text

46 設定ファイル inventory playbook ansible.cfg 実行対象を設定するファイル ini形式で記述 task(実施する処理)を まとめて記述したファイル Ansible自体の設定ファイル // 今回は省略

Slide 47

Slide 47 text

47 inventoryファイル mail.example.com [webservers] foo.example.com bar.example.com [dbservers] db[01:05].example.com

Slide 48

Slide 48 text

48 inventoryファイル mail.example.com [webservers] foo.example.com bar.example.com [dbservers] db[01:05].example.com シングルのホスト (SSHで接続するホスト名)

Slide 49

Slide 49 text

49 inventoryファイル mail.example.com [webservers] foo.example.com bar.example.com [dbservers] db[01:05].example.com シングルのホスト (SSHで接続するホスト名) グループ名 複数のホストを束ねており、 複数ホストに対してまとめて 処理を実行する場合に便利

Slide 50

Slide 50 text

50 inventoryファイル mail.example.com [webservers] foo.example.com bar.example.com [dbservers] db[01:05].example.com シングルのホスト (SSHで接続するホスト名) グループ名 複数のホストを束ねており、 複数ホストに対してまとめて 処理を実行する場合に便利 簡略化した まとめ指定も可能

Slide 51

Slide 51 text

51 続:inventoryファイル example.com ansible_ssh_port=5555 // その他の設定 ansible_ssh_host=192.168.1.50 ansible_ssh_user=hoge ansible_ssh_private_key_file=/foo/bar/XX sshのポート番号

Slide 52

Slide 52 text

52 続:inventoryファイル example.com ansible_ssh_port=5555 // その他の設定 ansible_ssh_host=192.168.1.50 ansible_ssh_user=hoge ansible_ssh_private_key_file=/foo/bar/XX sshのポート番号 sshの接続先IP

Slide 53

Slide 53 text

53 続:inventoryファイル example.com ansible_ssh_port=5555 // その他の設定 ansible_ssh_host=192.168.1.50 ansible_ssh_user=hoge ansible_ssh_private_key_file=/foo/bar/XX sshのポート番号 sshの接続先IP sshで接続するユーザ名

Slide 54

Slide 54 text

54 続:inventoryファイル example.com ansible_ssh_port=5555 // その他の設定 ansible_ssh_host=192.168.1.50 ansible_ssh_user=hoge ansible_ssh_private_key_file=/foo/bar/XX sshのポート番号 sshの接続先IP sshで接続するユーザ名 sshで利用する秘密鍵 ファイル

Slide 55

Slide 55 text

55 ホスト名: jtf (VitualBox上のVM) ローカル Macbook 使ってみる

Slide 56

Slide 56 text

56 ホスト名: jtf (VitualBox上のVM) ローカル Macbook 使ってみる ansible jtf -i host.ini -m ping
 -i インベントリファイル ホストを指定 モジュール (ホスト上で 実行される) $ cat host.ini jtf

Slide 57

Slide 57 text

57 ansible jtf -i host.ini -a ‘uname -a’ ホスト名: jtf (VitualBox上のVM) ローカル Macbook 続:使ってみる ansible jtf -i host.ini –m setup
 chefでお馴染みの 「ohai」を内部で利用し ホスト情報を取得

Slide 58

Slide 58 text

58 設定ファイル inventory playbook ansible.cfg 実行対象を設定するファイル ini形式で記述 task(実施する処理)を まとめて記述したファイル Ansible自体の設定ファイル // 今回は省略

Slide 59

Slide 59 text

59 Playbook --- - hosts: jtf sudo: yes tasks: - apt: name=sl update_cache=yes 対象ホスト sudoで 以下のタスク群を実行 「誰に対して、どういう条件で、何を実行」をYAMLで記述

Slide 60

Slide 60 text

60 Playbook --- - hosts: jtf sudo: yes tasks: - apt: name=sl update_cache=yes chefでいうResources AnsibleではModuleと呼ぶ 重要なので、後に高頻度で利用す るモジュールを紹介 「誰に対して、どういう条件で、何を実行」をYAMLで記述

Slide 61

Slide 61 text

61 Playbook - vars --- - hosts: jtf vars: username: jtf_user tasks: - user: name={{ username }} 変数を渡したいとき

Slide 62

Slide 62 text

62 Playbook - vars --- - hosts: jtf vars: username: jtf_user tasks: - user: name={{ username }} 変数を渡したいとき taskで使う変数を組みこむ

Slide 63

Slide 63 text

63 Playbook - handler tasks: - apt: name=nginx notify: restart nginx handlers: - name: restart nginx service: name=nginx state=restarted chefでいうNotificationアクション

Slide 64

Slide 64 text

64 Playbook - handler tasks: - apt: name=nginx notify: restart nginx handlers: - name: restart nginx service: name=nginx state=restarted chefでいうNotificationアクション

Slide 65

Slide 65 text

65 Playbook - handler tasks: - apt: name=nginx notify: restart nginx handlers: - name: restart nginx service: name=nginx state=restarted chefでいうNotificationアクション

Slide 66

Slide 66 text

66 Playbook - handler tasks: - apt: name=nginx notify: restart nginx handlers: - name: restart nginx service: name=nginx state=restarted chefでいうNotificationアクション #Chefだとこんな感じ package “nginx” do action :install notifies :reload, ‘service[nginx]’ end service “nginx” do :reload => true end

Slide 67

Slide 67 text

67 Playbook - loop tasks: - apt: name={{ item }} with_items: - gcc - make - git chefだとruby構文で頑張っていたところ

Slide 68

Slide 68 text

68 Playbook - loop tasks: - apt: name={{ item }} with_items: - gcc - make - git chefだとruby構文で頑張っていたところ #Chefだとこんな感じ %w{gcc make git}.each do |pkg| package pkg do action : install end end

Slide 69

Slide 69 text

69 Playbook - when tasks: - apt: name=apache2 state=latest when: ansible_os_family == “Debian” - apt: name=httpd state=latest when: ansible_os_family == “RedHat” 条件分岐したい場合に利用、Chefだとif/unlessなど 補足:ansible_os_familyは、ansible実行時に     自動で収集・設定される変数

Slide 70

Slide 70 text

70 Playbook - when tasks: - apt: name=apache2 state=latest when: ansible_os_family == “Debian” - apt: name=httpd state=latest when: ansible_os_family == “RedHat” 条件分岐したい場合に利用、Chefだとif/unlessなど Chefだと”package”で抽象化されていた。 Ansibleへ移行時は注意。

Slide 71

Slide 71 text

71 よく使うモジュール


Slide 72

Slide 72 text

72 file ファイル・ディレクトリの作成や変更 (Chefでいう file + directory + link) - file: path=/etc/foo.conf owner=foo group=foo mode=0644 - file: path=/etc/some_directory state=directory mode=0755

Slide 73

Slide 73 text

73 copy ansibleを実行するホストから 対象のホストにファイルをコピーする Chefでいうcookbook_file - copy: src=/srv/myfiles/foo.conf dest=/etc/foo.conf owner=foo group=foo mode=0644

Slide 74

Slide 74 text

74 template Chefのテンプレートと同様 変数を埋め込めるfileモジュール テンプレー卜はerbではなくjinja2 - template: src=/mytemplates/foo.j2 dest=/etc/file.conf owner=bin group=wheel mode=0644 erb: <%= hoge %> jinja2: {{ hoge }}

Slide 75

Slide 75 text

75 script 対象ホストでスクリプトを実行する createsはchefのcreatesと一緒。 tasks: # 冪等性無し - script: my_command.sh # 冪等性有り - script: my_command.sh creates=/tmp/done.txt

Slide 76

Slide 76 text

76 get_url URLからファイルをダウンロードする 既にファイルが存在していた場合は ダウンロードをスキップできる (Chefでいうremote_file) tasks: - name: download foo.conf get_url: url=http://example.com/path/file.conf dest=/etc/foo.conf mode=0440

Slide 77

Slide 77 text

77 その他は本家ドキュメントを参照


Slide 78

Slide 78 text

78 本日の流れ • Ansibleとは(概要) • Ansibleの基本的な使い方 • Ansibleの応用的な使い方

Slide 79

Slide 79 text

79 ディレクトリ構成 Best Practice ・ Chefにはenvironmentがあるが、Ansibleにはない ・対応としては、ディレクトリ構成のベストプラクティスが  公開されているのでそれで吸収可能 production # inventory file for プロダクション staging # inventory file for ステージ group_vars/ group1 # グループごとの変数をまとめておく host_vars/ hostname1 # ホスト固有の値を設定する site.yml # 全ての起点のplaybook webservers.yml # playbook for webサーバ dbservers.yml # playbook for dbサーバ

Slide 80

Slide 80 text

80 続:ディレクトリ構成 Best Practice ・ role単位で構築していくのが基本 ・以下の例は nginx の例 roles/ nginx/ # ロールごとに作成(Chefでいうクックブック単位) tasks/ # 実行したい処理 main.yml # nginxのインストール処理 handlers/ # main.yml # notifyで呼ばれるハンドラ templates/ nginx.conf.j2 # nginxのコンフィグファイル files/ bar.txt # 変数不要で配備したいファイル    vars/ main.yml # このロールの変数を設定

Slide 81

Slide 81 text

81 ChefでいうCommunity Cookbookに近い
 roleごとに必要なものをDL可


Slide 82

Slide 82 text

82 Dynamic Inventry ・ 管理ホストが多くなると、Inventry管理が大変   ・特にクラウド上のホストは生成・破棄の繰り返し ・ Inventryには静的ファイルの他、スクリプト指定可能 // AWSを利用するためのキー情報 $ export AWS_ACCESS_KEY_ID=’xxxxxxxxx.......' $ export AWS_SECRET_ACCESS_KEY='yyyyy.......’ // 動的にホストを取得するスクリプト取得(公式が用意) $ wget https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inve ntory/ec2.py $ wget https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inve ntory/ec2.ini

Slide 83

Slide 83 text

83 Dynamic Inventry ・ 管理ホストが多くなると、Inventry管理が大変   ・特にクラウド上のホストは生成・破棄の繰り返し ・ Inventryには静的ファイルの他、スクリプト指定可能 // AWSを利用するためのキー情報 $ export AWS_ACCESS_KEY_ID=’xxxxxxxxx.......' $ export AWS_SECRET_ACCESS_KEY='yyyyy.......’ // 動的にホストを取得するスクリプト取得(公式が用意) $ wget https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inve ntory/ec2.py $ wget https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inve ntory/ec2.ini 静的ファイルの代わりに スクリプト指定

Slide 84

Slide 84 text

84 Ansibleでデプロイまでやってみる HTTP Request HTTP Request

Slide 85

Slide 85 text

85 Ansibleでデプロイまでやってみる 仕込み  ・ nginxからRailsアプリの指定はシンボリックリンク 例: /usr/local/app  ・本当のアプリは、タイムスタンプ名のディレクトリへ   例: /usr/local/20150726-131500 シンボリックリンク

Slide 86

Slide 86 text

86 Ansibleでデプロイまでやってみる 旧 新 条件:  ・Nginxをリバースプロキシとして利用  ・Nginxの背後にはRailsアプリ  ・旧/新の切り替えをなるべくBlue Greenに行いたい

Slide 87

Slide 87 text

87 - name: デプロイ先のディレクトリをtimestampとするために、timestampを得る command: date '+%Y%m%d-%H%I%S' register: date_output - name: timestamp名のディレクトリのPATH名を作る command: echo "/usr/local/{{ date_output.stdout }}" register: release_path # name: release_pathのディレクトリを作成し、任意の方法でアプリ配備 - name: 最新版のPATHにシンボリックリンクを貼る file: src=”{{ release_path }}" dest="/usr/local/app” state=link デプロイまでするplaybook例 補足1:capistrano等の責務をansibleで対応するイメー ジ。     ロールバックなども書けば対応可能。 補足2: 上記は説明用で完全なコードで無い点に注意

Slide 88

Slide 88 text

88 インフラTDDしたい! ・ホワイトボックスアプローチ  ⇒ ・ブラックボックスアプローチ  ⇒ Infratester等 1. Ansible 2. Serverspec / Infratester

Slide 89

Slide 89 text

89 インフラTDDしたい! ・ホワイトボックスアプローチ  ⇒ ・ブラックボックスアプローチ  ⇒ Infratester等 describe package(‘httpd’)   it { should be_installed } end describe port(80) do   it { should be_listening } end

Slide 90

Slide 90 text

90 インフラTDDしたい! ・ホワイトボックスアプローチ  ⇒ ・ブラックボックスアプローチ  ⇒ Infratester等 describe server(:app) do  describe http('http://app') do   It "responds content including 'This is app server'" do    expect(response.body).to include(‘This is app server’)   end   it "responds OK 200" do    expect(response.status).to eq(200)   end  end end

Slide 91

Slide 91 text

91 まとめ • Ansibleとは(概要) • Ansibleの基本的な使い方 • Ansibleの応用的な使い方

Slide 92

Slide 92 text

92 本日のゴール
 (主にChef利用経験のあるご自身が) 
 ChefからAnsibleへ移行する
 第一歩を踏み出せる気分になること https://www.flickr.com/photos/opopododo/2571337302/in/photolist-4VdLZL-7b3bhQ-e9gbB-rCxB4-74Qv6t-7qFu1J-djqaWe-7qFjRU-9qhzWG-4zQ58L-7TjN4c-xvKpv-8a6rY5-5Zgg2m-foXf8P-52o5Gc-7qgahb-46ZCmT-7z9gq6-29XcLr-gok6wW-d47M9o-7g3JQC-eWLKj-7FigNd-7GjPxg-8KmWj Q-mFWxJV-9vvqNJ-5NpC4G-7reTfX-dkwWyU-iRpzkL-7fdVJk-dND4jW-exLA6M-fS1km-bdD5hM-qrK89n-7dCcE4-pVyBQ7-drMZqC-4y7cC7-pcvQqb-rEN56p-4WdiMB-pLTQeU-pLWNDL-7uPUoT-gtsSos おしまい