Ansible

コンピュータ
コンピュータ

Ansible(アンシブル)はソフトウェアのインストールや設定ファイルの設定・修正を自動化してくれる構成管理ツールです。
Vagrantの機能でAnsibleを呼び出すことが可能です。

Ansible ドキュメント — Ansible Documentation

Vagrant + Ansible

Vagrantを使用してAnsibleを試してみたいと思います。

Vagrant初期化

プロジェクトディレクトリ作成・移動

mkdir ansible
cd ansible

Vagrantfile作成

Vagrant.configure("2") do |config|
  config.vm.box = "debian/buster64"

  config.vm.network "private_network", ip: "192.168.33.10"
  config.vm.synced_folder "./data", "/vagrant", type:"virtualbox", create: true

  config.vm.synced_folder "./provision/", "/tmp/provision"
  config.vm.provision :ansible_local do |ansible|
    ansible.playbook = "/tmp/provision/playbook.yml"
    ansible.install = true
    ansible.verbose = "v"
  end
end

VagrantのAnsibleローカルプロビジョナを使い、ゲストOSにAnsibleをインストール・実行します。
provisionにansible_localを設定します。
共有フォルダーでホストOSのAnsibleの設定を読み込ませます。

Ansible設定ファイル

Ansibleの設定ファイルはYAML形式で記述します。

mkdir -p provision/roles/php/tasks
---
  - hosts: all
    remote_user: root
    sudo: true
    roles:
      - role: php
        tags: "php"
---
- name: PHPインストール
  apt:
    name: "{{ packages }}"
  vars:
    packages:
      - php-fpm
      - php-mbstring
      - php-zip
      - php-xml
      - php-gd
      - php-imagick
      - php-pgsql
      - php-mysql
      - php-sqlite3
      - php-memcached
      - php-xdebug

- name: PHP設定(fpm)
  lineinfile:
    dest: "/etc/php/7.3/fpm/php.ini"
    backrefs: yes
    regexp: '{{ item.regexp }}'
    line: '{{ item.replace }}'
  with_items:
    - { regexp: '^;(date.timezone) =.*', replace: '\1 = Asia/Tokyo' }
    - { regexp: '^(post_max_size) =.*', replace: '\1 = 128M' }
    - { regexp: '^(upload_max_filesize) =.*', replace: '\1 = 120M' }

- name: PHP設定(cli)
  lineinfile:
    dest: "/etc/php/7.3/cli/php.ini"
    backrefs: yes
    regexp: '{{ item.regexp }}'
    line: '{{ item.replace }}'
  with_items:
    - { regexp: '^;(date.timezone) =.*', replace: '\1 = Asia/Tokyo' }

- name: PHP-FPM設定
  replace:
    dest: /etc/php/7.3/fpm/pool.d/www.conf
    regexp: "{{ item.regexp }}"
    replace: "{{ item.replace }}"
  with_items:
    - { regexp: "^listen = .*", replace: "listen = 127.0.0.1:9000" }

- name: PHP-FPM再起動
  service:
    name: php7.3-fpm
    state: restarted

- name: composerインストール
  command: "{{ item }}"
  with_items:
    - php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
    - php composer-setup.php
    - php -r "unlink('composer-setup.php');"
    - mv composer.phar /usr/local/bin/composer

起動

vagrant up

起動時にAnsibleがインストール・実行されます。
このように設定ファイルを使ってさまざまなサーバの設定を自動化することが可能です。

Ansible Playbook作成

Ansibleの設定ファイルをPlaybookと呼びます。

Playbookの作成・開発を実機でやる場合、何度も再インストールをすることになります。
Vagrantを使用しても仮想マシンの削除・作成しなくてはならないので時間がかかります。

Vagrantのプラグイン saharaを使うことにより、簡単にロールバックできる環境で作成・開発を行えます。

sandboxモード開始

vagrant sandbox on

Ansible設定

mkdir -p provision/roles/base/tasks
---
  - hosts: all
    remote_user: root
    sudo: true
    roles:
      - role: base
        tags: "base"
      - role: php
        tags: "php"
---
- name: タイムゾーン設定
  timezone:
    name: Asia/Tokyo

- include: locale.yml
---
- name: ロケール追加
  locale_gen:
    name: ja_JP.UTF-8
    state: present

- name: ロケール反映
  command: update-locale LANG=ja_JP.UTF-8
  when: ansible_env.LANG | default('') != 'ja_JP.UTF-8'

provision実行

vagrant provision

Ansibleの設定が実行されます。

ゲストOSで、日本語・日本時間で表示されていることを確認。

vagrant ssh
date
cal

sandboxモード ロールバック

vagrant sandbox rollback

vagrant sandbox onした時の状態に戻ります。

provisionとsandbox rollbackを繰り返しながらPlaybookの作成・開発が可能です。

AnsibleのPlaybookはGitHubなどで公開されているので参考にしてみると良いかもしれません。

コメント

タイトルとURLをコピーしました