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
5k
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.5k
日経電子版でのDjango活用事例紹介 / djangocongressjp2022-nikkei
bungoume
4
6.7k
CircleCIの活用事例とCI高速化/circleci-community-meetup3-speedup
bungoume
3
1.6k
Password Hashing djangocongress 20180519
bungoume
5
4.1k
OSSで始めるセキュリティログ収集/oss-securitylog-builderscon2017
bungoume
29
11k
日経電子版のアプリ開発を支えるログ活用術/nikkei-log-201609
bungoume
1
1.4k
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
夢の無限スパゲッティ製造機 #phperkaigi
o0h
PRO
0
160
OCI技術資料 : コンピュート・サービス 概要
ocise
4
54k
実践 Datadog MCP Server
nulabinc
PRO
2
240
フロントエンド刷新 4年間の軌跡
yotahada3
0
500
品質を経営にどう語るか #jassttokyo / Communicating the Strategic Value of Quality to Executive Leadership
kyonmm
PRO
2
560
2026-03-11 JAWS-UG 茨城 #12 改めてALBを便利に使う
masasuzu
2
400
生成AIで速度と品質を両立する、QAエンジニア・開発者連携のAI協調型テストプロセス
shota_kusaba
0
190
僕、S3 シンプルって名前だけど全然シンプルじゃありません よろしくお願いします
yama3133
1
230
OSC仙台プレ勉強会 AlmaLinuxとは
koedoyoshida
0
190
ソフトバンク流!プラットフォームエンジニアリング実現へのアプローチ
sbtechnight
1
200
進化するBits AI SREと私と組織
nulabinc
PRO
1
250
Agent ServerはWeb Serverではない。ADKで考えるAgentOps
akiratameto
0
120
Featured
See All Featured
Rebuilding a faster, lazier Slack
samanthasiow
85
9.4k
Producing Creativity
orderedlist
PRO
348
40k
For a Future-Friendly Web
brad_frost
183
10k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
400
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
230
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
470
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
64
53k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
How to build a perfect <img>
jonoalderson
1
5.3k
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が良い感じ • もっと良い方法があったら教えて下さい