「Ansible Tower」は、有償なので「Ansible Semaphore」を AmazonLinuxにインストールしてみた

こんにちは、Advent Calendar9日目です。
みなさん、プロビジョニングツールは何を使用されていますか？ぼくは、Chefが多いです。
プロビジョニングツールって色々あり、Chef、Puppet、Itamaeなどあります。
今回は、その中でもAnsibleの統合管理版Ansible Semaphoreについて書いていきたいと思います。

## Ansible Semaphoreについて
Ansible Semaphoreは、Ansible Tower の OSS Alternativeです。
なので、Ansible Towerと違って無償で試すことが可能です。
 #Ansible Towerほどの機能はない
 #Ansible Towerは、10ノードまで無償（ただし、機能制限あり）

## 環境
InstanceType:t2.micro
OS:Amazon Linux AMI release 2016.09
DB:5.5.53-MariaDB

## インストール手順

それでは、Ansible Semaphoreのインストールを行っていきます。

### Install Git

```bash
$ yum -y install git
```

### Install Ansible

Ansibleをインストールします。

```bash
$ yum --enablerepo=epel install ansible
.
.
.
Complete!
```

バージョンを確認します。
インストールされていることがわかりますね。

```bash
$ ansible --version
ansible 2.2.0.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = Default w/o overrides
```

### Install MariaDB

MariaDBのPGP keyをインストールします。

```bash
$ rpm --import https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
```

リポジトリの設定を行います。

```bash
$ vim /etc/yum.repos.d/mariadb.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/5.5/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
```

MariaDBのインストールをします。

```bash
$ yum install -y MariaDB-server MariaDB-client
$ /etc/init.d/mysql start
Starting MySQL.161206 21:22:30 mysqld_safe Logging to '/var/lib/mysql/ip-172-31-62-59.err'.
. SUCCESS!
```

MariaDBにログインできましたね。

```bash
$ mysql -u root
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.53-MariaDB MariaDB Server

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> 
```

## Setup Database

Semaphore用のスキーマとユーザーを作成します。

```bash
MariaDB [(none)]> CREATE DATABASE semaphore;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> CREATE USER 'semaphore'@'localhost' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON semaphore.* TO 'semaphore'@'localhost' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)
```

## Install Ansible Semaphore

Playbook格納先を作成します。

```bash
$ mkdir /opt/semaphore
```

Semaphoreをインストールします。

```bash
$ wget https://github.com/ansible-semaphore/semaphore/releases/download/v2.0.4/semaphore_linux_amd64
$ sudo mv semaphore_linux_amd64 /usr/bin/semaphore
$ sudo chmod a+x /usr/bin/semaphore
```

## Setup Ansible Semaphore

対話型で設定を行っていきます。

```bash
$ sudo semaphore -setup
 Hello! You will now be guided through a setup to:

 1. Set up configuration for a MySQL/MariaDB database
 2. Set up a path for your playbooks (auto-created)
 3. Run database Migrations
 4. Set up initial seamphore user & password

 > DB Hostname (default 127.0.0.1:3306): 
 > DB User (default root): semaphore
 > DB Password: password
 > DB Name (default semaphore): semaphore
 > Playbook path: /opt/semaphore

 Generated configuration:
 {
 	"mysql": {
 		"host": "127.0.0.1:3306",
 		"user": "semaphore",
 		"pass": "password",
 		"name": "semaphore"
 	},
 	"port": "",
 	"bugsnag_key": "",
 	"tmp_path": "/opt/semaphore",
 	"cookie_hash": "tNSwJYsXQdXrbXLzymmhKBqba2jz8lbCEolGOb2emZw=",
 	"cookie_encryption": "LChepvmWvO6TDLrex4UVUOTfkrZbTfkMlI6PuXc5y1o="
 }

 > Is this correct? (yes/no): yes
 Running: mkdir -p /opt/semaphore..
 Configuration written to /opt/semaphore/semaphore_config.json..
 Pinging database..

 Running DB Migrations..
Creating migrations table
Executing migration v0.0.0 (at 2016-12-06 21:53:18.568392328 +0900 JST)...
 [11/11]
Executing migration v1.0.0 (at 2016-12-06 21:53:18.63120758 +0900 JST)...
 [7/7]
Executing migration v1.1.0 (at 2016-12-06 21:53:18.682923725 +0900 JST)...
 [1/1]
Executing migration v1.2.0 (at 2016-12-06 21:53:18.688844058 +0900 JST)...
 [1/1]
Executing migration v1.3.0 (at 2016-12-06 21:53:18.692643909 +0900 JST)...
 [3/3]
Executing migration v1.4.0 (at 2016-12-06 21:53:18.722589625 +0900 JST)...
 [2/2]
Executing migration v1.5.0 (at 2016-12-06 21:53:18.732435869 +0900 JST)...
 [1/1]
Executing migration v0.1.0 (at 2016-12-06 21:53:18.736244906 +0900 JST)...
 [6/6]
Executing migration v1.6.0 (at 2016-12-06 21:53:18.76486765 +0900 JST)...
 [4/4]
Executing migration v1.7.0 (at 2016-12-06 21:53:18.787032755 +0900 JST)...
 [1/1]


 > Username: semaphore
 > Email: 
 > Your name: semaphore
 > Password: password

 You are all setup semaphore!
 Re-launch this program pointing to the configuration file

./semaphore -config /opt/semaphore/semaphore_config.json

 To run as daemon:

nohup ./semaphore -config /opt/semaphore/semaphore_config.json &

 You can login with  or semaphore.
```

