Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
AnsibleでAzureの インフラを管理する話 + α
Search
YAEGASHI Takeshi
February 12, 2020
Programming
0
310
AnsibleでAzureの インフラを管理する話 + α
Ansiblejpディベロッパー部 2020.02 の LT 資料です。
https://ansible-users.connpass.com/event/162758/
YAEGASHI Takeshi
February 12, 2020
Tweet
Share
More Decks by YAEGASHI Takeshi
See All by YAEGASHI Takeshi
Microsoft Entra IDとAzure App Serviceによる エンタープライズWebアプリ・サービスのプラットフォーム構築
yaegashi
0
150
Microsoft Entra/Azure による Redmine の企業内利用向けカスタマイズと運用
yaegashi
0
530
バンダイナムコスタジオにおけるクラウドネイティブなゲーム開発スタジオの挑戦
yaegashi
2
1.4k
Bandai Namco DX Cloud Studios の全貌
yaegashi
0
220
DX(開発者体験)の向上を目指す ゲーム開発インフラの進化とDX(デジタル変革)
yaegashi
0
150
Azure AD対応の認証プロキシサーバをGoで作っている話
yaegashi
0
260
ゲーム開発におけるクラウドネイティブな CI/CD の最新動向
yaegashi
0
510
rclonefunction
yaegashi
0
890
大規模ゲーム開発を支えるAzure DevOpsによるクラウドネイティブなCI/CDの紹介
yaegashi
5
2.7k
Other Decks in Programming
See All in Programming
sbt 2
xuwei_k
0
290
Building AI Agents with TypeScript #TSKaigiHokuriku
izumin5210
6
1.3k
connect-python: convenient protobuf RPC for Python
anuraaga
0
400
AIエンジニアリングのご紹介 / Introduction to AI Engineering
rkaga
6
2.1k
Socio-Technical Evolution: Growing an Architecture and Its Organization for Fast Flow
cer
PRO
0
330
著者と進める!『AIと個人開発したくなったらまずCursorで要件定義だ!』
yasunacoffee
0
130
ViewファーストなRailsアプリ開発のたのしさ
sugiwe
0
460
JETLS.jl ─ A New Language Server for Julia
abap34
1
390
Canon EOS R50 V と R5 Mark II 購入でみえてきた最近のデジイチ VR180 事情、そして VR180 静止画に活路を見出すまで
karad
0
110
Github Copilotのチャット履歴ビューワーを作りました~WPF、dotnet10もあるよ~ #clrh111
katsuyuzu
0
110
WebRTC、 綺麗に見るか滑らかに見るか
sublimer
1
160
TestingOsaka6_Ozono
o3
0
150
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
55
9.3k
Thoughts on Productivity
jonyablonski
73
5k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
4 Signs Your Business is Dying
shpigford
186
22k
A better future with KSS
kneath
240
18k
What's in a price? How to price your products and services
michaelherold
246
13k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
1
100
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.6k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
Side Projects
sachag
455
43k
Build The Right Thing And Hit Your Dates
maggiecrowley
38
3k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
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 コレクションをやっていく ◦ 自作コレクションのドキュメントの整備など、いろいろ