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でAzureの インフラを管理する話 + α
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
YAEGASHI Takeshi
February 12, 2020
Programming
320
0
Share
AnsibleでAzureの インフラを管理する話 + α
Ansiblejpディベロッパー部 2020.02 の LT 資料です。
https://ansible-users.connpass.com/event/162758/
YAEGASHI Takeshi
February 12, 2020
More Decks by YAEGASHI Takeshi
See All by YAEGASHI Takeshi
Microsoft Entra IDとAzure App Serviceによる エンタープライズWebアプリ・サービスのプラットフォーム構築
yaegashi
0
170
Microsoft Entra/Azure による Redmine の企業内利用向けカスタマイズと運用
yaegashi
0
610
バンダイナムコスタジオにおけるクラウドネイティブなゲーム開発スタジオの挑戦
yaegashi
2
1.6k
Bandai Namco DX Cloud Studios の全貌
yaegashi
0
270
DX(開発者体験)の向上を目指す ゲーム開発インフラの進化とDX(デジタル変革)
yaegashi
0
180
Azure AD対応の認証プロキシサーバをGoで作っている話
yaegashi
0
290
ゲーム開発におけるクラウドネイティブな CI/CD の最新動向
yaegashi
0
560
rclonefunction
yaegashi
0
930
大規模ゲーム開発を支えるAzure DevOpsによるクラウドネイティブなCI/CDの紹介
yaegashi
5
2.8k
Other Decks in Programming
See All in Programming
(Re)make Regexp in Ruby: Democratizing internals for the JIT
makenowjust
3
1k
【26新卒研修資料】TDD実装演習
dip_tech
PRO
0
180
SREに優しいTerraform構成 modulesとstateの組み方
hiyanger
2
170
サプライチェーン攻撃対策「層を重ねて落ちない壁」を10日間で組み上げた話 #TechLeadConf2026
kashewnuts
1
240
実践ハーネスエンジニアリング:ステアリングループを実例から読み解く / Practical Harness Engineering: Understanding Steering Loops Through Real-World Examples
nrslib
5
5k
2026年のソフトウェア開発を考える(2026/05版) / Software Engineering Scrum Fest Niigata 2026 Edition
twada
PRO
22
12k
AIと共に生きる技術選定 2026
sgash708
0
130
PHPer、Cloudflare に引っ越す
suguruooki
1
150
Claude CodeでETLジョブ実行テストを自動化してみた
yoshikikasama
0
1.2k
cloudnative conference 2026 flyle
azihsoyn
0
160
Lightning-Fast Method Calls with Ruby 4.1 ZJIT / RubyKaigi 2026
k0kubun
3
2.7k
AI時代になぜ書くのか
mutsumix
0
340
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
A designer walks into a library…
pauljervisheath
211
24k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
55k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
1
38
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.6k
Automating Front-end Workflow
addyosmani
1370
200k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
290
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
130
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
550
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
350
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
210
Music & Morning Musume
bryan
47
7.2k
Transcript
Ansible で Azure の インフラを管理する話 + α Ansiblejpディベロッパー部 2020.02 Takeshi
Yaegashi
自己紹介 八重樫 剛史 Takeshi Yaegashi • 株式会社バンダイナムコスタジオ所属 • Linux・Unix・OSS・低レベルなことが好きなエンジニア •
ブログ https://l0w.dev Qiita https://qiita.com/yaegashi • 最近の仕事 ◦ Raspberry Pi IoT 案件 (Go) スマホゲームアプリのサーバ開発 (Go) ◦ Azure による開発者向けインフラ構築 (Python, Ansible, Go, Terraform, etc.) • 最近の登壇 ◦ Microsoft de:code 2019「DT01 ゲームメーカー目線で Azureを(略)」 ◦ Go Conference 2019 Autumn「Microsoft Graph API Library for Go」
Ansible に対する貢献 blockinfile モジュールの作者です • Ansible Meetup in Tokyo 2015.09
の LT で 開発時の顛末を話しました • 当時の Ansible の開発コミュニティについて 興味のある方は資料をご覧ください • その後 Red Hat による買収などいろいろあり ましたが、コミュニティやベンダ各社のリソー スを結集して今なお進化を続ける Ansible の 開発体制はすごい https://www.slideshare.net/yaegashi/ansible-52767041
今日の話題 Ansible で Azure インフラ管理す るときに役に立つかもしれない知 識とツール • Azure Resource
Manager • Azure Resource Explorer (Web アプリ) • azure_rids (Jinja2 フィルタ) • Ansible コレクション https://qiita.com/yaegashi/items/fa8984b724e5e819aa6e
Azure Resource Manager (ARM) • Azure リソース階層のアーキテクチャ ◦ 管理グループ ◦
サブスクリプション (ビリングの単位) ◦ リソースグループ ◦ リソース (VM やマネージドサービスなど ) • リソースは必ずリソースグループを作って 格納する必要がある • アクセス制御 (IAM) もこの階層構造を対象 とした RBAC を設定する (Azure AD と連 携する)
リソースID • ARM の階層を反映した リソースID という文字列でリソースを識別する • REST API エンドポイント
https://management.azure.com のパスでもある /subscriptions/{サブスクリプションID}/resourceGroups/{リソースグループ名} /providers/{リソースプロバイダ名}/{リソースタイプ名}/{リソース名} /{サブリソースタイプ名1}/{サブリソース名1}/...
リソースID の例 • Azure の VM 1 台を構成する 5 つのリソースの例
• サブスクリプション X1 のリソースグループ RG1 に格納した リソース名 VM1 の VM・Disk・NIC・Public IP・NSG ◦ リソースの種類が異なるならリソース名は同じでもよい ◦ 関連リソースを同じリソースグループに入れておけば権限管理や掃除が楽になる /subscriptions/X1/resourceGroups/RG1/providers/Microsoft.Compute/virtualMachines/VM1 /subscriptions/X1/resourceGroups/RG1/providers/Microsoft.Compute/disks/VM1 /subscriptions/X1/resourceGroups/RG1/providers/Microsoft.Network/networkInterfaces/VM1 /subscriptions/X1/resourceGroups/RG1/providers/Microsoft.Network/publicIPAddresses/VM1 /subscriptions/X1/resourceGroups/RG1/providers/Microsoft.Network/networkSecurityGroups/VM1
Azure Resource Explorer • https://resources.azure.com • ARM のリソース階層を探索で きる便利な Web
アプリ • 各リソースのプロパティ値の確 認やドキュメントの参照、 REST API の発行ができる
Azure Resource Explorer ♥ Ansible • なぜか Ansible プレイブックのテンプ レートを出力する機能がある
• azure_rm 汎用モジュールを使用 ◦ GET メソッド azure_rm_resource_facts Ansible 2.9 からは azure_rm_resource_info ◦ PUT/POST/DELETE メソッド azure_rm_resource 冪等性はないので要注意
Azure Resource Explorer の活用例 実際にあった例:名前が RG1 のリソースグループに入っている名前が VM1 の VM
に くっついてる最初の NIC にくっついている NSG のルールに OpenVPN ポート (1194) の 受信許可がなければ追加するのを Ansible でやりたい ◦ 最初の VM 以外のリソース名・リソースグループ名は 不明なことが多い (Azure CLI などのツールは勝手に名前をつけて作るため ) ◦ 関連リソースは各リソース内に リソースID で記録されており、 その記録場所は Azure Resource Explorer を使って容易に調べられる
ステップ 1 • VM のリソース情報を azure_rm_resource_info で取得して r に保存 -
name: VM リソース情報取得 azure_rm_resource_info: resource_group: RG1 provider: Compute resource_type: virtualMachines resource_name: VM1 register: r ARM階層構造による リソース指定
ステップ 2 • NIC のリソースIDを調べて azure_rm_resource_info で取得して r に保存 -
name: NIC リソース情報取得 azure_rm_resource_info: url: "{{r.response[0].properties.networkProfile.networkInterfaces[0].id}}" register: r リソースID 指定 Azure Resource Explorer で VM にくっついている NIC の リソースID の保存場所を調査
ステップ 3 • NSG のリソースIDを調べて azure_rm_securitygroup でルール追加 - name: NSG
ルール追加 azure_rm_securitygroup: resource_group: "{{rid.resource_group}}" name: "{{rid.name}}" rules: - name: AllowOpenVPN priority: 200 destination_port_range: 1194 direction: Inbound access: Allow vars: rid: "{{r.response[0].properties.networkSecurityGroup.id | azure_rids}}" NIC にくっついている NSG の リソースID リソースID を分解して リソース名・リソースグルー プ名を得るフィルタ azure_rm_securitygroup は リソースID による リソース指定ができない
azure_rids フィルタの開発 • リソースID文字列から、リソース名などの要素を含むディクショナリに変換する Jinja2 フィルタ (Azure SDK for Python
を利用) TASK [(2) azure_rids テスト] **************************************************************************** ok: [localhost] => (item=/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/RG1/providers /Microsoft.Compute/virtualMachines/VM1) => msg: children: '' name: VM1 namespace: Microsoft.Compute resource_group: RG1 resource_name: VM1 resource_namespace: Microsoft.Compute resource_parent: '' resource_type: virtualMachines subscription: 11111111-1111-1111-1111-111111111111 type: virtualMachines msg: "{{item | azure_rids}}"
azure_rids フィルタの配布 Ansible Galaxy による配布 • yaegashi.azureplugins ロール ◦ ansible-galaxy
install yaegashi.azureplugins ◦ yaegashi.azureplugins ロール実行で azure_rids が利用可能になる • yaegashi.azurex コレクション (Azure 2.8 以降) ◦ ansible-galaxy collection install yaegashi.azurex ◦ インストールにより yaegashi.azurex.azure_rids フィルタが利用可能になる
Ansible コレクション Ansible 2.8 からの新機能 • 複数のプレイブック・ロール・モジュール・プラグインを含む配布物が Ansible Galaxy で公開・配布できるようになる
◦ これからの Ansible のエコシステムの発展を担うと思われる ◦ Ansible Galaxy でロール以外のコードがまともに扱えるようになる意義は大きい • 情報 ◦ 利用者ガイド https://docs.ansible.com/ansible/latest/user_guide/collections_using.html ◦ 開発者ガイド https://docs.ansible.com/ansible/latest/dev_guide/developing_collections.htm ◦ Azure 公式コレクション: azure.azcollection
おわり 今後の活動予定 • azure_rids フィルタを Ansible の標準機能にする ◦ まずは公式コレクション azure.azcollection
に入れてもらう? • 全 azure_rm モジュールが リソースID を受け付けるようにする ◦ 現状では azure_rm_resource_info だけが url パラメータでリソース IDを受け付ける ◦ Azure CLI でも --ids でリソースID指定できるし、理解してもらいやすいのでは • Ansible コレクションをやっていく ◦ 自作コレクションのドキュメントの整備など、いろいろ