Ansibleとは

柴田です。

Ansibleとは

Ansible を使えば、システム構築を手で行わず、設計書に基づいて自動的に構築することが可能です。

以前にシステム構築した手順を設計書をansibleプレイブック(yml)に保存しておけば以降はansibleを走らせるだけで自動的に構築できます。

要するにlinuxでコマンドを叩いてシステム構築すると思いますが、
ansibleが変わりにコマンドを叩いてくれるようなものです、
順番に、「①〇〇コマンド」、「②△△コマンド」…と順にコマンド打ち最終的にシステム構築されますが
それをansibleが解釈できるymlファイルで書くわけです。

主に私はcentos(linux)を主体にシステム構築するのですが、osに問わずWindows用としても設計可能なようです。(やったことはありませんが)

とりあえずansibleプレイブックを以前に何度か作成したので備忘録として記載します。

Dockerとの違い

Dockerもシステム構築を自動で行う点では同じですが、コンテナイメージという抽象的なOSを内包しており、 コンテナ内でシステム構築する。OS内のコンテナを停止、開始すれば簡単に、以前の環境を停止・再開できる。 案件ごとのコンテナをいくつも一つのOSで内包することが可能だし、コンテナを切り替えることですばやく別の案件のシステムを開始できる。 対してansibleは直積にlinuxコマンド(windowsもですが)を直感的にたたいて構築する点で違う。 利用シーンが異なると思います。

プレイブックの構成

ansibleプレイブックのディレクトリ構成やファイル構成はある程度以下のような形になるかと思います。

http://www.aska-ltd.jp/uploads/blogs/2004301107ansible-1-dir.png

エントリーポイント

site.ymlがエントリーポイントになり、そこに処理を書いていきます。

site.yml例

以下site.ymlの例です。

---                          <-- ここの先頭は---で始めなければいけない。
- hosts: all             <-- 対象となるホストサーバ(OS)は全て。ここは固定。ホストを指定したい場合は、ここをいじらず、ansible実行時に、引数でhostを指定できる。

    gather_facts: true     <-- ansible走らせたときの対象サーバの情報を集めるか否か。
    become: true           <-- super userで行う
    become_user: root      <-- rootユーザになる

    vars_files:            <-- こちらはvarsフォルダ以下の何か特定のファイルを読み込ませたいときの指定。例えばホストによって読み込ませる定数を切り替えたいときなどに使う。
        - "vars/os/{{ansible_os_family}}-{{ansible_distribution}}{{ansible_distribution_major_version}}.yml"

    pre_tasks:             <-- 前処理(クラスのコンストラクタ的なことを記載。例えば下のような共通の変数をセットしたい場合。この変数は下のrolesで使いまわします。)
        - set_fact:
                yyyymmddhhiiss: "{{lookup('pipe','date +%Y%m%d%H%M%S')}}"
        - set_fact:
                working_dir: "/tmp/ansible_working/{{yyyymmddhhiiss}}"

    roles:                  <-- こちらで実際に処理する(コマンド実行する)
        - prepare             <-- rolesフォルダ以下に、prepareフォルダを作成してあり、prepare/main.ymlに処理が記載されています。
        - system                  rolesに左記のように沢山のroleを細分化して分けることができる。処理毎に分けてある感じです。
        - modules                 もちろん、site.ymlに全てrole記載して、巨大な1ファイルとすることも可能ですが、通常はroles以下に細分化されるものと思います。
        - settings
        - system2

ansibleプレイブック構成のbest plactics

プレイブック構成は書き方が様々でフォルダもある程度は自由に書けるが 先人の知恵で、「フォルダ構成はこうあるべき」というのがあります。 https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html#directory-layout qiitaでもいいベストプラクティスがいくつか紹介されてます。 https://qiita.com/winky/items/43ae0c8d2846f07aeabb https://qiita.com/kotarella1110/items/79af4485bd7985935d6b

かずにぃ

プログラマー

Ansibleとは

お気軽に
お問い合わせください。

お問い合わせ