今回は、サーバーの構成管理ツール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