Ansible Towerによる運用管理の自動化 (導入編)

記事タイトルとURLをコピーする

MSP課の平(@mana_cat )です。夏休み企画第三弾のエントリーはAnsible Towerの紹介です。
Red Hat社の製品、Ansible Towerを検証しましたので数回に分けて紹介します。

今回は以下の二点をご紹介します。

  1. Ansible Tower 8つの特長
  2. Ansible Tower のインストール手順

(1) 構成管理ツール Ansible Towerとは?

Ansible Towerとは、Red Hat社が提供する運用管理の自動化を支援するための製品です。
Playbook によるタスクの自動実行により手作業によるミスをなくし、作業者の負担を減らすことができます。また、権限管理により権限の適切な分離と、実行履歴の可視化も可能となります。

生産性の向上に貢献し、運用自動化によるエンジニアの働き方の改善にも繋がるであろう製品でしょう。

Ansible Tower 8つの特長

Ansible Towerには、生産性を向上させるさまざまな機能がありますが、今回は8つの特長をピックアップして紹介します。

(1) ユーザー管理 とアクセス制御
  • `標準ユーザー`・ `システム管理者`・ `システム監査者`でユーザー作成ができ、役割別に適切な権限を付与できます
  • 組織・チーム・プロジェクト・インベントリ単位などでアクセス権限管理が可能です
  • ACL、LDAPとの連携も可能です
(2) 履歴管理・監査機能
ユーザーの実行・変更履歴が閲覧・管理できます。これにより、誰が、いつ、何を実行したのか可視化できます。
(3) 管理機能・通知機能の充実
  • Playbookをブラウザ上からクリックして実行できます
  • 通知機能ではメールだけでなく、Slack、Twilio、Pagerduty、HipChat、Webhookなどにも対応しています
(4) 動的インベントリ対応
AWSのほか、AzureやOpenStackなどの環境のホスト情報を同期できます。
例えば、AWS と、自社で構築したOpenStackをどちらも管理したい時や、複数のクラウド環境がある場合など、マルチクラウドの構成管理にも最適です。
(5) スキャンジョブの実行
インベントリのOSに対してスキャンジョブを実行し、パッケージのバージョンやステータスなどの情報を収集することができます。
システムトラッキング機能で、スキャンジョブの比較ができます。
(6) スケジューリング機能
Playbookの実行タイミングをスケジューリングできます。
(7) ワークフローテンプレートの作成
ワークフローエディターを使用し、常時・成功時・失敗時のフローを作成することができます。
たとえば、通知機能と連携して Playbook実行成功時にSlackで通知、失敗時にTwilioで電話などのワークフローを組むこともできます。
(8) RESTful API対応
Ansible Tower画面での操作でできることは、RESTful API経由で操作できます。
個人的にはTower CLIを活用しています
(Tower CLIについては別エントリーで紹介する予定です)。

公式ドキュメントの充実

また、Ansible Towerは現在のところ英語版のみの提供ですが公式ドキュメントが充実しています。分からない事があったらまずは公式ドキュメントを読んで自己解決することができます。

それでは、実際にAnsible Towerをインストールしていきましょう。

(2) Ansible Tower のインストール

今回は、Amazon EC2 のインスタンスに Ansible Towerをインストールする手順をご紹介します。セットアップに掛かる時間は30分程度です。ぜひ、Amazon EC2でチャレンジしてみましょう。

評価版の申込み

事前準備として、Ansible Towerを30日間フル機能をお試しできるエンタープライズキーを以下公式ページより申請します。ちなみに、エンタープライズキーが無くても、10ノード以下は無料で使えます。

HVM(完全仮想化)インスタンス上での構築

次に、Amazon EC2でインスタンスを用意します。Ansible公式で用意されているトライアルのAnsible Tower AMIですが、AMIのタイプがPV(準仮想化)のみのご用意のようです。HVM(完全仮想化)ご希望の方に、今回はHVMのインストール手順をご紹介します。
(非公式な方法になりますが、PVからHVMへ変換する手段もありますが、まずは正攻法な手順で一からインストールする手順をご紹介しています)

Ansible Towerのインストール要件

今回はAmazon EC2 にAnsible Towerをインストールする手順を紹介します。ポイントとして、Ansible Towerは Playbookの使用が必須のため、Towerをインストールする前にベースとなる Ansible 単体の最新安定バージョンをインストールします。
(2017年7月10日に最新版のAnsible Tower 3.1.4がリリースされていますが、今回はバージョン3.13のインストール手順を紹介しています)

