Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Ansibleではじめるサーバー・ネットワーク自動化

325 views

Published on

Ansibleの概要と、サーバーとネットワークそれぞれ簡単な利用例(サンプル)とデモをご紹介します。

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Ansibleではじめるサーバー・ネットワーク自動化

  1. 1. 株式会社 エーピーコミュニケーションズ 横地 晃(@akira6592) 2018/07/05
  2. 2. はじめに  構成管理ツールAnsibleで、サーバーや ネットワーク機器への作業を自動化できます。  本資料ではAnsibleの概要と利用例をご紹介します ので、イメージをつかんでいただければと思います。 2 ・本資料は Ansible 2.6.0 を利用した独自の調査に基づくものです。
  3. 3. 自己紹介 3 名前 横地 晃 @akira6592 所属 株式会社エーピーコミュニケーションズ 担当 ネットワークの設計構築 最近の出来事 会議室の名前が Kingyo になった
  4. 4. 内容 4  自動化の概要  Ansible の概要  Ansible の構成要素(インベントリ・Playbook等)  利用例: サーバー編・ネットワーク編 (デモあり)  まとめ
  5. 5. 5 自動化の概要
  6. 6. 自動化のメリット 6  効率化  人が処理するより早い  正確性  指定した通りに処理され、人の判断の揺らぎがない  拡張性  例:10台向けの仕組みを100台にも拡張しやすい
  7. 7. 自動化を始めやすい作業  「リスクが少ない」とは  失敗時の影響範囲が小さい、狭い  切り戻しが容易 ・・など  「効果が表れやすい」とは  繰り返しが多い作業  対象機器が多い作業  効果を測定可能 ・・など 7 リスクが少なく、効果が表れやすい作業
  8. 8. 【参考】Infrastructure as Code(IaC)  構成定義ファイル  バージョン管理  継続的テストシステム、プロセス  一斉変更ではなく小刻みな変更 8 Infrastructure as Code - クラウドにおけるサーバ管理の原則とプラクティス https://www.oreilly.co.jp/books/9784873117966/ ソフトウェア開発で培われてきたプラクティスをインフラに適用 【例】 主な Ansible の出番
  9. 9. 9 Ansible の概要
  10. 10. 構成管理ツール「Ansible」の特徴 10 エージェントレス パワフル シンプル  Playbookと呼ばれる構成定義ファイル を利用する  プログラミング不要  多数のサーバー、クラウド、ネットワーク機 器向けモジュールを標準装備  モジュールを自作することも可能  操作対象機器側に専用ソフト(エージェント)は インストール不要 Chef や puppet などと比較されることが多い
  11. 11. シェルスクリプトとの比較  モジュールを利用することで、コマンドを直接書かなくて良い  エラーの扱いがラク  実行時にエラーがあった場合は、その場で止まってくれる  エラーの有無はモジュール内で検出される  べき等性がある  何度実行しても同じ結果になる  通常のコマンドやシェルスクリプトを呼び出すこともできる  ただし、この場合はべき等性はAnsible自身は担保しない  ほかのAnsibleの機能と連携できる 11  Ansible の使い方やYAMLの書き方を覚える必要がある Ansibleは・・・
  12. 12. 動作環境 12 pip install ansible  Python環境上で動作(ただしWindowsはインストール不可)  インストール方法例 https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html 他、yum、dnf、apt-get 等でも可 例: junos_config モジュールであれば、Pythonパッケージ「ncclient」もインストール必要 https://docs.ansible.com/ansible/latest/modules/junos_config_module.html ※利用するモジュール(後述)によっては追加インストールも必要 (モジュールのドキュメントの「Requirements」を参照) Linux: ○ Win: × Linux: ○ Win: ○ コントロール ターゲット
  13. 13. 13 Ansibleの構成要素
  14. 14. 主な構成要素 (1) インベントリ (2) モジュール (3) Playbook (4) ansible.cfg 14 (1)インベントリ (ホスト情報) (3)Playbook (構成定義)(2)モジュール (機能) (4)ansible.cfg (環境設定) host1 host2 host3 どこに なにを 対象機器 操作 利用 参照
  15. 15. インベントリとは  操作対象ホストのIPアドレス、ホスト名を指定する  変数の定義やグループ化も可能 15 [web] 172.16.0.10 172.16.0.11 172.16.0.12 [db] 172.16.10.10 172.16.10.11 [all:vars] ansible_user=vagrant グループ名 変数定義 所属ホスト サンプル ※構成管理情報(AWS、Zabbixなど)から動的にインベントリ情報を生成する「ダイナミックインベントリ」という仕組みもある
  16. 16. モジュールとは  Ansibleの機能単位  Playbook 等で必要なモジュール(とオプション)を指定 16 システム • Linux • Windows クラウド等 • AWS • Azure • GCP • Dcoker • OpenStack DB • PostgreSQL • MySQL • MS SQL Server 監視 • Zabbix • Sensu • nagios 通知 • Mail • Slack • syslog NW機器 • Cisco IOS • Juniper Junos • Ariststa EOS 【対応プラットフォーム例】 などなど、バージョンアップで増えていく
  17. 17. 17 ※ モジュールインデックス http://docs.ansible.com/ansible/modules_by_category.html 分類 モジュール名 用途 サーバー系 yum yumによるパッケージのインストール、 アンインストール user ユーザーの作成、削除 win_firewall_rule Windos Firewallの設定 クラウド系 ec2 AWSのec2インスタンスの作成、終了、起 動、停止 azure_rm_virtualmachine Azure VM の管理 ネットワーク系 ios_config Cisco IOS 機器へのコンフィグ投入 junos_config Juniper Junos 機器へのコンフィグ投入 モジュールの例 全1600モジュール以上 などなど、バージョンアップで増えていく
  18. 18. Playbookとは  YAMLというフォーマットで記述する構成定義ファイル  Playbookを用意せずに実行するad-hoc方式もある 18 --- - hosts: web become: yes tasks: - name: Ensure httpd package is present yum: name: httpd state: present - name: Ensure latest index.html file is present template: src: index.html.j2 dest: /var/www/html/index.html スペースの数で 情報の階層を表現 サンプル モジュール名 モジュールオプション タスク タスク
  19. 19. ansible.cfg とは  Ansibleの動作を決める設定ファイル  例:SSHホストキーチェックの有無、インベントリファイルのパス  ファイルが無い場合は、デフォルトの動作になる 19 [defaults] host_key_checking = False inventory = hosts サンプル
  20. 20. 20 【利用例1】 Webサーバーの インストールと コンテンツのデプロイ
  21. 21. インベントリファイル 21 [web] 172.16.0.10 [web:vars] ansible_user=vagrant ansible_ssh_private_key_file=~/.ssh/testsv.key グループ「web」にホスト 「172.16.0.10 」が所属 グループ「web」で使用する変数の定義。 ログインユーザー名と秘密鍵へのパス。 利用例1
  22. 22. Playbook 22 --- - hosts: web become: yes tasks: - name: httpd package yum: name: httpd state: present - name: deploy index.html template: src: index.html.j2 dest: /var/www/html/index.html - name: httpd service service: name: httpd state: started enabled: yes vars: v_name: world 対象ホストを指定。インベントリファイル内で定義した グループ「web」を指定。 ログイン先で sudo する yum モジュールを利用 パッケージ「httpd」がインストールされた状態にする template モジュールを利用 テンプレートファイル「index.html.j2」を利用して生成し た内容を「/var/www/html/index.html」にデプロイ service モジュールを利用 サービス「httpd」を起動状態にする。 変数「v_name」の内容を「world」として定義 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 利用例1
  23. 23. コンテンツファイル 23 <html> <head> <title>Test Page</title> </head> <body> <h1>Hello, {{ v_name }} !</h1> </body> </html> 変数を展開する (今回はPlaybook内の変数) Ansibleでは、Jinja2 というテンプレートエンジンを利用でき、変数や 繰り返し、条件分岐などのロジックを埋め込むことができる。 利用例1
  24. 24. Playbook実行 24 [vagrant@centos7 demo]$ ansible-playbook -i inventory web.yml PLAY [web] ******************************************************* TASK [Gathering Facts] ********************************************** ok: [172.16.0.10] TASK [httpd package] *********************************************** changed: [172.16.0.10] TASK [deploy index.html] ******************************************** changed: [172.16.0.10] TASK [httpd service] ************************************************ changed: [172.16.0.10] PLAY RECAP ****************************************************** 172.16.0.10 : ok=4 changed=3 unreachable=0 failed=0 [vagrant@centos7 demo]$ -i オプションでインベントリファイルを指定 Playbookファイル名 グループ「web」を対象とした処理の開始 基本情報(ファクト)の収集 httpd のインストール (実際にインストールされたためchangedステータス) Index.html ファイルのデプロイ (実際にデプロイしためchangedステータス) httpdのサービスの起動 (実際に開始したためchangedステータス) 実行結果のサマリ 利用例1
  25. 25. 確認 25 テンプレートファイルの 「Hello, {{ v_name }} !」と 変数定義「v_name: world」が 組み合わせでこの内容に 無事にWebサーバーが起動して内容が表示された 利用例1
  26. 26. デモ 26 利用例1 https://youtu.be/7jIv_h6xQcM 事前確認 → Playbook実行 → 事後確認
  27. 27. 27 【利用例2】 ネットワーク機器への コンフィグ投入
  28. 28. インベントリファイル 28 [web] 172.16.0.10 [web:vars] ansible_user=vagrant ansible_ssh_private_key_file=~/.ssh/testsv.key [junos] 172.16.0.1 [junos:vars] ansible_network_os=junos ansible_user=admin ansible_ssh_pass=p@ss9999 グループ「juons」にホスト 「172.16.0.1」が所属 グループ「juons」で使用する変数 の定義。 ネットワークOS名、ユーザー名、 パスワード 利用例2
  29. 29. Playbook 29 --- - hosts: junos gather_facts: no connection: netconf tasks: - name: ntp config test junos_config: lines: - set system ntp server 10.0.1.123 - name: config backup junos_command: commands: - show configuration register: result - name: save config to file copy: content: "{{ result.stdout[0] }}" dest: "show_config_{{ inventory_hostname }}.txt" 対象ホストを指定。インベントリファイル内で定義した グループ「juons」を指定。 通常のSSHではなくNETCONFで接続する junos_config モジュールを利用してコンフィグを投入 投入したいコンフィグを指定 (参照先NTPサーバー 10.0.1.123を設定) junos_config モジュールを利用してshowコマンドを実行 copy モジュールを利用 変数「result」内の標準出力の0番目の内容を、 ファイル名「show_config_172.16.0.1.txt」で保存する 実行したいshowコマンドを指定 (コンフィグファイルの表示) 実行した結果を変数「result」に代入 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 利用例2
  30. 30. Playbook実行 30 [vagrant@centos7 demo]$ ansible-playbook -i inventory net.yml PLAY [junos] **************************************************** TASK [ntp config test] *************************************************************** changed: [172.16.0.1] TASK [config backup] *************************************************************** ok: [172.16.0.1] TASK [save config to file] *************************************************************** changed: [172.16.0.1] PLAY RECAP *************************************************************** 172.16.0.1 : ok=3 changed=2 unreachable=0 failed=0 [vagrant@centos7 demo]$ -i オプションでインベントリファイルを指定 Playbookファイル名 グループ「junos」を対象とした処理の開始 コンフィグの投入 (実際に投入されたためchangedステータス) show configuration コマンドの実行 コンフィグのファイル保存の実行 実行結果のサマリ 利用例2
  31. 31. 確認 31 無事にコンフィグ投入とコンフィグのファイル保存ができた root@vsrx1> show configuration system ntp | display set set system ntp server 10.0.1.123 NW機器側 [vagrant@centos7 demo]$ cat show_config_172.16.0.1.txt ## Last changed: 2018-06-20 18:20:40 UTC version 12.1X47-D15.4; system { host-name vsrx1; root-authentication { encrypted-password "$1$nq....."; ssh-rsa "ssh-rsa AAAAB3....."; } login { user vagrant { uid 2000; .... ntp { server 10.0.1.123; } } interfaces { ge-0/0/0 { ..... Ansibleホスト側 利用例2
  32. 32. デモ 32 利用例2 事前確認 → Playbook実行 → 事後確認 https://youtu.be/tE63YsOrX9Q
  33. 33. 33 まとめ
  34. 34. まとめ 34 使えそうかも、と感じていただけたら幸いです。  Ansible はシンプルで始めやすいツール  エージェントレスなので、対象機器に専用ソフトは不要  Linux、Windows、クラウド、NW機器などに対応  Playbook という構成定義ファイルを作成して実行するのが 基本的な使い方
  35. 35. 【付録】参考資料 35  公式ドキュメント  トップ  https://docs.ansible.com/  Getting Started  https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html  モジュールインデックス  http://docs.ansible.com/ansible/modules_by_category.html  ハンズオンコンテンツ  https://github.com/ansible/lightbulb  Ansible by Red Hat  https://www.redhat.com/ja/explore/ansible  書籍  Ansible実践ガイド 第2版  https://book.impress.co.jp/books/1117101100  Ansible徹底入門  https://www.shoeisha.co.jp/book/detail/9784798149943 おそらく公式ドキュメントの中で 各モジュールの説明ページを見る時間が 一番長い(何ができる?どう使う?)
  36. 36. 【付録】コミュニティ情報 36 https://ansible-users.connpass.com/  Ansible Night 通常セッションとLT。年に数回全国で開催される。 次回 2018/07/12 Ansible Night in Osaka 2018.07  https://ansible-users.connpass.com/event/90117/ 次々回 2018/08/02 Ansible Night in Fukuoka 2018.08  https://ansible-users.connpass.com/event/93620/  Ansible もくもく会  ハンズオン。年に数回開催される。  次回 2018/07/17 Ansibleもくもく会 (第4回)  https://ansible-users.connpass.com/event/92701/ Ansible ユーザー会
  37. 37. 【付録】イベント情報 37 https://www.janog.gr.jp/meeting/janog42/program/ASBL 日付 : 2018/07/11 概要: Ansibleの初心者向けのチュートリアルとなります。 主にサーバ向けの構成管理ツールとして利用されるAnsible ですが、近年はネットワークの構成管理 および自動化ツールとしても利用されるようになっております。 今回はこれからAnsibleを始められる方や初心者向けに、概 要/基礎から簡単なプレイブックの書き方 などを紹介して参ります。 ★ストリーム配信および録画公開予定 Ansible ネットワーク自動化チュートリアル 【JANOG42 Meeting in Mie】

×
Save this presentationTap To Close