アンシブルプレイブック

2019-10-10

アンシブルプレイブック(Ansible Playbook)を使ってサーバー構築に必要なプログラムのインストールや基本設定をしてみます。

概要

以前のブログでインストールしたアンシブル(Ansible)のプレイブック(Playbook)を使ってサーバーを構築します。基本的にサーバー構築へ必要なプログラムインストールや設定をするためアンシブルプレイブック(Ansible Playbook)を使う予定です。このブログでは基本的vagrantを使って仮想マシン(guest system)を作ってその中にアンシブル(Ansible)をインストールして進めます。

このブログは上の2つのブログの内容を実行したと仮定して説明します。

アンシブルプレイブック生成

現在Vagrantfileファイルが存在するフォルダへ```ansible``の名前でフォルダを作ります。

|-- ansible
|-- Vagrantfil

生成したansibleフォルダにplaybook.ymlファイルを生成します。アンシブル(Ansible)の全ての内容はヤムル(yml)ファイル形式と文法で作ります。だから、ヤムル(yml)で使える全てのことが使えます。

|-- ansible
|    |-- playbook.yml
|-- Vagrantfil

生成したplaybook.ymlファイルはアンシブル(Ansible)のスタート点です。playbook.ymlを下のように作成します。

---
- hosts: localhost
  roles:
    - init

以前のブログでも紹介したがアンシブル(Ansible)はインフラに関する全般的な自動化ツールです。したがって、ローカルサーバー(local server)以外でもリモートサーバー(remote server)のインフラも管理することが出来ます。hostsはアンシブル(Ansible)を使ってインフラを構築する対象、つまりローカル(local server)やリモートサーバー(remote server)を指定することができます。私たちは現在開発サーバーを構築してるのでhostsにはlocalhostを設定します。

アンシブル(Ansible)は1つのプレイブック(playbook)ファイルで全てのインフラ構築内容を定義することもできますがrolesを使って複数のファイルで管理することも可能です。roles下に分離して管理したいフォルダリストを設定します。このブログではinitフォルダを1つ生成する予定ですので- initを追加しました。

|-- ansible
|    |-- init
|    |    |-- tasks
|    |    |    |-- main.yml
|    |-- playbook.yml
|-- Vagrantfil

上のようにansibleフォルダ下へinit/tasks/main.ymlファイルを生成した下記の内容を追加します。

---
- name: Make app directory
  file: path=/var/www state=directory mode=0755

- name: Symbolic link
  file: src=/vagrant dest=/var/www/vhosts state=link

- name: Set timezone to Asia/Tokyo
  timezone:
    name: Asia/Tokyo

- name: Update and upgrade apt packages
  become: true
  apt:
    upgrade: yes
    update_cache: yes
    cache_valid_time: 86400

- name: Add python3.6 repo
  apt_repository:
    repo: 'ppa:jonathonf/python-3.6'

- name: Install basic packages
  become: true
  apt:
    pkg:
      - git
      - unzip
      - python3.6
      - python-pip
      - python3-pip
      - fabric
    state: present
    update_cache: yes

アンシブル(Ansible)のコマンドを一つ一つ見てみます。

- name: Make app directory
  file: path=/var/www state=directory mode=0755

これがアンシブル(Ansible)の1つのコマンドです。nameは現在のコマンドを区分するためものでこのコマンドはアンシブル(Ansible)のfileコマンドを使ってフォルダを生成する部分です。

- name: Symbolic link
  file: src=/vagrant dest=/var/www/vhosts state=link

フォルダを管理をするため/vagrantフォルダと/var/www/vhostsフォルダを連携します。

- name: Set timezone to Asia/Tokyo
  timezone:
    name: Asia/Tokyo

ローカルサーバーのタイムゾーン(timezone)を設定します。

- name: Update and upgrade apt packages
  become: true
  apt:
    upgrade: yes
    update_cache: yes
    cache_valid_time: 86400
  tags:
    - packages

Linuxのパッケージ管理ツールのapt-getをアップデートします。become: trueで管理者権限(root)でこのアンシブル(Ansible)コマンドを実行します。

- name: Add python3.6 repo
  apt_repository:
    repo: 'ppa:jonathonf/python-3.6'

アンシブル(Ansible)のモジュール中でパイソン(python)に依存するモジュールがあってパイソン(python)をインストールする必要があります。パイソン(python)をインストールするためパイソンのレポジトリ(repository)を追加します。

- name: Install basic packages
  become: true
  apt:
    pkg:
        - git
        - unzip
        - python3.6
        - python-pip
        - python3-pip
        - fabric
    state: present
    update_cache: yes

あとで必要な基本プログラム(git, unzip)とパイソン(python)と関係あるプログラムをインストールします。

Vagrantfile修正

既存のVagrantfileに下記の内容を追加します。

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
 ...

  config.vm.provision "shell", inline: <<-SHELL
    ...
    sudo ansible-playbook /vagrant/ansible/playbook.yml
  SHELL

  config.vm.synced_folder ".", "/vagrant"
end

以前のブログで使ったプロビジョンシェル(provision shell)にansible-playbook /vagrant/ansible/playbook.ymlを追加しました。今からvagrant upまたはvagrant provisionコマンドを実行すると私たちが作ったアンシブルプレイブック(Ansible Playbook)が自動に実行されます。

またconfig.vm.synced_folder ".", "/vagrant"コマンドを使ってローカルマシン(host system)のフォルダを仮想マシン(guest system)の/vagrantへアップロードして同期化(sync)します。今からはローカルマシン(host system)でファイルを修正したら仮想マシン(guest system)へ自動に反映されます。

テスト

今まで作ったアンシブルプレイブック(Ansible Playbook)とVagrantfileを使って自動でサーバーを設定してみましょう。既存の仮想マシン(guest system)が起動中だったら下記のvagrantコマンドで仮想マシン(guest system)を削除します。

vagrant destroy

下のvagrantコマンドで仮想マシン(guest system)を生成します。このように生成したら以前と違って私たちが作成したアンシブルプレイブック(Ansible Playbook)が起動してることをコンソール(console)で確認できます。

vagrant up

生成されたら下記のvagrantコマンドで仮想マシン(guest system)へ接続します。

vagrant ssh

下のコマンドでVagrantfileとアンシブルプレイブック(Ansible Playbook)が上手く動作したかを確認します。

cd /vagrant
ls

git --version
unzip -v

完了

今回のブログではアンシブルプレイブック(Ansible Playbook)を使って仮想マシン(guest system)へ基本的必要なプログラムをインストールしてみました。これを通じてアンシブルプレイブック(Ansible Playbook)をどうやって使うかもみました。またVagrantfileファイルを修正して仮想マシン(guest system)を生成する時アンシブルプレイブック(Ansible Playbook)を自動に実行されるように作ったりVagrantfileが実行されたフォルダと仮想マシン(Ansible Playbook)の/vagrantフォルダと同期化する方法もみてみました。

アンシブルプレイブック(Ansible Playbook)をもっと上手く使う必要がありますが、私たちは単純に使ってるのでちょっと恥ずかしいですね。下にアンシブルのドキュメント(Ansible Document)サイトのリンクを紹介します。そのドキュメントをみってもっと美しくアンシブル(Ansible)を使ってみてください。

次のブログではdockerの開発環境を追加してみます。

参考

Buy me a coffeeBuy me a coffee
Posts