開発者でも知っておきたいインフラ構築自動化
- Ansible入門編
Developer Dojo
2023. 9.27
© 2023 IBM Corporation 2
© 2023 IBM Corporation
What is
Ansible?
Ansibleは2012年にリリースされたインフラ自動化のソフトウェアです。
Ansible=構成管理ツールだったのですが、すごい進化しているため、
行為性管理もできる自動化ツールといったほうが正しい気がしています。
サーバやネットワーク、仮想環境だけでなく様々なミドルウェアやクラウド環境に対して、
構築や設定変更ができます。
Ansible offers open-source automation that is simple,
flexible, and powerful.
Simple
Yaml形式で短く、
簡潔に自動化を定義
Powerful
様々なIT機器、
クラウド、
ミドルウェアに対応
Flexible
エージェントレス!
© 2023 IBM Corporation 3
© 2023 IBM Corporation
What is
IaC ?
Infrastructure as Code
インフラの構成や変更作業をコードで記述する。
ソフトウェア開発の進め方をインフラに適用していこうぜという考え方
ツールで自動化 バージョン管理 コードで管理
IaC適用前の課題...
運用手順書を見ながら同じ作業を手作業で実施。
何台ものサーバーで同じ作業を繰り返すため、どこかで設定ミスが発生してしまう。
パッチ適用など変更を行った情報をExcelで管理し、運用手順書を更新する。
ツールで自動化 バージョン管理 コードで管理
© 2023 IBM Corporation 4
Ansible入門
© 2023 IBM Corporation 5
© 2023 IBM Corporation
Key
Components Module
Collection
Inventory
tgt1 10.0.1.22
tgt2 xx.xx.xx
Playbook
- Targets
- Task
- Handler
Server
Network
Cloud
Ansible
RedHat社によってpythonで開発されたOSS
ターゲット
今日ご紹介するAnsibleの基本要素です。Module/Inventory/Playbookの
3つを覚えてください。
© 2023 IBM Corporation 6
ターゲット上で実行されるタスクの単位で、Ansibleが自動化できる内容がたくさん用意されている。
モジュール は「タスクプラグイン」または「ライブラリープラグイン」とも呼ばれる
built-inモジュールと呼ばれる最初から入っているモジュールに加え、
追加で導入するモジュールはコレクションとしてまとめられている。
built-in
モジュール郡
Module &
Collection
自動化の部品 &
部品のセット
利用可能なモジュールの一覧
pingモジュールで
疎通確認する > ターゲット
カテゴリー モジュール名 概要
コマンド系 shell shellを実行する
ファイル操作系 file ファイル作成、リンク
copy コピーする
パッケージ管理系 yum パッケージ更新、インストール
クラウド操作系 ec2 ec2の作成、停止、起動
© 2023 IBM Corporation 7
Inventory Ansibleがターゲットとする対象を指定するファイルをinventoryと呼びます。
複数ホストを1つのグループにまとめたり、グループに対して変数を設定できたりする。
自動化する対象を指定する [grp1]
tgt1
tgt2
[grp2]
tgt3.example.com
10.0.11.121
[all:vars]
ansible_user=root
ansible_ssh_password=password
[grp1:vars]
myname=sagawa
inv ファイル
grp1って言われたら
tgt1とtgt2を操作するんですね!
承知しました!
$ ansible –i inv tgt1 –m ping –o
© 2023 IBM Corporation 8
とりあえず試してみよう その1
Ad-Hoc コマンド
Podman 環境
ssh
Controller
IaCではなくなってしまいますが、Playbookを書かずにコマンドで操作する方法をAd-Hocといいます。
ちょっとした検証に使う
[ansible-handson]# ansible -i inv grp1 -m ping –o
tgt2 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python":
"/usr/libexec/platform-python"},"changed": false,"ping": "pong"}
$ ansible -i inventory_name target_name –m module_name
Target
sshd
© 2023 IBM Corporation 9
Playbook
---
- name: first plyabook
hosts: all
become: yes
tasks:
- name: first task
yum:
name: httpd
state: latest
- name: start
service:
name: httpd
state: started
enabled: yes
- name: copy new html
copy:
src: files/index.html
dest: /var/www/html/
Playbook.yaml
Playパート: ヘッダー部分
taskパート: 自動化の定義
- その1
任意のタスク名
使うモジュール
モジュールへ渡す引数
- その2
- その3
YAML形式で記述し、ターゲットの望ましい状態を定義する
© 2023 IBM Corporation 10
© 2023 IBM Corporation
YAMLと
仲良しですか?
参加者の皆様はYAMLの読み書きできますか?
Jsonとはマブダチだけど...実はYAMLはあまり好きじゃないという方向けにYAMLのおさらい。
YAMLはjsonの上位互換 (らしいです)
ルール:インデントするときはTab使えない。配列は ハイフンで表す
#可読性Good!コメント書ける!
---
people: #コメント
- name: saito
age: 10
friend: true
- name: sagawa
age: 12
friend: false
{
"people": [
{
"name": "saito",
"age": 10,
"friend": "yes"
},
{
"name": "sagawa",
"age": 12,
"friend": "no"
}
]
}
vs
© 2023 IBM Corporation 11
とりあえず試してみよう その2
Playbookの作成と実行
Podman 環境
Controller Target1
Target2
playbook
---
- name: first plyabook
hosts: all
become: true
tasks:
- name: first task
yum:
name: httpd
state: latest
- name: start
service:
name: httpd
state: started
enabled: yes
- name: copy new html
copy:
src: files/index.html
dest: /var/www/html/
1. httpdをインストールして、
2. startして、
3. htmlファイルをコピーする
© 2023 IBM Corporation 12
とりあえず試してみよう その2
Playbookの作成と実行
冪等性
何度繰り返しても、同じ結果が得られる
Playbookに従い処理を実行する前に、
本当に処理する必要があるかを確認しています。
httpdがインストールされているか?
指定のバージョンか?
を確認した上で、異なる場合だけ処理を実行します。
そのため、同じplaybookを2回、3回と実行しても
結果は変わりません。
Podman 環境
Controller Target1
Target2
playbook
© 2023 IBM Corporation 13
Ansible触ってみよう!
https://killercoda.com/ansible/scenario/ansible-101
webでハンズオンができます!
日本語もあるのでおすすめ!
お時間ある方はぜひ実施してください!
19時まで残っているので、QA受け付けます。

