0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ansible触ってみた

Posted at

はじめに

Ansibleを触ってたので、まとめとてみた。
基本的には初心者向け

Ansibleとは???

簡単に言うと、作業をコード化して、実行することができるツール。

例)httpdのインストール

linuxコマンドの場合
dnf install -y httpd

これをansibleを使って実行するとこうなる

playbook.yml
- name: httpd install
  ansible.builtin.dnf:
    name: httpd
    state: latest

一見ansibleのほうが難しいと思われるが、サーバーの台数が増えてくるとコマンド入力ではミスも起きるし、そもそもそれぞれの機器の切り替えなどがとても面倒になる。
だが、ansibleを使用すると一度コードを作成すれば、それを再利用してすべての機器に簡単に展開することができる。
また、コードを見ることでそのサーバーにどのような設定やソフトがインストールされているかがわかるため、チームでの構成管理もかなり楽になる。

今回の勉強の目標

現在の職場でAnsibleを使用した構成管理と設定変更などをしている為
サンプルコードなどはたくさん見れる状況

そのためひとまずの目標としては

  • 基本の理解
  • Playbookが読めるようになる
  • rolesの理解と階層構造がわかるようになる

このあたりを目標にしてみようと思う。
Playbook読めることと、rolesの理解ができることで、どのような設定をどのサーバーに対して実行しているかの理解ができる様になるのでそこをゴールにしていきたい。
その後はトライ&エラーで頑張る。

参考書籍
Ansible実践ガイド 第4版[基礎編]

基本の理解

Playbook

yaml形式で記入する「手順書」となるもの
主に「どこ」に「なに」を「どうする」を記入する。

playbook.yml
---
- hosts: web
  tasks:
    - name: httpd install 
      ansible.builtin.dnf: 
        name: httpd 
        state: latest 

インベントリ

playbookの「どこ」が具体的にどのサーバーを指しているのかを記述している。
対象ホストをグループ化することで複数に対して、実施することもできる

inventory.ini
#対象のホストに合わせてIPアドレスやサーバー数を変更
[web] #webグループ
192.168.100.1
192.168.100.2
192.168.100.3

[sql] #sqlグループ
192.168.200.1
192.168.200.2

まずはここが基本中の基本
ここまでかければ、ansible-playbookコマンドで実行することができる。

# ansible-playbook -i inventory.ini playbook.yml 

PLAY [web] **********************************************************************************

TASK [httpd install] ************************************************************************
ok: [192.168.100.30]

PLAY RECAP **********************************************************************************
192.168.100.30             : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Playbookの理解

前述したPlaybookは基礎的なものになるが、業務ではこんなシンプルな構造のサーバーは使わない。
複雑化していくためにPlaybookの構造をある程度理解しておこう。

Taragetセクション

インベントリファイルでも記述している「どこ」にたいしての記述をするところ、
playbookの以下の部分が該当する。

- host web

Varsセクション

あらかじめ設定しておく変数を記述しておく
例)設定ファイルの名前などなど、、

vars:
  msg: test #msg変数にtestを格納する。

tasks:
  - name: test message
    ansible.builtin.debug:
      msg: "{{ msg }}" #これでmsg変数が呼び出されて、testが表示される。

tasks

ここで実行する処理を実際に記述する。
モジュールを指定してそれに合わせて、処理内容を記述していく。

tasks:
  - name: httpd install 
    ansible.builtin.dnf: #モジュール名
      name: httpd #処理内容(ここではhttpdを指定)
      state: latest #latestは最新をインストールする動きを指定している。

各種モジュールなどは公式マニュアルを確認。わからなければググるかgpt先生に質問してみる。

Handlers

少し特殊な処理になる。
簡単に説明すると、「処理1」を実行したら「処理a」を呼びだすみたいな記載になる。
tasksセクションに「notify」でHandle名を設定して、Handlersセクションの「listen」で紐づけるようなイメージ

---
- hosts: web
  tasks:
    - name: httpd install 
      ansible.builtin.dnf: 
        name: httpd 
        state: latest
      notify:
        - after task #この処理が実行されたら、「after task」が設定される。

  handlers:
    - name: test service
      ansible.builtin.systemd:
        name: httpd
        state: restarted
      listen:
        - after task #どこかで「after task」が設定されていたら、このタスクを実行する。

基本要素は以上となる。
まずはこの動作が覚えられれば単体で構成されているplaybookは読むことができる。

rolesの理解と階層構造

ここからはややこしくなる。
規模が大きくなるとplaybookが長文になってしまうため、各セクションをフォルダで割って管理するようなイメージになる。
特徴としては各フォルダのmain.ymlを必ずansibleが見に行くということ。
簡単な例と共に説明していく。

# tree
.
├── inventory.ini #inventoryファイル
├── roles
│   └── test_server
│       ├── tasks
│       │   └── main.yml
│       └── vars
│           └── main.yml
├── test
│   ├── inventory.ini
│   └── playbook.yml
└── test_playbook.yml #読み込むplaybook
  • test_playbookの内容
---
- name: test_roles_playbook
  hosts: test_server #inventoryファイルのホスト設定
  roles:
    - test_server #これでどのディレクトリを見に行くか決めている

↑の説明はtest_serverグループのホストはroles/test_serverを見に行くことになっている。
その後に各ディレクトリ内のmain.yamlを読み込みに行く

  • roles/test_server/tasks/main.ymlの内容
---
- name: test debug
  ansible.builtin.debug:
    msg: "testmessage"

- name: httpd install
  ansible.builtin.dnf:
    name: httpd
    state: latest
  become: true

※vars/main.ymlの内容は省略→変数が設定されている。

処理の流れは以下になる。

  1. test_playbook.ymlのhostsでどのホストに処理をするかきめてrolesでどのフォルダを見に行くか決める。
  2. roles/test_serverフォルダを見に行って、var/main.ymlを見て各種変数を設定
  3. tasks/main.ymlを見に行ってそれぞれの処理を実施していく。

このようにすると各main.ymlは短い記述で済むので、管理&可読性があがる。

まとめ

ここまでの知識があれば大まかな設定内容は見ることができると思う。
後はモジュールの知識がつくことで処理がどのようになっているかがよくわかる。
また変数についてはほかにもいろいろと設定できることがあるため、こちらについてはおいおい勉強していく必要がある。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?