Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Ansible把握した 1日目
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Masaru OKI
February 20, 2021
Technology
420
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Ansible把握した 1日目
構成管理ツールAnsibleをざっと触ってみて、現時点での理解をまとめてみました。
Masaru OKI
February 20, 2021
More Decks by Masaru OKI
See All by Masaru OKI
SONiCを自前でビルドする話
imasaruoki
2
1.9k
NPLによるデータプレーンプログラミング
imasaruoki
8
2.8k
SONiC近況報告 2019/Fall
imasaruoki
1
1.4k
ホワイトボックススイッチをAnsibleで操る話
imasaruoki
2
2.7k
ホワイトボックススイッチとNOSを取り巻く状況について
imasaruoki
3
2.7k
SONICイントロダクション
imasaruoki
1
590
SONiCをはじめてみよう
imasaruoki
6
2.4k
SONiCで設定するFRRouting
imasaruoki
0
2k
SONiCトラブルシューティング
imasaruoki
4
730
Other Decks in Technology
See All in Technology
Head First モブプログラミング / Head First Mobprogramming
takaking22
10
12k
MulticaとPi Coding Agentで、小規模OSSを30本同時運用した流れ
eiei114
0
110
【CEDEC2026】Creative Approaches to Localizing the Dialects and Unique Speech of Umamusume: Pretty Derby Characters in English
cygames
PRO
3
22k
変化の早いClaude Codeを 書籍に落とし込む
oikon48
7
1.4k
オートロックマンションなのに、各部屋は施錠なし!? 攻撃者が組織内ネットワークで大暴れする理由 / The Front Door Is Locked, but the Rooms Are Wide Open: Why Attackers Move Freely Inside Enterprise Networks
nttcom
1
5.8k
『三匹の子ぶた』から学ぶネットワークセキュリティの昔と今 / Network Security: Then and Now Through the Lens of The Three Little Pigs
nttcom
1
6k
AIコーディングの次。コードレビューと理解負荷を解消して組織の開発生産性を高める
moongift
PRO
2
2.6k
Service Connect 上のサービスに ECS Service の外側から到達できなかった話
ota1022
1
250
生成 AI の基礎 〜 サンプル実装で学ぶ基本原理
enakai00
7
4.4k
AWS ネットワーク構築でハマった(ハマりかけた) 5選とそこから得た教訓
nagisa53
4
220
Bill One 開発エンジニア 紹介資料
sansan33
PRO
7
19k
Forza Horizon 6 のテレメトリ機能で 自動運転に使えそうな学習データを集める話
henjin0
0
180
Featured
See All Featured
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
240
Google's AI Overviews - The New Search
badams
0
1.1k
SEO for Brand Visibility & Recognition
aleyda
0
4.7k
Building Applications with DynamoDB
mza
96
7.2k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
25k
Faster Mobile Websites
deanohume
310
32k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
430
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.7k
Building the Perfect Custom Keyboard
takai
2
840
Utilizing Notion as your number one productivity tool
mfonobong
4
540
Transcript
Ansible把握した 1日目 Feb 20, 2021 Masaru OKI @masaru0714
Ansible? 構成管理ツール。ChefとかPuppetとかも構成管理ツール。 サーバやネットワーク機器にいろいろな設定を入れるためのツール。 対象によるがソフトウェアのインストールなどもできる。 sshで入れてPythonが動く機器ならどうにかできる。 インストールは公式サイトの指示に従って。
ansibleとansible-playbook ワンライナー的な一発実行はansibleコマンド(全ホストにpingを打つとか) ansible all -m ping 複数のタスクをまとめて実行する場合はansible-playbookコマンド ansible-playbook deploy.yml ホストの一覧(とsshすべきIPアドレス)はinventoryと呼ばれるファイルに書く。
(ファイル名がinventoryというわけではない)
実行準備 ターゲットホストにsshでログインできるようにしておく必要がある。 ターゲットホストに~/.ssh/authorized_keysを置くのが一般的のようだ。 rootである必要はないが、その場合sudoできること(doasなども選べる)。
ansible-playbook おおざっぱな概略図 h1 h2 h3 h4 [db] h1 ansible_ssh_host=192.168.0.1 h2
ansible_ssh_host=192.168.0.2 [web] h3 ansible_ssh_host=192.168.0.3 h4 ansible_ssh_host=192.168.0.4 hosts (inventory) ホストとグループの定義 変数も定義できる - hosts: db roles: - dev-sec.mysql - hosts: web roles: - nginxinc.nginx Playbook ホストやグループごとに何 を構成するかの定義 taskを直接書くか、あるい はroleを指定する nodes: h1: mysql_databases: - name: customer h2: mysql_databases: - name: statistics h3: nginx_start: false h4: nginx_debug_output: true role dev-sec.mysql role nginxinc.nginx customer statistics nginx install nginx install nginx start debug output 外部変数ファイル (これもinventory) 構成の設定値や挙動の指定 この例ではnodesグループのホ ストh1,h2,h3,h4の変数を定義 している role=定義済task task (mysql_db呼出) task (apt呼出)
用語解説 moduleは構成対象のホストで実行されるプログラム。 inventoryはパラメータの集合。ホストの識別名とIPアドレスが必要。 taskはinventoryから必要な情報を引き出してmoduleを使って実行。 roleは繰り返し使われるtaskのパラメータを変数にして呼出可能にしたもの。 Playbookはホストあるいはグループとtaskやroleとの組み合わせを記述する。
taskとmodule Playbook tasks: - name: やることを人間にわかるように書く ここがmodule名: moduleに与えるパラメータ: 値 をわらわら並べる
- name: Webサーバを起動する service: name: httpd state: started
taskとinventory inventory h1: webserver: started Playbook - hosts: h1 tasks:
- name: Webサーバを用意する(起動はinventory次第) service: name: httpd state: {{ webserver }}
roleとtask Playbookに記載するtaskを別ファイルに切り出して名前をつけたのがrole Playbook roles: - role名 で呼び出す。 • 呼び出したroleがどんな変数を参照しているかはドキュメントかソースを読む。 •
自作roleを用意することもできる。 roles/role名/task/main.ymlに - name: から記述する。 • 既存のroleがたくさんあり、ansible-galaxyコマンドでインストールできる。 • ansible-galaxy search キーワードで検索できる。 • ありすぎてどれを使えばいいのかわからない。 公式があればなるべくそれを。
Playbookとtask,role Playbook - hosts: 識別子(ホストでもグループでもいい) tasks: - name: 識別子のホストで実行するタスクを並べる service:
name: httpd roles: - gobgp - hosts: 識別子 以下略
inventory(変数)はどこに書く? 書ける箇所がたくさんありすぎる。 • グローバルなのは/etc/ansible/hosts • ansible-playbookコマンドのパラメータで直接指定 • ansible-playbookコマンドの-iでファイルを指定できる • Playbookの中でvars:指定で書くこともできる
• host_vars/ホスト識別子.yml に書くこともできる • group_vars/グループ識別子.yml に書くこともできる • group_vars/all.yml に全部まとめて書くこともできる どこに書かれた値を使うかの優先順位がある。 複数箇所に書くと混乱するので注意。
inventory(hosts)のフォーマット hosts (INI形式) [Guests] guest1 ansible_ssh_host=192.168.122.116 guest2 ansible_ssh_host=192.168.122.117 hosts.yml (YAML
形式) all: children: Guests: hosts: guest1: ansible_ssh_host: 192.168.122.116 guest2: ansible_ssh_host: 192.168.122.117
hosts(あるいはhosts.yml)の場所 ansible.cfg(実はこれの場所もあちこちに用意できる)に [defaults] inventory = 任意のpath と書いておくと、/etc/ansible/hostsではなくそこが参照される。 あるいは、明示的に ansible-playbook -i
任意のpath と指定する。
やってみた(VMの2本めの足にIPアドレスを振る) • VMが起動していることが前提。 • IPアドレスは192.168.122.116/24でホストからアクセスできる。 • 試したVMはUbuntu 20.04LTS • アカウントはubuntu
• ~/.ssh/authorized_keys配置済 • パスワードレスでsudoできることも確認済。 • ネットワークインタフェースはens3, ens4。ens3はAnsibleとの通信用。
やってみた(VMの2本めの足にIPアドレスを振る) deploy.yml - hosts: Guests user: ubuntu become: yes become_method:
sudo roles: - mrlesmithjr.config-interfaces hosts [Guests] guest ansible_ssh_host=192.168.122.116 group_vars/all nodes: guest: network_interfaces: - name: ens4 method: static address: 192.168.0.1 netmask: 255.255.255.0 ansible.cfg [defaults] inventory=hosts 実行 ansible-galaxy install mrlesmithjr.config-interfaces ansible-playbook -i hosts deploy.yml
まとめ • Ansible便利! • 下準備がちょっと面倒だけど! • role山盛りあってどれがちゃんと使えるか探すの大変だけど!