Ansibleでraspberry piの設定を自動化しよう [2.7対応]


背景

RaspberryPiを2台をものの弾みで処分し再度購入しました。
その際に設定が面倒だしまたいつか処分して再購入する際に設定が発生する可能性があるので
せっかくなので自動化しておこうと思い使ってみました。

ansible/ansible

今回はインストールから動作確認までと概要を記載

具体的な使用と実践は次回以降から記載していきます。

書く予定のこと

  • Ansible概要
  • Ansibleを試す
  • Ansibleの実践的な利用 (次回)

Ansible?

Ansible(アンシブル)は、レッドハットが開発するオープンソースの構成管理ツールである。サーバを立ち上げる際、あらかじめ用意した設定ファイルに従って、ソフトウェアのインストールや設定を自動的に実行する事が出来る[1]。特に大規模なコンピュータ・クラスターを構築する時に、時間の短縮やミスの削減に有用である。構成管理に加え、オーケストレーションやソフトウェアデプロイメントの機能を持つ[2]。

wikiより引用

ansibleは簡単に言えばサーバー構成自動化ツールです。
構成管理ツールといえばChef, Puppetを想像しますがその一角といった認識で間違いないはずです。
Infrastructure as a Codeってやつです

Ansible は端的に言えば

  • hostsファイル
  • playbook
  • モジュール

の、3点で成り立っている。
ちなみに読み方は「アンシブル」

環境

■Ansiblesサーバ
Ubuntu(18.04)

■Ansibleホスト
raspberry pi * 2

AnsibleはSSH接続したサーバに対して、ミドルウェアのインストールや設定ファイルの更新を行うツールです。なのでsshはパス無し必須なので設定を行っておいてください。

導入手順

インストール

サーバに下記をインストール

$ apt install -y epel-release
$ apt install -y ansible

インストールが正しく行われたかを確認
指定してホストへpingを実行する

$ ansible --version
ansible 2.7.2

# SUCCESSが出ればインストールは成功
$ ansible -m ping 192.168.1.136
192.168.1.136 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
オプション 説明
-i INVENTORY インベントリファイルのパスを指定。デフォルトは「/etc/ansible/hosts」
--help ansibleコマンドのヘルプを表示
-m MODULE_NAME モジュールを指定

モジュールはたくさんある。
よく使うのはここらへん

  • file
  • copy
  • template
  • service
  • lineinfile

ディレクトリ構成

ベストプラクティスは公式より下記のようになっている
特別特殊なことをやりたい訳ではないのでとりあえずこちらを使用する

playbooks
├── development
├── others.yml
├── production
├── roles
│   ├── common
│   │   ├── handlers
│   │   │   └── main.yml
│   │   └── templates
│   │       └── ntp.conf.j2
│   └── nginx
│       ├── handlers
│       │   └── main.yml
│       └── templates
│           └── default.j2
├── site.yml
├── staging
└── webservers.yml

hostsを編集

今回使用するhostを記載する

[webservers]
raspberrpi01
raspberrpi02

[dbservers]
raspberrpi03

Playbookを編集

---
- hosts: webservers
roles:
  - common
  - webapp

- hosts: dbservers
roles:
  - common
  - db_middleware

実際に使ってみる

上まででとりあえず導入は完了。

参考URL

Ansibleの基本的な使い方