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
Dynamic Inventoryと参照変数
Search
bungoume
September 22, 2014
Technology
2
4.8k
Dynamic Inventoryと参照変数
Ansible Meetup in Tokyo 2014.09でのLT発表資料です。
http://ansible-users.connpass.com/event/7942/
bungoume
September 22, 2014
Tweet
Share
More Decks by bungoume
See All by bungoume
djangocongressjp2023_password_hash
bungoume
2
1.2k
日経電子版でのDjango活用事例紹介 / djangocongressjp2022-nikkei
bungoume
4
5.1k
CircleCIの活用事例とCI高速化/circleci-community-meetup3-speedup
bungoume
3
1.5k
Password Hashing djangocongress 20180519
bungoume
5
3.9k
OSSで始めるセキュリティログ収集/oss-securitylog-builderscon2017
bungoume
29
11k
日経電子版のアプリ開発を支えるログ活用術/nikkei-log-201609
bungoume
1
1.3k
Kibanaで秒間1万件のアクセスを可視化した話/nikkei-kibana-loganalyst2015
bungoume
20
17k
uwsgi-docker-pycon2015
bungoume
10
60k
Ansibleを結構使ってみた/ansible-nikkei-2015
bungoume
32
15k
Other Decks in Technology
See All in Technology
Amazon S3 Tablesと外部分析基盤連携について / Amazon S3 Tables and External Data Analytics Platform
nttcom
0
130
【Developers Summit 2025】プロダクトエンジニアから学ぶ、 ユーザーにより高い価値を届ける技術
niwatakeru
2
1.4k
分解して理解する Aspire
nenonaninu
1
140
OpenID BizDay#17 KYC WG活動報告(法人) / 20250219-BizDay17-KYC-legalidentity
oidfj
0
250
PHPで印刷所に入稿できる名札データを作る / Generating Print-Ready Name Tag Data with PHP
tomzoh
0
110
表現を育てる
kiyou77
1
210
RECRUIT TECH CONFERENCE 2025 プレイベント【高橋】
recruitengineers
PRO
0
160
2/18/25: Java meets AI: Build LLM-Powered Apps with LangChain4j
edeandrea
PRO
0
120
明日からできる!技術的負債の返済を加速するための実践ガイド~『ホットペッパービューティー』の事例をもとに~
recruitengineers
PRO
3
400
滅・サービスクラス🔥 / Destruction Service Class
sinsoku
6
1.6k
Moved to https://speakerdeck.com/toshihue/presales-engineer-career-bridging-tech-biz-ja
toshihue
2
740
Classmethod AI Talks(CATs) #17 司会進行スライド(2025.02.19) / classmethod-ai-talks-aka-cats_moderator-slides_vol17_2025-02-19
shinyaa31
0
120
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
55
9.2k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.7k
Writing Fast Ruby
sferik
628
61k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
10
1.3k
Bootstrapping a Software Product
garrettdimon
PRO
306
110k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.5k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
4
330
Fashionably flexible responsive web design (full day workshop)
malarkey
406
66k
How to Ace a Technical Interview
jacobian
276
23k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Navigating Team Friction
lara
183
15k
Transcript
Dynamic Inventoryと参照変数 Ansible Meetup Tokyo 2014.09 @bungoume
内容 • 話すこと • Dynamic Inventory(EC2)について • 環境ごとに変数を使い分けるプラクティス • 話さないこと
• Ansible変数展開の順序
Dynamic Inventoryとは • Hostsをスクリプトで動的生成 • EC2やGCE, Zabbixなどの外部リソースからHostsを生成できる • プラグインとして用意 •
https://github.com/ansible/ansible/tree/devel/plugins/inventory • EC2.pyの場合 • タグやセキュリティグループ、リージョンなどを元にホストグループを管理 • ec2.iniで対象リージョンを制限したり、フィルタをかけたりできる • hostsとして利用できる • hosts/ ec2 ec2.ini • ansible-playbook –i hosts webservers.yml
EC2のAnsible管理用タグ付け例 • タグを用いて管理 • タグの例 • hostname: dbserver01a • env:
production, dev • role: webserver, dbserver • number: 01, 02, … • group: a, b, …. • ec2モジュールでインスタンス起動時にタグ付け or 手動でタグ付け • タグを指定してplaybook実行 • 例:ゾーンBにあるdev環境のwebserverにplaybookを実行 • ansible-playbook –i hosts webservers.yml --limit tag_env_dev:&ap-northeast-1b
こういうことがしたい • 環境とホストグループによって 変数の値を切り替えたい • 例: monitoring roleのlog_server変数(送り先) • production
の webserver は 10.0.1.100 • production の dbserver は 10.0.1.101 • dev の webserver は 10.0.2.100 • dev の dbserver は 10.0.2.101 • limitのand実行では難しい(playbook内で条件分岐が必要になる) 10.0.1.100 10.0.1.101 10.0.2.100 10.0.2.101
思いついた方法(2つ) • 方法1: inventory varsを使う • 方法2: vars_filesを使い、うまいこと読み込む
• hostsディレクトリに変数ファイルを置く hosts/ dev/ ec2 (ec2.py) ec2.ini (instance_filters = tag:env=dev)
group_vars/webserver (変数yaml) production/ …. group_vars/webserver (変数yaml) webservers.yml (playbook) • cat hosts/dev/group_vars/webserver --- log_server: 10.0.2.100 方法1: inventory varsを使う
- hosts: tag_role_webserver user: ec2-user tasks: - debug: var=log_server 方法1:
inventory varsを使う • Playbook ( webservers.yml ) • 実行 • ansible-playbook –i hosts/dev webservers.yml • group_vars/webserverを読み込み、 hosts/production/group_vars/webserverで上書きする ~~~ TASK: [debug var=log_server] ******************************************************** ok: [10.0.2.1] => { “log_server": "10.0.2.100" }
hosts/ ec2, ec2.ini vars/ nothing.yml tag_role_webserver.yml tag_env_dev/ tag_role_webserver.yml webservers.yml (playbook)
方法2: vars_filesを使う • 以下の様なディレクトリ構成 • エラー回避用にnothing.ymlという空ファイルを用意しておく
方法2: vars_filesを使う • Playbook(webservers.yml)に以下を記述 • 実行 • ansible-playbook –i hosts
webservers.yml --limit tag_env_dev • まずtag_role_webserver.ymlがあれば読込み、 tag_env_dev/tag_role_webserver.ymlがあれば上書きする - hosts: tag_role_webserver user: ec2-user vars_files: - [“vars/{{ ec2_tag_role }}.yml”, vars/nothing.yml] - [“vars/{{ ec2_tag_env }}/{{ ec2_tag_role }}.yml”, vars/nothing.yml] tasks: - debug: var=log_server
まとめ • 方法1( inventory vars ) • playbookの書き換えが不要 • limitを忘れて全体実行するリスクがない
• Inventoryファイルと組み合わせても使いやすい • 方法2( vars_files ) • 多段に利用可能 • {{ ec2_tag_env }}/{{ ec2_tag_role }}/{{ ec2_tag_group }}.yml • 読込優先度が自由に変更できる • まずは方法1、変数が増え、複雑な場合は方法2が良い感じ • もっと良い方法があったら教えて下さい