構成管理AnsibleのGUIツール「AWX」を触ってみた(インストール、Playbook実行、通知設定)


今回は、サーバーの構成管理ツールAnsibleをGUIで利用できるAWXを触ってみたので、そのまとめを書いていきたいと思います。

項目としては、以下の順で説明していきたいと思います。

  • AWXの概略
  • AWXのインストール準備
  • AWXのインストール
  • AWXのPlaybook実行手順
  • AWXで実行したPlaybookの通知設定

Ansibleとは?

Ansibleとは、RedHat社が開発するOSS構成管理ツールです。

Ansibleは、サーバー構築の自動化をはじめ、ITインフラに関する様々な作業を自動化できるという特徴があります。

詳しくは公式サイトをご確認ください。

AnsibleにOSSのコミュニティ版と、RedHatサポートのエンタープライズ版があり、エンタープライズ版ではGUIでの操作可能なAnsible Towerが利用できます。

Ansibleファイルの記載方法

Ansibleは基本的に、2つのコードを記載すれば実行することができます。

1つ目はInventory fileで、管理対象の役割やホスト情報を記述するファイルになります。

2つ目はPlaybookで、管理対象の構成や構成の実行をする手順をYAML形式で記述するファイルになります。

(今回はAWXのについての記事のため、Ansibleファイルの記載方法等は割愛させていただきます。)

AWXとは?

AWXとは、Red Hat社が有償で提供しているAnsible TowerのOSS版です。

Ansible Towerと同様に、AnsibleをWeb GUI上もしくはAPIによって操作することができます。

AWXの機能は、Absible Towerとほぼ同様に利用できますが、セキュリティや安定性が劣ってしまうので、実際に運用する場合はAnsible Towerを使うといったことになります。

ただ今回は勉強用に挙動を確認する程度なので、AWXを使っていきます。

※AWXはPlaybookを作成するツールではなく、作成済みのPlaybookを指定して実行できるツールです。

AWXでできること

AWSでできることとしては、以下のようなことがあげられます。

リアルタイムの Playbook 出力

Playbookの実行をブラウザ上でリアルタイムに確認することができます。

Playbookをブラウザ上から実行可能

設定したPlaybookをブラウザ上から実行ができます。

ユーザー管理とアクセス制限

標準ユーザー・システム管理者・システム監査者でユーザー作成でき、権限を付与できます。また、組織・チーム・プロジェクト・インベントリ単位などでアクセス権限管理が可能です。

履歴管理

ユーザーが実行・変更した履歴がジョブに保存され、閲覧・管理ができます。

通知機能

メール・Slack・Webhookなどを利用した通知ができます。

バックアップとリストア

必要に応じてインスタンスをバックアップしたり、複製することが可能です。(AWXの場合は、DockerコマンドでPostgresのダンプファイルを作成することになります)

AWXのインストール準備

次にAWXをインストールするための準備として、各パッケージをインストールしていきます。

実行環境

  • CentOS7.8

Docker CEインストール

AWXはコンテナで構成されているため、Dockerをインストールする必要があります。

そのため無償版のDockerである、Docker CE(コミュニティエディション)をインストールしていきます。

