社内でAnsibleもくもく会


社内で「Ansibleもくもく会」をやってみたきっかけ

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

こんな状態だったので、Ansibleユーザー会が毎月(?)行っている「Ansibleもくもく会」に参加してみた。
参加したところ、テキストがとても分かりやすく Ansible完全に理解した ため、社内でも布教することにした。

もくもく会の作り方

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

  • テキスト
  • 演習環境

テキスト

テキストは本家(Ansibleもくもく会)のものをそのまま利用。
Towerはライセンスが必要な気がしたので、ひとまず Section.1 をやることにした。
Ansible Workshop - Ansible for Red Hat Enterprise Linux

Ansibleとは?みたいなところはあまりうまく説明できないので事前にWEB上で拾った資料を読んできてもらうことに。
Ansibleご紹介(PDFファイル)

演習環境 (Section.1用)

環境の設計と経費

演習環境はAWS上に下記のように構築。1人あたり4台のVMを提供。
ControllerにAnsibleをインストールし、そこから3台のRemote Nodeを操作してもらう。

この演習はスペックを必要としないため、最も安い t3a.nano インスタンスを利用することにした。
「t3a」ファミリーは AMD EPYC 7000 シリーズプロセッサを搭載したサーバー上で提供され、 t3a.nano は東京リージョンではオンデマンドで \$0.0061/hour 、スポットだと
\$0.0018/hour で利用できる。日本円にするとスポットで0.2円/時間くらい。
めちゃ安い。4台を一日中立ち上げておいても20円くらいで使うことが出来る。
参考にこの3カ月の価格推移を貼るがとても安定している。

環境の構築

VMの作成

「もくもく会参加者」 × 4 + 1 台のインスタンスを作成する。AMIはAmazon Linux2を利用した。
t3a.nano は、すべてのAZでは提供されていないようで、現在の価格で出てきたAZに紐づくサブネットを選択して作成する必要がある。
(これをやらないと自分の環境では1cがデフォルトになっていてスポットリクエストが失敗した。)

セキュリティグループは、テキストの中にApacheサーバーを構築する演習があるため、80番ポートを開けておく。

もくもく会管理者用Ansibleのインストール

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

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

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

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

$ 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 コマンドを実行しよう
に従って、実行できることを確かめます。SSHのKnown hostsに入っていないため、初回は確認を求められます。yesでknown hostsに登録しましょう。

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

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使えるかもと業務への適用を考え始めた。
  • 演習環境の構築自体がとても勉強になった