More Related Content Similar to IT Automation with OpenStack and Ansible/AWX (20) More from Hideki Saito (14) IT Automation with OpenStack and Ansible/AWX1. IT Automation with OpenStack and Ansible/AWX
~ Move to the next step of IT automation ~
Hideki Saito
Software Maintenance Engineer for Ansible@Red Hat K.K.
2018-08-02
2. Red Hat / Ansible2
• 氏名: 齊藤 秀喜 (さいとう ひでき)
• TwitterID: @saito_hideki
• 所属: Ansible Support Team / Red Hat K.K.
• 仕事: Software Maintenance Engineer
• 趣味: Ansible / Ansible Tower / AWX
• OpenStack Days Tokyo事務局 / 撮影班副長
自己紹介
Ansible方面からきました
怪しい者ではありません
3. Red Hat / Ansible3
Ansibleを利用した自動化を管理するコントローラ "AWX" を紹介します。
本日のテーマ
本日お話すること:
1. AWXで実現する一歩進んだ自動化
2. AWXの仕組み
3. OpenStackとの連携
4. デモ (AWX on OpenShift)
5. Red Hat / Ansible5
手作業で行っていたシステム運用の自動化を実現するためのツールです。
Ansibleの特徴を表す3つのキーワード :
1. SIMPLE
๏ 手順書感覚で自動化するオペレーションを記述することができる
๏ 最低限必要なのはInventoryファイルとPlaybookファイルのみ
2. POWERFUL
๏ 同時に複数台のターゲットを操作することができる
๏ モジュールを利用することで、さまざまな操作を自動化できる
3. AGENTLESS
๏ ターゲット側でエージェントを起動させることなく遠隔操作できる
Ansibleで実現できること
6. Red Hat / Ansible
Ansibleの仕組み
Ansibleが管理対象となるリモートホストを操作する方法は大きく3つ。
公式ドキュメントのUsing Ansible(https://goo.gl/bLvNFq)で解説されています。
6
コントロールホスト
ansibleコマンド
ansible-playbookコマンド
(1)SSH
(2)WinRM
(3)API
ターゲットホスト
(2)SSH / WinRM を利用する場合はターゲット上に実行可能プログラムを転送
(1)モジュールから生成した実行可能なプログラムコード
(2)APIを利用するモジュールの場合は
コントローラ上で実行
(3)SSH / WinRM を利用する場合は
ターゲットホスト上で実行
7. Red Hat / Ansible7
Ansibleの仕組み
ネットワーク機器とITサーバでは管理の仕組みが違います。
8. Red Hat / Ansible8
目的、利用者、利用方法を5W1Hで表現すると…
Ansibleで実現する自動化
WHY ITインフラの構成管理業務の品質向上とオペレータの負荷の軽減をめざして
WHO オペレータ自身が
WHEN 日常業務として
WHERE さまざまなシステムの構成要素に対して
WHAT 実施する作業を共通の手法でコード化する
HOW 自動化を共通のツールを利用して実現する
10. Red Hat / Ansible10
Ansibleは、シンプルであることを重要視しているために不足している機能があり
ます。こんな機能があったらいいのになぁ...
Ansibleで始めた自動化の次の一手
1. いつ・誰が・どこで・どのようなPlaybookを実行したのか知りたい!
2. Playbookの実行結果をまとめて管理しておきたい!
3. そのPlaybook古くない?�指定されたバージョンのPlaybookを利用させたい!
4. 複数のPlaybookをワークフローのように実行したいんだけど...A->B->C...
5. ターゲットホストの認証情報を一元管理してたい!
6. コントロールホストのキャパシティをちゃんと管理したい...OOM killerさんが大暴
れしてるの...
7. 他のシステムと連携させたいけどAPIがない...だってただのコマンドだもの...
などなど...自動化を進める上で、このような課題が見えてきます。
11. Red Hat / Ansible11
AWXが提供する主な機能は以下の通りです。
AWXが補完する主な機能
1. WebUI / RESTful API / Callback URL 機能
2. ユーザ管理機能(Active DirectoryやGoogle OAuth2などと連携可能)
3. ターゲットホストの認証情報を一元管理するCredential機能
4. AWS / GCP / Azure / OpenStack などと連携可能なDynamic Inventory機能
5. Github / Gitlab などの外部SCM上のPlaybookを取得するための連携機能
6. 複数のジョブ(Playbook)をワークフローとして実行する機能
7. ジョブやワークフローを指定の日時で実行するスケジュール実行機能
8. ジョブの実行結果をIRCやSlackなどに送信する機能
9. ログをlogstashやsplunkなどの外部システムに転送する機能
10.AWXサービスをクラスタ化(HAではなくマルチノード構成)する機能
12. Red Hat / Ansible12
旧Ansible, Inc (2015年に Red Hat が買収)が、商用ソフトウェアとして提供し
ている Ansible Tower のアップストリーム版で、Apache v2ライセンスに基づい
てOSSとして開発が進められています。
AWXの位置付け
分類 アップストリーム エンタープライズ
(レッドハットが提供&サポート)
自動化プラットフォーム
(GUI/REST API/
権限管理/
実行履歴管理など)
AWX Project Ansible Tower
動作エンジン
(コマンド等のコア部分、
モジュール、プラグインなど)
Ansible Project Ansible Engine
13. Red Hat / Ansible13
AWXに関する情報は、以下のサイトから入手することができます。
ユーザガイドや管理者ガイドなどのドキュメント類は、AWX向けとしては存在しません。
Enterprise版であるAnsible Towerのものを参照してください。
★Source Code
➡ https://github.com/ansible/awx
★Install Guide
➡ https://github.com/ansible/awx/blob/devel/INSTALL.md
★User Guide
• https://docs.ansible.com/ansible-tower/latest/html/userguide/index.html
★Administration Guide
➡ https://docs.ansible.com/ansible-tower/latest/html/administration/index.html
★API Guide
➡ https://docs.ansible.com/ansible-tower/latest/html/towerapi/index.html
AWXに関する情報
14. Red Hat / Ansible14
2018-08-16にv1.0.0がリリースされました。
最新版(2018-07-22時点)は、2018-04-28にリリースさらたv1.0.6です。
AWXのリリースタイムライン
’2017-08-16
v1.0.0
v1.0.1
v1.0.2
v1.0.3
v1.0.4
v1.0.5
v1.0.6
’2017-10-11
’2017-12-14
’2018-02-02
’2018-02-21
’2018-03-27
’2018-04-28
15. Red Hat / Ansible15
AWXリポジトリをクローンしてから、Playbookを利用してインストール(*)
*) 事前にAnsibleのインストールが必要です
AWXをインストールする
RHEL7系のOSの場合:
# yum install docker python-docker-py
# systemctl enable docker
# systemctl start docker
# git clone https://github.com/ansible/awx.git
# cd awx/installer
# ansible-playbook -i inventory install.yml
16. Red Hat / Ansible16
AWXは、コンテナ化された5つのサービスから構成されています。
AWXコンポーネントの構成
Infrastructure
Host OS
Docker Engine
Bins/Libs Bins/Libs Bins/Libs Bins/Libs Bins/Libs
awx-web awx-task awx-memcached awx-rabbit postgresql
17. Red Hat / Ansible17
モダンなWeb Dashboardを利用して操作することができます。
AWXを利用する
19. Red Hat / Ansible19
AWXでオペレーションを自動化する
AWXで自動化を実現するための機能要素は以下の通りです。
20. Red Hat / Ansible20
PlaybookをもとにしてJob Templateを作り、これをJobとして実行します。
AWXの機能要素
機能要素 概要
Organization 全ての機能要素を収容するグループ
Project Playbookを収容するディレクトリ
Credential 操作対象となるホストの認証情報(SSHユーザ・パスワード等)
Inventory 操作対象となるホスト及びホストをグループ化したリスト
Job Template Project(Playbook)/Credential/Inventoryから構成されるジョブ
Workflow 複数のJob Templateから作られたワークフロー
Job Job Template / Workflowの実行単位
User Towerの各機能要素を操作する権限を付与されたユーザ
Team 複数のTeamを所属させたチーム。User同様に権限を付与可能
21. Red Hat / Ansible
Projects
Job templates
Notifications
Organizations
Inventories
Users
21
AWXのオブジェクトモデル
Teams
Groups
Hosts
Inventory
Sources
Workflow Job
templates
Inventory
Scripts
Inventory
Smart
Inventory
Schedules
Instance Groups
Credential
Types
Credentials
22. Red Hat / Ansible
FinishedLaunch "Job template"Grant permissions to "User"
Create "Organization"
Add "User" to "Team"
Create "Host" in "Inventory"
Create "Project"
Create "Team"
Create "Inventory"
Add "Host" to "Group"
Setting up "Job template"
22
基本的な操作の全体の流れ
Create "User"
Create "Credential"
Create "Group" in
"Inventory"
Create "Job template"
23. Red Hat / Ansible23
Organizationを作成する。
基本的な操作の流れ(1)
AWXの管理情報は
Organization単位で管理される
24. Red Hat / Ansible24
Userを作成する。
基本的な操作の流れ(2)
25. Red Hat / Ansible25
AWXにログインして操作するためのユーザには、ユーザタイプの中から1つを選択
して割り当てることができます。
基本的な操作の流れ(2) - ユーザの種類
ユーザタイプ 概要
Normal User
(標準ユーザ)
一般ユーザとして、AWXのさまざまなオブジェクト(Project / Credential /
Inventory / Job template など)に設定された権限にしたがって操作を実行する。
System Auditor
(システム監査者)
AWXシステムの監査を目的として、全てのオブジェクトに対する読み込み権限をデフ
ォルト状態で持っている。
System Administrator
(システム管理者)
AWXシステム管理者として、全てのオブジェクトの管理者権限を持っている。
26. Red Hat / Ansible26
Teamを作成する。
基本的な操作の流れ(3)
27. Red Hat / Ansible27
UserをTeamに所属させて、適切な役割を設定する。
基本的な操作の流れ(4)
28. Red Hat / Ansible28
Credentialを作成する
基本的な操作の流れ(5)
29. Red Hat / Ansible29
現時点(v1.0.6)でプリセットされている認証情報タイプは以下の通りです。
基本的な操作の流れ(5) - 認証情報の種類
認証情報 用途
Amazon Web Services AWSとの連携に必要な認証情報(ACCESS_KEY/SECRET_KEY/STS_TOKEN)
Ansible Tower Ansibleのモジュールから利用できるTower/AWXの認証情報
Google Compute Engine GCEとの連携に必要な認証情報(サービス用アカウントのEmailアドレス等)
Insights Insightsと連携するための認証情報(USERNAME/PASSWORD)
Machine (必須) SSH/WinRMでターゲットホストに接続するために利用する認証情報
Microsoft Azure Resource Manager Azure Resource Managerとの連携に必要な認証情報(SUBSCRIPTION_ID等)
Network Ansibleから操作可能なネットワーク機器への接続に利用する認証情報
OpenStack OpenStackの認証情報(OS_USERNAME/OS_PASSWORD/OS_AUTH_URL等)
Red Hat Cloud Forms CloudFormsの認証情報(URL/USERNAME/PASSWORD)
Red Hat Satellite 6 Satellite 6.3以降との連携するための認証情報(URL/USERNAME/PASSWORD)
Red Hat Virtualization RHEV(Ovirt)と連携するための認証情報(URL/USERNAME/PASSWORD)
Souce Control Github/Gitlab等のSCMと連携するための認証情報(USERNAME/PASSWORD等)
Vault Ansible Vaultを利用するために必要な認証情報(PASSWORD)
VMware vCenter vCenterとの連携に必要な認証情報(HOST/USERNAME/PASSWORD)
30. Red Hat / Ansible30
Inventoryを作成する
基本的な操作の流れ(6)
31. Red Hat / Ansible31
Inventory内にホストを作成する
基本的な操作の流れ(7)
32. Red Hat / Ansible32
Inventory内にグループを作成する。
基本的な操作の流れ(8)
33. Red Hat / Ansible33
Inventory内に作成したグループにホストを登録する。
基本的な操作の流れ(9)
34. Red Hat / Ansible34
AnsibleのInventoryファイルと同様に、AWXのInventoryにはHostとGroupをを
定義します。varsパラメータも定義可能です。
基本的な操作の流れ(9) - GroupとHost
Inventory
{vars}
host-A
{vars}
host-B
{vars}
group-A
{vars}
group-B
{vars}
host-C
{vars}
35. Red Hat / Ansible35
Projectを作成する。
基本的な操作の流れ(10)
Playbookが配置されているGithub/Gitlabなどの
外部SCMのリポジトリを指定する
36. Red Hat / Ansible36
Job templateを作成する。
基本的な操作の流れ(11)
Projectに指定したリポジトリ内の
Playbookを指定する
37. Red Hat / Ansible37
Project / Credential / Inventory / Job Template に対する権限を設定する。
基本的な操作の流れ(12)
38. Red Hat / Ansible38
AnsibleのInventoryファイルと同様に、AWXのInventoryにはHostとGroupをを
定義します。varsパラメータも定義可能です。
基本的な操作の流れ(12) - 権限(Role)
オブジェクト 権限
Project
• Admin => 使用権限 / 編集権限 / SCMのリポジトリの同期権限
• Use => 使用権限
• Update => SCMリポジトリの同期権限
•
Credential
• Admin => 使用権限 / 編集権限
• Use => 使用権限
Inventory
• Admin => 使用権限 / Dynamic Inventoryの同期権限 / Ad Hocコマンド実行権
限
• Use => 使用権限
• Update => Dynamic Inventoryの同期権限
• Ad Hoc => Ad Hocコマンド実行権限
Job template
• Admin => 実行権限 / 編集権限
• Execute => 実行権限
39. Red Hat / Ansible
Project-A
Credential-A
Inventory-A
Job template-A
role:use
role:use
role:use
role:execute
39
Project / Credential / Inventory / Job template などのAWXの各オブジェ
クトに対する操作権限(role)は、ユーザ毎に割り当てられますが、これを複数のユー
ザを所属させたチームに対して行うことで一括設定が可能です。
基本的な操作の流れ(12) - 権限の割当
Team-A
foo
bar
baz
40. Red Hat / Ansible40
Job Templateを実行する。
基本的な操作の流れ(13)
41. Red Hat / Ansible41
Jobの実行結果を確認する。
基本的な操作の流れ(14)
ansible-playbookコマンドの実行結果は
Live Eventとしてリアルタイム出力
ansible-playbookコマンドの実行結果を
テキストファイルとしてダウンロード可能
42. Red Hat / Ansible42
Web Dashboardによる操作だけでなく、M2MインターフェイスとなるAPIを提供
しています。
このAPIを利用したコマンドラインインターフェイス(tower-cli)も、オープンソース
プロジェクトとして提供されています。
RESTful API / CLIを利用する
• RESTful API
- https://<AWX>/api/v2/ でAPIにアクセス可能
- 利用方法はAPIガイドを参照してください
- https://docs.ansible.com/ansible-tower/latest/html/towerapi/index.html
• tower-cli
- AWXが提供するAPIを利用したAWXのコマンドラインインターフェイス
- ソースコード
- https://github.com/ansible/tower-cli/
- ドキュメント
- https://docs.ansible.com/ansible-tower/latest/html/towerapi/tower_cli.html
44. Red Hat / Ansible44
主要な機能は、以下のようなOSSプロダクトを利用して実現しています。
AWXを支える技術要素
OSS 役割
Docker AWXの各サービスをコンテナとして起動する
Django WebUI / RESTful APIを提供するためのフレームワーク
Nginx WebUI / RESTful APIを提供するためのフロントエンドサービス
PostgreSQL AWXの設定情報や、ジョブの実行結果を格納するデータベース
RabbitMQ ジョブスケジューラが利用するメッセージキューを管理する
Celery RabbitMQと連携するAMQPワーカー
Supervisord Celery / uwsgiなどのサービスをデーモンとして起動する
Ansible AWXが実行するジョブのエンジン部分を担う
45. Red Hat / Ansible
クラスタ構成の場合は のコンポーネントが新たに起動してスケールアウトを実現
45
AWXコンポーネントの構成
Infrastructure
Host OS
Docker Engine
Bins/Libs Bins/Libs Bins/Libs Bins/Libs Bins/Libs
awx-web awx-task awx-memcached awx-rabbit postgresql
46. Red Hat / Ansible
46
AWXの各コンテナが担うサービスコンポーネントは以下の通りです。
AWXのアーキテクチャ
awx-web
awx-memcached
awx-rabbit
awx-task
postgresql
スケールアウト可能
(*)現時点ではスケールダウン
には手間がかかります
47. Red Hat / Ansible47
awxのサービスを提供する各コンポーネントの役割は以下の通りです。
AWXコンテナの役割(1)
•awx-webコンテナ
- 利用者へのフロントエンドサービス(Web Dashboard / RESTful API)を提供
- Supervisordを利用してNginxとuwsgiを利用したフロントエンドサービスを起動
•awx-memcachedコンテナ
- AWXの他のコンポーネント向けにMemcachedサービスを提供
- ジョブの結果をLive EventでWebクライアントに提供したり、外部ロギングシステムに実行結果を
転送するために一時利用される
48. Red Hat / Ansible48
AWXコンテナの役割(2)
•awx-rabbitコンテナ
- フロントエンドから送られたAMQPメッセージをハンドリングするAMQPサービスを提供
- ジョブの起動やイベントの処理、バックグラウンドプロセス、WebSocketの処理に利用
- K8SやOpenShiftでawxサービスのpodを増やすと自動でRabbitMQクラスタに追加される
•awx-taskコンテナ(旧awx-celery)
- AWXの中枢として、awx-rabbitからメッセージを取得して、プロジェクトの管理やジョブの実行を
担う各サービスをSupervisordを利用して起動
- 自動化のエンジンとなるAnsible(ansible-playbookコマンド)は、このコンテナで実行される
- Ansibleの実行環境は、Pythonのvirtualenv上に配置(venv/ansible, venv/awx) されている
- Github / Gitlab などのSCMからチェックアウトしたPlaybookが配置される
•postgresqコンテナ
- AWXの設定情報を保存する構成管理データベース
- 全てのジョブの実行情報(Playbookの出力など)もデータベース上に保存される
49. Red Hat / Ansible49
ジョブ実行の流れ(概略)
1. API経由でジョブの実行リクエストを受信
2. rabbitmqのインスタンスグループのキューにメッセージ投入
3. リソースに空きのあるインスタンスでジョブ(Playbook)が起動
4. Playbookは、virtualenv:/var/lib/awx/venv/ansible/で起動(*1)
5. 各タスクのSTDOUTをCallback Pluginを利用してDBに書き込み
6. 各タスクのSTDOUTをwebsocket経由でlive eventとして送信
7. Playbookのfact_cacheをDBに書き込み(*2)
(*1) AWXは2つ(venv/ansible/, venv/awx/)のPython実行環境を持っています。
Playbookの実行に利用されるのは venv/ansible/ で、venv/awx/はAWXのシステム自体
が利用します。
(*2) Job templateで"Use Fact Cache"が有効化されている場合
50. Red Hat / Ansible50
ジョブ実行ホストの割り当て
複数のTowerホストをクラスタ構成することで、ジョブを実行するTowerホストの
グループ(インスタンスグループ)を構成することができます。
インスタンスグループを指定してジョブの実行や、プロジェクト・インベントリの更新
を実行することで、負荷を分散させることができます。
IG: tower IG: west IG: east
towerA
towerB
towerC
towerA
towerC
towerA
towerB
ジョブ
(1)
ジョブ
(2)
ジョブ
(3)
ジョブ
(4)
ジョブ
(5)
52. Red Hat / Ansible52
AWXで外部システムと連携
AWX
Authentication NotificationLogging
IaaS PaaS SCM
API Provisioning Callback
AWXは外部からAPI経由で操作可能。Job TemplateのProvisioning Callbacks
機能を有効化することで、外部からのジョブ起動も簡単に行えます。
53. Red Hat / Ansible53
OpenStack連携のパターン
(a) ジョブの適用対象となるOpenStack管理下の仮想マシンリストを自動作成する
(b) Ansibleのモジュールを利用してOpenStack上のリソースを管理する
(c) 仮想マシンからTowerのジョブをコールバックで起動する
AWXとOpenStackが連携させることで実現できる機能、大きく以下の3種類です。
54. Red Hat / Ansible
AWX
54
OpenStack連携方式-A
インベントリにホスト情報を登録する。
OpenStack
clouds.yml
(1) (2)
(3)
(4)
(1) 認証タイプ:OpenStackの認証情報からclouds.ymlを生成
(2) Dynamic Inventoryスクリプトから(1)で生成した
clouds.ymlを読み込み
(3) clouds.ymlにしたがってAPIリクエスト
(4) ホストリストを取得
インベントリ認証情報
55. Red Hat / Ansible55
OpenStack連携方式-A
OpenStack認証情報から生成される�clouds.yml は以下の通りです。
clouds:
devstack:
auth:
auth_url: "http://api.example.com:5000/v2.0/"
password: "********"
project_name: "admin"
username: "admin"
56. Red Hat / Ansible
AWX
56
OpenStack連携方式-B
OpenStack用の認証情報を利用して�os_*�モジュールを実行する。
OpenStack
clouds.yml
(1) (2)
(3)
(4)
(1) 認証タイプ:OpenStackの認証情報からclouds.ymlを生成
して実行環境の�OS_CLIENT_CONFIG_FILE�にパスを設定
(2) ジョブのタスクから(1)で生成したclouds.ymlを読み込む
(3) clouds.ymlにしたがってAPIリクエスト
ジョブ認証情報
57. Red Hat / Ansible57
OpenStack連携方式-B
OpenStack用の認証情報を利用して�os_*�モジュールを実行する。
---
- hosts: localhost
gather_facts: false
tasks:
- os_server_facts:
cloud: devstack
58. Red Hat / Ansible
AWX
58
OpenStack連携方式-C
OpenStack上の仮想マシンインスタンスからAWXのProvisioning Callback URL
にアクセスすることで、アクセス元の仮想マシンインスタンス自身に対してジョブを
実行する。
hostB
(1)
(1) ジョブテンプレートに設定されたProvisioning Callback URL
に、OpenStack管理下のhostBからアクセス
(2) (3) 連携方式-Bでインベントリのホスト情報を生成/更新
(4) インベントリにhostBが存在した場合はジョブを適用
ジョブインベントリ
hostA
hostB
...
hostN
OpenStack
(2)
(3)
(4)
60. Red Hat / Ansible60
デモ内容
1. OpenStackの認証情報の作成
2. OpenStackインベントリソースの作成
3. インベントリの同期
4. os_*モジュールの利用
62. Red Hat / Ansible62
まとめ
Ansibleは、シンプルで強力な自動化ツールです。しかし、シンプルであるために、あ
えて実装していない、さまざまな機能があります。
AWXは、Ansibleを自動化のエンジン部分として利用することで、自動化の根幹とな
るPlaybookなどの仕組みをシンプルなまま維持し、これに加えてモダンなWeb UIや
APIを提供することで、人だけではなく外部システムからも利用することを想定した機
能を補完しています。
みなさんも、AWXを利用して、Ansibleで実装してきた自動化をもう一歩進めてみま
せんか?