社内でAnsibleもくもく会

# 社内で「Ansibleもくもく会」をやってみたきっかけ
- Ansible、よく聞くけど触ったことがない。
- なんだか社内で自動化自動化言われている。けどRPAは何か好きになれない。
- 「自動化」というキーワードに夢を見がち…
- とりあえずAnsibleを使ってどういうことが出来るかを知りたい

こんな状態だったので、Ansibleユーザー会が毎月（？）行っている「[Ansibleもくもく会](https://ansible-users.connpass.com/event/153064/)」に参加してみた。
参加したところ、テキストがとても分かりやすく **Ansible完全に理解した** ため、社内でも布教することにした。

# もくもく会の作り方
もくもく会をやるために用意するのはこの2つ。

- テキスト
- 演習環境

## テキスト
テキストは本家（Ansibleもくもく会）のものをそのまま利用。
Towerはライセンスが必要な気がしたので、ひとまず Section.1 をやることにした。
[Ansible Workshop - Ansible for Red Hat Enterprise Linux
](https://github.com/ansible/workshops/blob/master/exercises/ansible_rhel/README.ja.md)

Ansibleとは？みたいなところはあまりうまく説明できないので事前にWEB上で拾った資料を読んできてもらうことに。
[Ansibleご紹介（PDFファイル）](https://www.scsk.jp/lib/product/oss/pdf/Ansible.pdf)

## 演習環境 (Section.1用)
### 環境の設計と経費
演習環境はAWS上に下記のように構築。1人あたり4台のVMを提供。
ControllerにAnsibleをインストールし、そこから3台のRemote Nodeを操作してもらう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80185/77bfda7a-96be-a643-574e-843132365b10.png)


この演習はスペックを必要としないため、最も安い t3a.nano インスタンスを利用することにした。
「t3a」ファミリーは AMD EPYC 7000 シリーズプロセッサを搭載したサーバー上で提供され、 t3a.nano は東京リージョンではオンデマンドで \$0.0061/hour 、スポットだと 
  \$0.0018/hour で利用できる。日本円にするとスポットで0.2円/時間くらい。
めちゃ安い。4台を一日中立ち上げておいても20円くらいで使うことが出来る。
参考にこの3カ月の価格推移を貼るがとても安定している。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80185/923e21b0-912c-9f28-af3d-622ba50c28f6.png)

### 環境の構築
#### VMの作成
「もくもく会参加者」 × 4 + 1 台のインスタンスを作成する。AMIはAmazon Linux2を利用した。
t3a.nano は、すべてのAZでは提供されていないようで、現在の価格で出てきたAZに紐づくサブネットを選択して作成する必要がある。
（これをやらないと自分の環境では1cがデフォルトになっていてスポットリクエストが失敗した。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80185/9bff2694-1f5a-dc65-6cc2-4efce485a491.png)

セキュリティグループは、テキストの中にApacheサーバーを構築する演習があるため、80番ポートを開けておく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80185/a8e4bfae-1cad-6a93-e70a-0bd98e681f46.png)

#### もくもく会管理者用Ansibleのインストール
インスタンスが立ち上がったら1台（Control Node（Master））にAnsibleをインストールする。このMasterにインストールしたAnsibleからもくもく会参加者用のControl Nodeを構築していく。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80185/bf10d5e1-8794-17ef-dae7-5424350b7d7d.png)

epelリポジトリを有効化し、yumでAnsibleをインストールする。

```shell
$ sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
$ sudo yum install -y ansible
```

インストールができたことを確認する。

```shell
$ ansible --version
ansible 2.9.1
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/home/ec2-user/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.16 (default, Sep 13 2019, 20:28:21) [GCC 7.3.1 20180303 (Red Hat 7.3.1-5)]
```

#### 受講者用環境の構築
もくもく会受講者用環境を作るために下記の3点を行う。

・もくもく会管理者用Inventoryファイルの作成
・受講者用環境へのAnsibleインストール
・受講者用Remote環境へのSSHログイン用の秘密鍵を配置

##### Inventoryファイルの作成
初期設定ではInventoryファイルは`/etc/ansible/hosts`となっている。
受講者用のControl NodeにするノードのIPアドレスでInventoryファイルを作成する。

```:/etc/ansible/hosts
[mokumoku_control]
control_1 ansible_host= （IPアドレス）
control_2 ansible_host= （IPアドレス）
control_3 ansible_host= （IPアドレス）

[mokumoku_control:vars]
ansible_user=ec2-user
ansible_ssh_private_key_file=（秘密鍵のパス）
```

Inventoryファイルが出来たら、[Exercise 1.2 - Ad-hoc コマンドを実行しよう
](https://github.com/ansible/workshops/blob/master/exercises/ansible_rhel/1.2-adhoc/README.ja.md)に従って、実行できることを確かめます。SSHのKnown hostsに入っていないため、初回は確認を求められます。`yes`でknown hostsに登録しましょう。

#### AnsibleをインストールするためのAnsible Playbookの作成

```yaml:ansible_install.yml
---
- name: Ansible installed
  hosts: mokumoku_master
  become: yes
  tasks:
  - name: enable epel package
    yum:
      name: https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
      state: present
  - name: install ansible
    yum:
      name: ansible
      state: latest
      enablerepo: epel
  - name: put private key
    copy:
      src= （秘密鍵のファイルパス）
      dest=/home/ec2-user/.ssh
      owner=ec2-user
      mode=0644
```

#### Ansible Playbookの実行
Playbookが正しく記述できているかを確かめるため`--syntax-check`をつけて実行してみます。
`$ ansible-playbook --syntax-check ansible_install.yml`を実行し、エラーがなければ`$ ansible-playbook ansible_install.yml`を実行すると受講者用Control Nodeの出来上がり。

#### 完成
これで環境は完成したため、受講者にVMにログインしてもらい、Inventoryファイルを書いてもらえば演習環境が完成する。Inventoryファイルの書き方も勉強のひとつとして自動化することはやめた。（実装が面倒だったというのは秘密。）

# Ansibleもくもく会をやってみて
## 良かった点
- みんながAnsible使えるかもと業務への適用を考え始めた。
- 演習環境の構築自体がとても勉強になった