必須項目 内容
サポートOS Red Hat Enterprise Linux 7.2 以降のバージョン (64bit必須)
最小メモリー 2GB RAM
同時並列ジョブ 100台に実行する場合、100台あたり追加で 4GB RAM 必要
ディスク領域(インストール時) 20GB (/var/に20GB以上を占有)
データ領域
(トラッキング用)
1年間、1000ホストを毎日スキャンすると仮定した場合 48 GB *1
Amazon EC2 スペック m3.medium またはそれ以上のインスタンス
100台以上を管理する場合:m3.xlarge 以上
操作用のブラウザー Mozilla Firefox または Google Chrome

今回用意した環境

今回用意したEC2の環境は以下の通りとなります。

必須項目 内容
Amazon EC2インスタンスサイズ m3.medium
OS RHEL 7.3 64 bit (HVM)
ルートボリューム 100GB
  • セキュリティグループの設定で、端末からインスタンスの接続時に使用するポート 443, 22 を許可します

インストール手順

インストール前の準備

以下の事前準備を行います。

  • /etc/hosts は正しく設定すること
  • インストールに必要なリポジトリを有効化する(後述する手順の通り)
  • yum updateコマンドの実行

ホスト名の設定

必須作業として、ホスト名を正しく設定します。

$ sudo hostnamectl set-hostname tower.example.com --static
$ sudo vi /etc/hosts
192.168.10.100 tower.example.com

EPELリポジトリの有効化

Ansibleをインストール時、EPEL リポジトリを使用するため以下を実行して有効化します。

※RHEL 7.4から、EPEL リポジトリは使用しなくなる予定です。次の手順のextrasのみの手順で対応できます。

$ sudo yum install http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

extrasリポジトリの有効化

Ansible Tower インストール時に以下のリポジトリが必須のため、yum-config-managerで有効化します。

$ sudo  yum-config-manager --enable rhui-REGION-rhel-server-extras

yum updateの実行とサーバー再起動

インストール前にyum update を実施し、パッケージを最新の状態に保ちます。

$ sudo yum update
$ sudo reboot

AnsibleAnsible Tower のインストール

Ansibleのインストール

Ansible単体をyumコマンドでインストールします。
また、EC2のRHEL7では標準でwgetがインストールされいないので、このタイミングでインストールします。

$ sudo yum install ansible wget
Installed:
ansible.noarch 0:2.3.0.0-3.el7

Ansible Tower のインストール

wget コマンドでAnsible のパッケージをダウンロードし、パッケージを展開します。
※2017年7月10日に最新版の3.1.4がリリースされています。最新版ご希望の方はパッケージダウンロードURLに http://releases.ansible.com/ansible-tower/setup/ansible-tower-setup-latest.tar.gz を指定します。

$ wget http://releases.ansible.com/ansible-tower/setup/ansible-tower-setup-3.1.3.tar.gz
$ tar xvzf ansible-tower-setup-3.1.3.tar.gz
$ cd ansible-tower-setup-3.1.3

Inventoryファイルを編集する

Inventoryファイルを編集し、パスワードを設定します。

$ vi inventory
admin_password='パスワードを設定'
pg_password='パスワードを設定'
rabbitmq_password='パスワードを設定'

パスワードを保存したら以下の手順でセットアップスクリプトを実行します。

$ sudo ./setup.sh
  • もし、インストール要件が満たされていない場合はエラーメッセージが表示され、Ansible Towerのインストールは行われずスクリプトは終了します。どこが失敗しているのか、エラーになっているのかはログを見て確認します
  • インストール完了までに時間がかかるので、少し待ちます
  • The setup process completed successfully.と表示されたらインストール成功です

Ansible Tower admin ユーザーのパスワードを変更する手順については以下になります。

$ sudo  tower-manage changepassword admin
Changing password for user 'admin'
Password:パスワードを入力
Password (again):パスワードを再入力
Password changed successfully for user 'admin'

Ansible Tower管理画面の表示

ChromeまたはFirefoxブラウザでAnsible Tower管理ページにアクセスします。

ログイン画面で ユーザー名 admin と、前の手順で設定した admin のパスワードを入力します。

Ansible Towerのライセンスキーをアップロード後、使用許諾契約書に同意し、送信ボタンを押します。

なお、本エントリーの中盤でご紹介したとおり、30日間フル機能をお試しできるエンタープライズキーは以下で取得できます。(エンタープライズキーが無くても、10ノード以下は無料で使えます)

これで、Ansible Towerにログインできるようになりました。
次回エントリーは実際にAnsible Towerを活用して、インベントリの登録やPlaybookの実行、スケジューリングを行っていきます。

*1:1年間、毎日スキャンをスケジュールすると仮定した場合
(hosts = 1,000) * (number of scans = 365) * ((average module fact size = 100 kb) * (number of modules = 4) / 3) = 48 GB