[root@awx ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
[root@awx ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
[root@awx ~]# yum install -y docker-ce docker-ce-cli containerd.io

docker-pyインストール

続いて、docker-py(pythonでdockerコマンド等が記述できるパッケージ)をインストールします。

[root@awx ~]# yum -y install epel-release
[root@awx ~]# yum -y install python-pip

[root@awx ~]# pip install docker

[root@awx ~]# systemctl enable docker
[root@awx ~]# systemctl start docker

Ansibleインストール

続いて、Ansibleをyumでインストールします。

[root@awx ~]# yum -y install ansible

Gitインストール

GitはCentOS7.8でデフォルトでインストールされていますが、実際にインストール済みか確認します。

[root@awx ~]# yum info git 

Node.js、npm インストール

続いてNode.jsをインストールします。
Node.jsをインストールするとnpmも同時にインストールされます。

[root@awx ~]# curl -sL https://rpm.nodesource.com/setup_8.x | bash -
[root@awx ~]# yum install -y nodejs
[root@awx ~]# yum -y install gcc-c++ make

npmもインストールされていることも確認します。

[root@awx ~]# npm -v

AWXインストール

AWX のインストールは、GitHubにあるAnsibleのPlaybookから実行します。

リポジトリをclone

[root@awx ~]# git clone https://github.com/ansible/awx

inventoryを書き換え

対象サーバーを記述するinventoryファイルを、AWXを構築するホストサーバーのIPに変更します。

またpython3をインストールしているため、Inventoryファイルにpython3の環境変数を通すように書き換えます。

[root@awx ~]# cd awx/installer/
[root@awx installer]# vi inventory

#localhost ansible_connection=local ansible_python_interpreter="/usr/bin/env python"
ホストIP ansible_connection=local ansible_python_interpreter="/usr/bin/python3"

playbookの実行

AnsibleのPlaybookの実行をするコマンドを打ち、AWXをインストールします。

[root@awx ~]# ansible-playbook -i inventory install.yml

playbookの実行が完了したら、docker ps -a コマンドで、awx_task、awx_web、awx_postgres、awx_redisのコンテナが立ち上がっていることを確認します。

コンテナが立ち上がっていることを確認したら、AWXサーバーのホストのIPを入力してAWXのWebUIが立ち上がるか確認していきます。(デフォルトでポートは80番)

その後、デフォルトで設定されているユーザーID:admin、パスワード:passwordを入力してログインします。

無事ログイン出来たらAWXのインストールは完了です。

AWXからPlaybook実行

次にAWXサーバーから、対象サーバーにPlaybookを実行する手順についてまとめていきます。

今回はGitLabのProjectにあるAnsible構成ファイルをAWXサーバーにクローンして、そのAnsible構成ファイルのPlayboookを対象サーバーに実行します。

設定手順としては、

AWXサーバーとGitLabサーバーのssh公開鍵認証の設定

AWXサーバーにGitLabのProjectをクローン

AWXサーバーと対象サーバーのssh公開鍵認証の設定

AWXサーバーにインベントリーを設定

AWXサーバーでテンプレート(Playbookのための設定)を作成

テンプレートを実行

といった流れになります。

AWXサーバーとGitLabサーバーのssh公開鍵認証の設定

まず、AWXを構築したサーバーで、SSHキーペア(公開鍵と秘密鍵)を作成します。

[root@awx ~]# cd ~/.ssh
[root@awx .ssh]# ssh-keygen -t rsa -f awx_rsa
[root@awx ~]# cd ~/.ssh
[root@awx .ssh]# cat gitlab_rsa.pub
内容を確認

続いてGitLabのSSH Keyというタブを開き、先ほど作成した公開鍵(gitlab_rsa.pub)の中身を貼り付けます。

名前は適当なものをつけてください。

また実際にAWXサーバーから、GitLabのサーバーにsshログインできることを確認してください。

[root@awx ~]# ssh ユーザー名@GitLabサーバのIPアドレス -i ~/.ssh/gitlab_rsa

ssh接続が確認出来たらAWXの認証情報をクリックをし、今回作成した秘密鍵の情報をSSH秘密鍵の欄に貼り付けます。

また、ここでは名前をmy-gitlab、組織をDefault、認証情報タイプをソースコントロールにしています。

ユーザー名やパスワードはGitLabのsshログイン時のものを指定し、秘密鍵のパスワードはSSHキーペアを作成した際に登録していたら、入力して保存を押してください。

AWXサーバーにGitLabのProjectをクローン

次に、GitLabのProjectをクローンするための設定を行います。

まず、プロジェクトタブをクリックし、情報を入力していきます。

ここでは名前をansible-test-lamp、組織をDefault、SCMタイプ(バージョン管理タイプ)をGitとしています。

ソース詳細のSCM URLにはGitLabのProject情報を、SCM認証情報には先ほど設定したmy-gitlabを指定します。

保存を押すと自動的にgit cloneが始まり、先ほど登録したプロジェクトの名前の左のポイントが緑になれば、無事クローンの成功です。

AWXサーバーと対象サーバーのssh公開鍵認証の設定

次にAWXサーバーからPlaybookを実行するための、対象サーバーの設定を行います。

ここでもAWXサーバーとGitLabサーバーと同様にキーペアを作成し、対象サーバーにscpコマンドで公開鍵を送ります。

[root@awx ~]# cd ~/.ssh
[root@awx .ssh]# ssh-keygen -t rsa -f awx_rsa
[root@awx ~]# cd ~/.ssh
[root@awx .ssh]# scp ユーザー名@対象サーバーのホスト名:~/.ssh/ target1_rsa.pub

実際にAWXサーバーから、対象サーバーにsshログインできることを確認してください。

[root@awx ~]# ssh ユーザー名@GitLabサーバのIPアドレス -i ~/.ssh/gitlab_rsa

続いても同様に、AWXの認証情報をクリックをし、今回作成した秘密鍵の情報をSSH秘密鍵の欄に貼り付けます。

ここでは名前をtarget-server1、組織をDefault、認証情報タイプをマシンにしています。

ユーザー名やパスワードは対象サーバーへのsshログイン時のものを指定し、秘密鍵のパスワードはSSHキーペアを作成した際に登録していたら、入力してください。

AWXサーバーにインベントリーを設定

続いて、インベントリー(対象サーバー)の登録を行います。

新規インベントリーを作成し、名前と組織を選択します。

まず詳細のタブをクリックしここでは、名前をansible-targets、組織をDefaultに設定しています。

次にホストのタブをクリックし、ホストの情報として対象サーバーの設定を行います。

ホスト名は対象サーバーのIPアドレスを記載します。

AWXサーバーでテンプレート(Playbookのための設定)を作成

続いてテンプレートという、ジョブ(Playbook)を実行するための情報を登録します。

このテンプレートで先ほど設定した、インベントリー(ansible-targets)、プロジェクト(ansible-test-lamp)、Playbook(クローンしたリポジトリのplaybookであるsite.yml)を選択します。

名前はansible-lamp-template1とし、ジョブタイプはチェックというテスト実行にしています。

保存を押したら、Playbookを実行するための準備は完了です。

設定したplaybookの実行

テンプレートタブから先ほど設定したansible-lamp-template1のロケットアイコンをクリックし、Playbookを実行します。

実行結果が以下のように成功と表示せれたら、無事Playbookの実行は完了です。

Playbookの結果の通知設定

最後に、Playbookの通知設定を、MicorosoftTeamsに設定します。

Teamsでチームを作り、コネクタから Incoming Webhookを選択。

ここから、通知のためのwebhookurlを取得します。

次にAWXに移って通知タブを選択し、通知テンプレートにwebhookurlの入力とタイプをMattermostに選択します。

そして、今回通知したいテンプレートansible-lamp-template1の編集から通知タブをクリックします。

先ほど設定したのteamsという通知設定の項目で、成功にチェックをいれます。

テンプレートのジョブを実行し、無事成功したら以下のように通知されます。

これで、通知の設定は完了です。

参考URL

https://www.redhat.com/ja/technologies/management/ansible
https://www.redhat.com/ja/resources/awx-and-ansible-tower-datasheet
https://qiita.com/matchpon23/items/7442632bd23b3cf0554e
https://blog.1q77.com/2018/03/awx/
https://qiita.com/tonishy/items/bda02856ccd6d7c1c4b3
https://qiita.com/comefigo/items/8ea716f8cf2510a9c15e
https://qiita.com/saito_hideki/items/e19f39f792eb7d0e720c
https://qiita.com/int_sorarinu/items/97cfe4374f5af30f9b5a
https://qiita.com/hijiri0404/items/19db3b05f30571653876
https://qiita.com/redamoon/items/07e445d1fce360cb5fa3
https://www.scsk.jp/product/oss/tec_guide/ansible/1_ansible3_1.html
https://qiita.com/comefigo/items/8ea716f8cf2510a9c15e
https://qiita.com/nnstt1/items/0adaf70eb5568a291269