ansibleでさくらvpsを設定しようのお話

故あってVPSをたくさん設定することになったので、
これは今流行りのchefとかpuppetとかでしょうとか思ったものの調べた結果
ansibleがベストだと思ったので、そのお話です。

 

●要件

・SSHが最初から起動してるVPSに一度もログインせずに全部まとめて設定したい
・できればめんどくさい勉強はしたくない

 

●chef でなく ansible

調べた感じ巷では例えば chef とか puppet とかは情報が多かったんですが、
そもそもクライアントをインスコしないといけないという時点でアウトでした。
あれはキッティングするレベルの人達が最初から入れておこうねとかそういうやつであって、
借りてきたものをあーだこーだするレベルの俺みたいなエンジニアには不要でした。
(自分はどうせ httpd,sshd,squidとcronの設定くらいでよかったってのもありますが。)
監視はポーリングレベルなら自分ですればいいし、snmp使うならちゃんとツール入れたほうがいいかと。

ってことで、
クライアントがいらない、yamlで書ける、ansibleを選択しました。

 

●インストール

基本的なインストールは yum でポイポイしてしまったので省略

sudo yum -y install ansible

ansible -v が通ったらもう後は動かすだけです。

 

●設定

ベストプラクティスとかありますが、参考にしつつちょっといじってます。

・基本的な考え
SEDとか使ってコンフィグ書き換えてるサンプルが多いですが、
サーバごとに違うもの以外の例えば、httpd.conf とか sshd_configとかは
正のファイルをsv1において、それをコピー配布してます。
どうしても書き換えが必要なネットワーク系とかのみSEDしてます。
(それすらも正のファイルをローカルにおいちゃう事も可能ですが。)

一応ここからはこんなイメージで進めます。
・ansibleを動かすサーバ: server
・vpsのIP: 11.22.33.44
・VPSはsshでログイン可能状態

設定する項目は
・apacheのインストールとhttpd.confの上書きと起動
・任意のシェル実行
の2つ

 

server側の作業フォルダの構成

ansible/
├── ansible.cfg  ←設定ファイル
├── init.yml  ←実行ファイル
├── hosts/
|      ├── hosts  ←vps1のIP書くとこ
|
├── templates/
|      ├── httpd.conf  ←完璧にしておいたコンフィグファイル
|      ├── echo.sh  ←実行したいシェル
|
├── roles/
     ├── httpd/
     |      ├── tasks/
     |             ├── main.yml  ←init.ymlから呼び出して実行する
     ├── shells/
            ├── tasks/
                   ├── main.yml  ←init.ymlから呼び出して実行する

後はもう書き書きするだけです。

 

 
./ansible.cfg

[defaults]
ansible_ssh_args="-o ForwardAgent=yes"
host_key_checking=false
remote_tmp=/tmp

 

./init.yml

- hosts: vps
  roles:
    - httpd
    - shells

 

./hosts/hosts

[vps]
11.22.33.44 ansible_connection=ssh ansible_ssh_user=ユーザ名 ansible_ssh_pass=パスワード ansible_ssh_port=ポート番号

 

./roles/httpd/tasks/main.yml

- name: Install httpd
  yum:
    name: httpd
    state: installed
- name: Copy HTTPD Setting
  copy:
    src: templates/httpd.conf
    dest: /etc/httpd/conf/httpd.conf
    owner: root
    group: root
    mode: 0644
- name: Install php
  yum: name={{ item }} state=present
  with_items:
   - php
   - php-mysql
   - php-mbstring
   - php-gd
- name: Restart httpd
  service: name=httpd state=restarted
- name: Enable httpd
  service: name=httpd state=running enabled=yes

さくらのvpsは最初ルートでSSHが通るので、
その設定でつなげるようにしています。
SSHを変える際はhttpdのやつを改良すればいいと思いますが、
その際ポートとかrootログインとか変更すると
当たり前ですがこの設定ではログインできなくなります。
また、init.ymlで
sshd,httpd,みたいな順番にしちゃうと、
taskごとにsshコネクションを張りなおしているみたいで
sshdで変更してhttpdの際にコネクションが張れない
みたいな事になりますので、sshd変更するのなら最後にしたほうがいいと思います。