CrescPia

Ansible をざっくり理解する

VPS 障害で初期化することになり、運用方針を見直しているところです。
各種ツールのインストールやアプリのデプロイを自動化するようにしました。
Ansible というツールを使います。


手動でサーバー構築する運用を見直しているところです。
さっと復旧できるようにするのが目的です。
自作サービスなどは Podman でコンテナ化して Systemd で起動管理するようにしました。
(前の記事:Podman でサービス運用)


順番が前後するのですが、まずは VPS を構築する必要があります。
nginx や podman のインストールを行い、それから自作サービスをデプロイします。
こんなことを Ansible を使って自動化できます。

Ansible とは

  • Ansible is an open source IT automation engine that automates provisioning, configuration management, application deployment, orchestration, and many other IT processes.
    (AnsibleはオープンソースのIT自動化エンジンであり、サーバーの構築から設定管理、アプリのデプロイ、オーケストレーションなど、幅広いIT工程の自動化を実現します。)

  • Ansible の構成図です。ドキュメントより(Getting started with Ansible — Ansible Community Documentation)。
    • Control node: Ansible を実行するホストです。例えばローカルPC。
    • Inventory: 構築する対象のホストのリストです。
    • Managed nodes: 構築する対象のホストです。 Ansible構成
  • Control node から Managed node へ SSH でアクセスして操作を行います。操作対象ホストに Ansible をインストールする必要はありません。
  • 操作には冪等性があり、何回実行しても同じ結果になるように作られています。

(参考:Wikipedia: Ansible)

設定ファイル

以下の2つのファイルが設定ファイルです。

  • インベントリー
    構築する対象のホストを書いておきます。

    [web_servers]
    vps
    

    vpsのところは、~/.ssh/configの Host 名で設定することが出来ます。


  • プレイブック
    操作する内容を書いておきます(詳細後述)。

プレイブックの内容をざっくり理解

本当はちゃんと理解して書けるようになりたいところですが、今後は AI に書いてもらうことになりそうです。
読めるようにはなることを目指します。

プレイブックの例

AI が作ってくれたプレイブックです。(一部抜粋です。)

- name: VPS サーバーセットアップ
  hosts: web_servers
  become: yes
  vars:
      ansible_user: crescpia

  tasks:
  # --- パッケージインストール ---
      - name: apt キャッシュを更新する
        apt:
            update_cache: yes
            cache_valid_time: 3600
        tags: [nginx, podman, python, certbot]

      - name: nginx をインストールする
        apt:
            name: nginx
            state: present
        tags: [nginx]

      - name: nginx サービスを有効化・起動する
        service:
            name: nginx
            state: started
            enabled: yes
        tags: [nginx]

      - name: podman をインストールする
        apt:
            name: podman
            state: present
        tags: [podman]

プレイブックは以下のような構造です。

  • hosts: インストールなどの操作する対象のホストです。
  • vars: 変数です。
  • tasks: 実行する操作です。操作をいくつも書いていくことになります。

タスクについて

タスク部分は以下のような構造です。

 # --- パッケージインストール ---
      - name: apt キャッシュを更新する
        apt:
            update_cache: yes
            cache_valid_time: 3600
        tags: [nginx, podman, python, certbot]

      - name: nginx をインストールする
        apt:
            name: nginx
            state: present
        tags: [nginx]

上記のaptの部分が操作に当たります。モジュール(module)と呼びます。
モジュールはたくさん定義されており、この定義名を指定します。
Index of all Modules — Ansible Community Documentation


モジュールというのは Python のモジュールとして理解すればいいと思います。
apt installの apt を指定しているわけではなく、apt install の操作をする Python のモジュールがあるのでその名前を指定することになります。
ドキュメントによるとaptではなくansible.builtin.aptというように FQCN で書きなさいということです。AI にはまだこの情報は浸透していないのかな。
General tips — Ansible Community Documentation


 # --- パッケージインストール ---
      - name: apt キャッシュを更新する
        apt:
            update_cache: yes
            cache_valid_time: 3600
        tags: [nginx, podman, python, certbot]

      - name: nginx をインストールする
        apt:
            name: nginx
            state: present
        tags: [nginx]

update_cache, cache_valid_time, name, state などはパラメータで、モジュールごとに指定できるパラメータがあります。
どんなパラメータを指定すればいいのかは・・・ドキュメントを見ます。
ドキュメントにはパラメータの説明の他に、Examples があり、いろいろな書き方の例が示されているので参考になります。
ansible.builtin.apt module – Manages apt-packages — Ansible Community Documentation


state というのが冪等性を指定する部分で、aptモジュールの場合は以下のように選択肢が定義されています。
stateパラメータ
・・・ここに説明はないですが、presentはインストール済みの状態にするということになります。

まとめ

Ansible のさわりだけ紹介しました。
サーバーのセットアップだけでなく、個人としても PC の買い替え時のセットアップなんかにも利用できると思います。
この時期、新しいメンバーの PC セットアップなどにも利用できるのではないでしょうか。

あと、プレイブックは YAML ファイルで、何をインストールしてどんな設定をしたかのドキュメントにもなります。