セットアップ完了したので、Ansible Semaphoreを起動します。

```bash
$ cd /usr/bin
$ nohup ./semaphore -config /opt/semaphore/semaphore_config.json &
[1] 23428
```

起動していることがわかりますね。

```bash
$ ps aux | grep semaphore
root     23428  0.1  1.3  19804 14188 pts/0    Sl   21:55   0:00 ./semaphore -config /opt/semaphore/semaphore_config.json
root     23431  0.0  0.9  15576  9412 pts/0    Sl   21:55   0:00 /usr/bin/semaphore -config /opt/semaphore/semaphore_config.json
root     23440  0.0  0.2 110456  2192 pts/0    S+   21:55   0:00 grep --color=auto semaphore
```

## Ansible Semaphoreログイン

それでは、Ansible Semaphoreにログインしたいと思います。
ブラウザのアドレスバーに以下を入力します。

> http://GlobalIP:3000/

セットアップ時に登録したユーザー情報を入力します。
![image](https://qiita-image-store.s3.amazonaws.com/0/152721/af561242-a467-f995-f624-74bc95b4d32e.png)


ログインできましたね。
![image](https://qiita-image-store.s3.amazonaws.com/0/152721/0485a717-50b9-a798-1079-ddf787349a04.png)

## Playbookを動かすための準備

それでは、プロジェクトを作成します。
Projectsの"+"をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/152721/c259db1e-a1e5-80e0-d50d-40724be28eff.png)

「Key Store」でGitHub、サーバのKey登録を行います。
![image](https://qiita-image-store.s3.amazonaws.com/0/152721/b9e31b52-2a87-dcf0-b66d-8a451776e733.png)

「Inventory」の設定をします。
![image](https://qiita-image-store.s3.amazonaws.com/0/152721/610e0284-76e3-c508-608f-45a6b52fc36b.png)

GitHubにPlaybookを管理している場合は、リポジトリをGitHubに指定し、先ほど作成したKeyをセットします。
![image](https://qiita-image-store.s3.amazonaws.com/0/152721/42f1ca41-16c8-8758-2357-cf34e14fc149.png)

Playbookを実行するための「Task Template」でTemplateを作成します。
作成すると下記のようになります。
![image](https://qiita-image-store.s3.amazonaws.com/0/152721/c050d389-c256-7ac6-b74c-bf941d418bb7.png)

## Template Taskの実行

それでは「run」をクリックし、実行します。
![image](https://qiita-image-store.s3.amazonaws.com/0/152721/4f1a0309-09c2-8ae2-e015-dea06630d59c.png)

実行されましたね。

## 最後に

Ansibleを画面でポチポチするだけで実行できる環境を構築しました。
非エンジニアの方も使いやすいのではないでしょうか。
また、実行結果や、ユーザー管理などもできるので、監査や管理面でも有効ですね。

ということで、長くなりましたがAdvent Calendar9日目おしまいです。
ありがとうございましたー