Ansible入門.pptx

  • 1.
  • 2.
    © 2023 IBMCorporation 2 © 2023 IBM Corporation What is Ansible? Ansibleは2012年にリリースされたインフラ自動化のソフトウェアです。 Ansible=構成管理ツールだったのですが、すごい進化しているため、 行為性管理もできる自動化ツールといったほうが正しい気がしています。 サーバやネットワーク、仮想環境だけでなく様々なミドルウェアやクラウド環境に対して、 構築や設定変更ができます。 Ansible offers open-source automation that is simple, flexible, and powerful. Simple Yaml形式で短く、 簡潔に自動化を定義 Powerful 様々なIT機器、 クラウド、 ミドルウェアに対応 Flexible エージェントレス!
  • 3.
    © 2023 IBMCorporation 3 © 2023 IBM Corporation What is IaC ? Infrastructure as Code インフラの構成や変更作業をコードで記述する。 ソフトウェア開発の進め方をインフラに適用していこうぜという考え方 ツールで自動化 バージョン管理 コードで管理 IaC適用前の課題... 運用手順書を見ながら同じ作業を手作業で実施。 何台ものサーバーで同じ作業を繰り返すため、どこかで設定ミスが発生してしまう。 パッチ適用など変更を行った情報をExcelで管理し、運用手順書を更新する。 ツールで自動化 バージョン管理 コードで管理
  • 4.
    © 2023 IBMCorporation 4 Ansible入門
  • 5.
    © 2023 IBMCorporation 5 © 2023 IBM Corporation Key Components Module Collection Inventory tgt1 10.0.1.22 tgt2 xx.xx.xx Playbook - Targets - Task - Handler Server Network Cloud Ansible RedHat社によってpythonで開発されたOSS ターゲット 今日ご紹介するAnsibleの基本要素です。Module/Inventory/Playbookの 3つを覚えてください。
  • 6.
    © 2023 IBMCorporation 6 ターゲット上で実行されるタスクの単位で、Ansibleが自動化できる内容がたくさん用意されている。 モジュール は「タスクプラグイン」または「ライブラリープラグイン」とも呼ばれる built-inモジュールと呼ばれる最初から入っているモジュールに加え、 追加で導入するモジュールはコレクションとしてまとめられている。 built-in モジュール郡 Module & Collection 自動化の部品 & 部品のセット 利用可能なモジュールの一覧 pingモジュールで 疎通確認する > ターゲット カテゴリー モジュール名 概要 コマンド系 shell shellを実行する ファイル操作系 file ファイル作成、リンク copy コピーする パッケージ管理系 yum パッケージ更新、インストール クラウド操作系 ec2 ec2の作成、停止、起動
  • 7.
    © 2023 IBMCorporation 7 Inventory Ansibleがターゲットとする対象を指定するファイルをinventoryと呼びます。 複数ホストを1つのグループにまとめたり、グループに対して変数を設定できたりする。 自動化する対象を指定する [grp1] tgt1 tgt2 [grp2] tgt3.example.com 10.0.11.121 [all:vars] ansible_user=root ansible_ssh_password=password [grp1:vars] myname=sagawa inv ファイル grp1って言われたら tgt1とtgt2を操作するんですね! 承知しました! $ ansible –i inv tgt1 –m ping –o
  • 8.
    © 2023 IBMCorporation 8 とりあえず試してみよう その1 Ad-Hoc コマンド Podman 環境 ssh Controller IaCではなくなってしまいますが、Playbookを書かずにコマンドで操作する方法をAd-Hocといいます。 ちょっとした検証に使う [ansible-handson]# ansible -i inv grp1 -m ping –o tgt2 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/libexec/platform-python"},"changed": false,"ping": "pong"} $ ansible -i inventory_name target_name –m module_name Target sshd
  • 9.
    © 2023 IBMCorporation 9 Playbook --- - name: first plyabook hosts: all become: yes tasks: - name: first task yum: name: httpd state: latest - name: start service: name: httpd state: started enabled: yes - name: copy new html copy: src: files/index.html dest: /var/www/html/ Playbook.yaml Playパート: ヘッダー部分 taskパート: 自動化の定義 - その1 任意のタスク名 使うモジュール モジュールへ渡す引数 - その2 - その3 YAML形式で記述し、ターゲットの望ましい状態を定義する
  • 10.
    © 2023 IBMCorporation 10 © 2023 IBM Corporation YAMLと 仲良しですか? 参加者の皆様はYAMLの読み書きできますか? Jsonとはマブダチだけど...実はYAMLはあまり好きじゃないという方向けにYAMLのおさらい。 YAMLはjsonの上位互換 (らしいです) ルール:インデントするときはTab使えない。配列は ハイフンで表す #可読性Good!コメント書ける! --- people: #コメント - name: saito age: 10 friend: true - name: sagawa age: 12 friend: false { "people": [ { "name": "saito", "age": 10, "friend": "yes" }, { "name": "sagawa", "age": 12, "friend": "no" } ] } vs
  • 11.
    © 2023 IBMCorporation 11 とりあえず試してみよう その2 Playbookの作成と実行 Podman 環境 Controller Target1 Target2 playbook --- - name: first plyabook hosts: all become: true tasks: - name: first task yum: name: httpd state: latest - name: start service: name: httpd state: started enabled: yes - name: copy new html copy: src: files/index.html dest: /var/www/html/ 1. httpdをインストールして、 2. startして、 3. htmlファイルをコピーする
  • 12.
    © 2023 IBMCorporation 12 とりあえず試してみよう その2 Playbookの作成と実行 冪等性 何度繰り返しても、同じ結果が得られる Playbookに従い処理を実行する前に、 本当に処理する必要があるかを確認しています。 httpdがインストールされているか? 指定のバージョンか? を確認した上で、異なる場合だけ処理を実行します。 そのため、同じplaybookを2回、3回と実行しても 結果は変わりません。 Podman 環境 Controller Target1 Target2 playbook
  • 13.
    © 2023 IBMCorporation 13 Ansible触ってみよう! https://killercoda.com/ansible/scenario/ansible-101 webでハンズオンができます! 日本語もあるのでおすすめ! お時間ある方はぜひ実施してください! 19時まで残っているので、QA受け付けます。