【入門・初心者向け】Ansibleはじめました〜簡単なPlaybookの実行まで

EC2(Amazon Linux 2)上でやってみました。

Ansibleインストール

EPELレポジトリを有効にして、Ansibleをインストールします。

$ sudo yum --enablerepo=epel install ansible
$ sudo yum install ansible
$ ansible --version # 確認

Ansible実行テスト

ローカルを対象にAnsibleの実行テストをしてみます。

ひとまず、Ansible構成を作っていくディレクトリを準備します。

$ mkdir sandbox-ansible
$ cd sandbox-ansible

Ansibleでは Inventory というものを定義することで、設定対象のホストを指定します。
ここでは inventories ディレクトリを作成し、そこに dev ファイルを用意します。

$ mkdir inventories
$ touch inventories/dev

ファイル名ですが、設定先のホストがどのような役割なのかわかるようにすると良いと思います。
開発環境なら dev で、ステージングを構築するなら staging 、本番DBサーバーを構築するなら db などです。

今回はローカルを対象にするので dev に以下のような記述をします。

[dev]
localhost

IPアドレスで指定しても大丈夫です。
では、実行テストしてみます。

$ ansible all -i inventories/dev --connection=local -m ping

Ansibleはアクセス先のホストに対してSSH接続を行い、コマンドを叩きます。
ここではlocalhostが対象なので --connection=local を指定することで、SSH接続をさせずに実行しています。

成功すると以下のように返ってくるはずです。

localhost | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

無事、実行テストはできました。

Playbookの作成

次はPlaybookを作っていきます。

$ touch dev.yml

Playbookはyaml形式で記述します。
ここでは、次のように記述してみます。

- hosts: dev
  vars:
    hello: "Hello Ansible!"
  tasks:
    - name: output message.
      debug: msg="{{ hello }}"
    - name: output inventory hostname
      debug: msg="Inventory hostname is {{ inventory_hostname }}"

中身の解説です。

まず hosts は必須になります。グループを指定してあげましょう。
vars を使うことで変数が定義でき、定義した変数は tasks などで使用することができます。
tasks では実行するタスクを記述します。
ここでは2つのタスクを実行しています。
name でタスクに名前をつけることができます。

debug はAnsibleに用意されているモジュールと呼ばれるものの1つで、実行中にメッセージを出力するモジュールになります。
Ansibleには多数のモジュールが用意されており、モジュールを使うことで、ファイルの作成、サービスの起動・停止、yumパッケージをインストールするなどの様々なタスクを実行できます。

今回作成したタスクは、自分で定義したhello変数の出力、それと、 inventory_hostname というAnsibleに用意されているマジック変数を使ってInventoryに指定しているホスト名の出力を行なっています。

では、実行してみましょう。
ansible-playbook コマンドを使ってPlaybookを指定し、実行します。

$ ansible-playbook -i inventories/dev --connection=local dev.yml

成功すると以下のように出力されます。

PLAY [dev] *************************************************************************************************************************************************************************************************

TASK [Gathering Facts] *************************************************************************************************************************************************************************************
ok: [localhost]

TASK [output message.] *************************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "Hello Ansible!"
}

TASK [output inventory hostname] ***************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "Inventory hostname is localhost"
}

PLAY RECAP *************************************************************************************************************************************************************************************************
localhost                  : ok=3    changed=0    unreachable=0    failed=0

簡単ではありますが、Playbookを実行できました。
次回は、本格的にサーバー設定をPlaybookに記述していきます。