チームでAnsibleを共有・活用するコツをお伝えします。 *2018/7/12 Ansible Night in Osakaの資料
〜Linux/Zabbix/AWSへの適応例と合わせて〜チームでAnsibleを共有・活用するコツ2018/7/12Ansible Night in OsakaNaoki Oishi
View Slide
1自己紹介
2本日のアジェンダは次のとおり1.はじめに2.Ansibleをチームで活用するまでの3ステップ3.demoアジェンダ
3ちなみに、本日はこんなことを意図(期待)した内容です◼これから自動化/Ansibleを初めるきっかけに◼Ansibleの書き方にいまいち自信がないという方のお助けに◼チームでのAnsible活用を初めてみよう!というきっかけにアジェンダ
4◼なぜITインフラの自動化が必要?⚫ITインフラのコモディティ化– 価値の転換、ローコスト・ハイクオリティが求められる⚫働き方改革!◼なぜAnsible?⚫マルチプラットフォーム対応⚫オープンソース・オープンコミュニティ◼なぜチームで活用?⚫ノウハウの共有・継承⚫コラボレーションの推進はじめにCloudServerAppNWStorage
5Ansibleをチームで活用するまでの3ステップ1st 2nd 3rd
6Ansibleをチームで活用するまでの3ステップ1st 2nd 3rd
7「共有化」を見据えたplaybookを作成◼まずは… “動く” playbookを作成⚫とにかく動けばOK、Try First !!◼次にplaybookをRole化⚫分割により見通し良く、再利用可能に◼最後にRole内を変数化⚫汎用性を高める1st step: Try First !!とにかく動くもの分割と汎用性の向上
8タスク、変数、ファイルなどplaybookを分割する仕組み◼playbook 全体を見通し良く、再利用を容易に◼分割単位は作成するplaybookの用途・規模による⚫例えばシステムの用途ごとに作成する(web, ap, db)、より小さい単位でサービスごとに作成する(ntp, ftp)など◼ディレクトリ構造は「お決まりパターン」を覚える⚫[ansible best practices] で検索Roleとは?
9まずは よく使うRoleのディレクトリ構造を覚えるRoleのディレクトリ構造playbook/roles/roleA/ # Roleの呼び出し名tasks/main.yml # 処理(タスク)を記述handlers/main.yml # 特定の状況でのみ実行するタスクを記述templates/ # jinja2 形式のテンプレートを配置files/ # リモートへコピーするファイルを配置defaults/main.yml # 変数の初期値を記述Playbook内でrole 名を指定すると、tasks/main.yml が実行される
10すべてのタスク は Role へ記述するRole化の基本方針$ ansible-playbook –i hosts websystem.yml- hosts: webserverstasks:- name: Install Apacheyum:name: httpdstate: latest- name: Copy httpd.conftemplate:src: httpd.conf.j2dest: /etc/httpd/http.conf- hosts: webserversroles:- role: httpd- name: Install Apacheyum:name: httpdstate: latest- name: Copy httpd.conftemplate:src: httpd.conf.j2dest: /etc/httpd/http.confwebsystem.yml websystem.ymlroles/httpd/tasks/main.yml
11Ansibleの変数は数が多く、優先度が複雑なので、変数を指定する場所をあらかじめ決めておくAnsibleの変数はややこしい。。。※例えばこんな感じで絞り込み・role defaults ↑優先度低・playbook group_vars/all・playbook group_vars/*・playbook host_vars/*・extra vars ↓優先度高
12実際のplaybookではこんな感じ変数の指定場所playbook/hosts # インベントリwebsystems.yml # メインのplaybookhost_vars/web01.yml # web01 ホストへ適応 優先度2group_vars/webservers.yml # webservers グループへ適応 優先度3all.yml # すべてのホストへ適応 優先度4roles/httpd/tasks/main.ymldefaults/main.yml # roleのデフォルト値 優先度5(低)$ ansible-playbook –i hosts websystem.yml –e “key=value”ココで指定した変数を他の場所で上書きしていく優先度1(高)
13変数名の重複をさけるため、命名規則を決める◼1.基本形:_<わかりやすい名前>⚫Role名が httpd の場合、例えば「httpd_ServerName 」◼2.playbook全体で使用する変数は先頭に global_ を付与変数名の命名規則global_hostname: web01.example.comhost_vars/web01.ymlpostfix_myhostname : “{{ global_hostname }}”roles/postfix/defaults/main.ymlhttpd_ServerName : “{{ global_hostname }}”roles/httpd/defaults/main.yml
14Ansibleをチームで活用するまでの3ステップ1st 2nd 3rd
15「コアな仲間」と「共有方法」を確立◼展開に向けたコアメンバーを開拓⚫メリット共有、効果のアピール◼playbookの共有方法を確立⚫普段からgit, svnなど使用していればそちら⚫クローズド環境なら GitLab がオススメ◼変数の整理⚫playbook内での説明書きを充実させる⚫変数入力の補助ツールを検討2nd: Get Core Members !!push& pull
16playbook = Code! SCMを普段使用しない方(インフラ屋?)もこれを機に使い方を覚える◼クローズドな環境で管理したい場合は GitLab がオススメ⚫GitLab CE (Community Edition) はオンプレ設置が可能⚫Web UI & 日本語対応のためSCM初心者にも優しいplaybookの共有にSCMは必須*SCM (Source Code Management)
17変数化された playbook の可読性と共有度を高めるために説明文を充実させる、もしくは入力補助ツールを作成する他人のplaybookは理解不能…にならないようにREADME へ変数一覧を記載、凡例はroles/*/defaults/main.yml へ記載マクラーに依頼して、パラメータシートから 変数YAMLを作成するツールを作成
18Ansibleをチームで活用するまでの3ステップ1st 2nd 3rd
19チームへ展開・活用を開始◼チーム全体での取組みとして展開⚫メリット共有、効果のアピール⚫Ansibleの適応範囲をルール化⚫上司説得の殺し文句 (?)– 「品質向上・工数削減・ノウハウ蓄積」◼未習熟者でもAnsibleを活用できる仕組み作り⚫運用手順書の整備⚫管理ツール(Ansible Tower)の採用を検討3rd: Share with Team !!push& pull
20Ansibleを「チームで活用する」機能が満載のGUIツール◼WebUI◼テンプレート機能◼ユーザ管理、権限設定◼認証情報の安全な管理◼実行結果と履歴の確認◼SCMとの連携Ansible Towerとは?
211. やさしいUIと日本語対応2. 変数入力機能が充実3. SCM連携が便利4. Dynamic Inventory機能が充実5. REST APIで外部から操作可能Ansible Towerのお気に入りポイントを5つ他のシステムから連携させて、自動化エンジンとしても活用可能
22Ansible Towerのお気に入り画面
23本日のまとめPBのRole化PBの変数化PBの共有変数整理手順作成実行管理Try First!!Get CoreMembers!!Share withTeam !!効果のアピールメリット共有技術展開ルール化上司の理解
24demo
25「アレクサ、Ansible で Linux を 2台起動してー。」demoAWSLambdaAlexaSkill(自作)EchodotAnsibleTowerRHEL7ZabbixServerGitLabここまでの話とスタッフの方々を考慮すると、この構成となるべきところですが…
26「アレクサ、Ansible で Linux を 2台起動してー。」demoAWSLambdaAlexaSkill(自作)EchodotAWX CentOS7MIRACLEZBXGitHub本日はこの環境で動作しています
27実際の playbook は GitHub からご確認くださいdemohttps://github.com/issi176/ansible-demo/※本日お伝えしたコツ (step1, 2) を盛り込んだつもりでございます…
28Enjoy Ansible!ご清聴ありがとうございました!