SlideShare a Scribd company logo
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 コレクションをやっていく
○ 自作コレクションのドキュメントの整備など、いろいろ

More Related Content

Similar to AnsibleでAzureの インフラを管理する話 + α

技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
Toru Yamaguchi
 
[Japan Tech summit 2017] DEP 005
[Japan Tech summit 2017] DEP 005[Japan Tech summit 2017] DEP 005
[Japan Tech summit 2017] DEP 005
Microsoft Tech Summit 2017
 
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せます
infinite_loop
 
くまあず Nchikita 140628-2
くまあず Nchikita 140628-2くまあず Nchikita 140628-2
くまあず Nchikita 140628-2
wintechq
 
今改めて学ぶ Microsoft Azure 基礎知識
今改めて学ぶ Microsoft Azure 基礎知識今改めて学ぶ Microsoft Azure 基礎知識
今改めて学ぶ Microsoft Azure 基礎知識
Minoru Naito
 
PHP on Windows Azure in Open Source Conference
PHP on Windows Azure in Open Source ConferencePHP on Windows Azure in Open Source Conference
PHP on Windows Azure in Open Source Conference
Microsoft
 
msgraph-sshpubkey
msgraph-sshpubkeymsgraph-sshpubkey
msgraph-sshpubkey
yaegashi
 
Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osaka
Naotaka Jay HOTTA
 
PHP on Windows Azure
PHP on Windows AzurePHP on Windows Azure
PHP on Windows Azure
Microsoft
 
マイクロソフトの提供するMA6向けAPIのご紹介
マイクロソフトの提供するMA6向けAPIのご紹介マイクロソフトの提供するMA6向けAPIのご紹介
マイクロソフトの提供するMA6向けAPIのご紹介
Sunao Tomita
 
LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係
Hiraku Komuro
 
de:code 2019 Cloud トラック 総まとめ!
de:code 2019 Cloud トラック 総まとめ!de:code 2019 Cloud トラック 総まとめ!
de:code 2019 Cloud トラック 総まとめ!
Minoru Naito
 
【de:code 2020】 2020 年も最高のゲームをつくろう! Game Stack でゲーム開発をしよう! ~ LiveOps とデータ分析編 ~
【de:code 2020】 2020 年も最高のゲームをつくろう! Game Stack でゲーム開発をしよう! ~ LiveOps とデータ分析編 ~【de:code 2020】 2020 年も最高のゲームをつくろう! Game Stack でゲーム開発をしよう! ~ LiveOps とデータ分析編 ~
【de:code 2020】 2020 年も最高のゲームをつくろう! Game Stack でゲーム開発をしよう! ~ LiveOps とデータ分析編 ~
日本マイクロソフト株式会社
 
2020 年も最高のゲームをつくろう! Game Stack でゲーム開発をしよう! ~ LiveOps とデータ分析編 ~
2020 年も最高のゲームをつくろう! Game Stack でゲーム開発をしよう! ~ LiveOps とデータ分析編 ~2020 年も最高のゲームをつくろう! Game Stack でゲーム開発をしよう! ~ LiveOps とデータ分析編 ~
2020 年も最高のゲームをつくろう! Game Stack でゲーム開発をしよう! ~ LiveOps とデータ分析編 ~
Daisuke Masubuchi
 
マイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorpマイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorp
Masahito Zembutsu
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
Hiroshi SHIBATA
 
[db tech showcase OSS 2017] A24: マイクロソフトと OSS Database - Azure Database for M...
[db tech showcase OSS 2017] A24: マイクロソフトと OSS Database - Azure Database for M...[db tech showcase OSS 2017] A24: マイクロソフトと OSS Database - Azure Database for M...
[db tech showcase OSS 2017] A24: マイクロソフトと OSS Database - Azure Database for M...
Insight Technology, Inc.
 
Open Shift v3 主要機能と内部構造のご紹介
Open Shift v3 主要機能と内部構造のご紹介Open Shift v3 主要機能と内部構造のご紹介
Open Shift v3 主要機能と内部構造のご紹介
Etsuji Nakai
 
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築するピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
Takahito Tejima
 

Similar to AnsibleでAzureの インフラを管理する話 + α (20)

技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
 
[Japan Tech summit 2017] DEP 005
[Japan Tech summit 2017] DEP 005[Japan Tech summit 2017] DEP 005
[Japan Tech summit 2017] DEP 005
 
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せます
 
くまあず Nchikita 140628-2
くまあず Nchikita 140628-2くまあず Nchikita 140628-2
くまあず Nchikita 140628-2
 
今改めて学ぶ Microsoft Azure 基礎知識
今改めて学ぶ Microsoft Azure 基礎知識今改めて学ぶ Microsoft Azure 基礎知識
今改めて学ぶ Microsoft Azure 基礎知識
 
PHP on Windows Azure in Open Source Conference
PHP on Windows Azure in Open Source ConferencePHP on Windows Azure in Open Source Conference
PHP on Windows Azure in Open Source Conference
 
msgraph-sshpubkey
msgraph-sshpubkeymsgraph-sshpubkey
msgraph-sshpubkey
 
Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osaka
 
PHP on Windows Azure
PHP on Windows AzurePHP on Windows Azure
PHP on Windows Azure
 
PHP on Windows Azure
PHP on Windows AzurePHP on Windows Azure
PHP on Windows Azure
 
マイクロソフトの提供するMA6向けAPIのご紹介
マイクロソフトの提供するMA6向けAPIのご紹介マイクロソフトの提供するMA6向けAPIのご紹介
マイクロソフトの提供するMA6向けAPIのご紹介
 
LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係
 
de:code 2019 Cloud トラック 総まとめ!
de:code 2019 Cloud トラック 総まとめ!de:code 2019 Cloud トラック 総まとめ!
de:code 2019 Cloud トラック 総まとめ!
 
【de:code 2020】 2020 年も最高のゲームをつくろう! Game Stack でゲーム開発をしよう! ~ LiveOps とデータ分析編 ~
【de:code 2020】 2020 年も最高のゲームをつくろう! Game Stack でゲーム開発をしよう! ~ LiveOps とデータ分析編 ~【de:code 2020】 2020 年も最高のゲームをつくろう! Game Stack でゲーム開発をしよう! ~ LiveOps とデータ分析編 ~
【de:code 2020】 2020 年も最高のゲームをつくろう! Game Stack でゲーム開発をしよう! ~ LiveOps とデータ分析編 ~
 
2020 年も最高のゲームをつくろう! Game Stack でゲーム開発をしよう! ~ LiveOps とデータ分析編 ~
2020 年も最高のゲームをつくろう! Game Stack でゲーム開発をしよう! ~ LiveOps とデータ分析編 ~2020 年も最高のゲームをつくろう! Game Stack でゲーム開発をしよう! ~ LiveOps とデータ分析編 ~
2020 年も最高のゲームをつくろう! Game Stack でゲーム開発をしよう! ~ LiveOps とデータ分析編 ~
 
マイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorpマイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorp
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
 
[db tech showcase OSS 2017] A24: マイクロソフトと OSS Database - Azure Database for M...
[db tech showcase OSS 2017] A24: マイクロソフトと OSS Database - Azure Database for M...[db tech showcase OSS 2017] A24: マイクロソフトと OSS Database - Azure Database for M...
[db tech showcase OSS 2017] A24: マイクロソフトと OSS Database - Azure Database for M...
 
Open Shift v3 主要機能と内部構造のご紹介
Open Shift v3 主要機能と内部構造のご紹介Open Shift v3 主要機能と内部構造のご紹介
Open Shift v3 主要機能と内部構造のご紹介
 
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築するピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
 

More from yaegashi

Terraforming Windows Virtual Desktop Infrastructure on Azure
Terraforming Windows Virtual Desktop Infrastructure on AzureTerraforming Windows Virtual Desktop Infrastructure on Azure
Terraforming Windows Virtual Desktop Infrastructure on Azure
yaegashi
 
Azure DevOps で実現する Unity アプリのハイパフォーマンス CI/CD
Azure DevOps で実現する Unity アプリのハイパフォーマンス CI/CDAzure DevOps で実現する Unity アプリのハイパフォーマンス CI/CD
Azure DevOps で実現する Unity アプリのハイパフォーマンス CI/CD
yaegashi
 
Customazed CLI: カスタムVMイメージ作成支援ツール
Customazed CLI: カスタムVMイメージ作成支援ツールCustomazed CLI: カスタムVMイメージ作成支援ツール
Customazed CLI: カスタムVMイメージ作成支援ツール
yaegashi
 
Goで作って配布するAzureコマンドラインユーティリティ
Goで作って配布するAzureコマンドラインユーティリティGoで作って配布するAzureコマンドラインユーティリティ
Goで作って配布するAzureコマンドラインユーティリティ
yaegashi
 
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
yaegashi
 
msgraph: Terraform provider for Microsoft Graph
msgraph: Terraform provider for Microsoft Graphmsgraph: Terraform provider for Microsoft Graph
msgraph: Terraform provider for Microsoft Graph
yaegashi
 
go generate 完全入門
go generate 完全入門go generate 完全入門
go generate 完全入門
yaegashi
 
Raspberry Pi + Go で IoT した話
Raspberry Pi + Go で IoT した話Raspberry Pi + Go で IoT した話
Raspberry Pi + Go で IoT した話
yaegashi
 
golang binary hacks
golang binary hacksgolang binary hacks
golang binary hacks
yaegashi
 
StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件
yaegashi
 
Ansible モジュール 作成・配布・貢献
Ansible モジュール 作成・配布・貢献Ansible モジュール 作成・配布・貢献
Ansible モジュール 作成・配布・貢献
yaegashi
 

More from yaegashi (11)

Terraforming Windows Virtual Desktop Infrastructure on Azure
Terraforming Windows Virtual Desktop Infrastructure on AzureTerraforming Windows Virtual Desktop Infrastructure on Azure
Terraforming Windows Virtual Desktop Infrastructure on Azure
 
Azure DevOps で実現する Unity アプリのハイパフォーマンス CI/CD
Azure DevOps で実現する Unity アプリのハイパフォーマンス CI/CDAzure DevOps で実現する Unity アプリのハイパフォーマンス CI/CD
Azure DevOps で実現する Unity アプリのハイパフォーマンス CI/CD
 
Customazed CLI: カスタムVMイメージ作成支援ツール
Customazed CLI: カスタムVMイメージ作成支援ツールCustomazed CLI: カスタムVMイメージ作成支援ツール
Customazed CLI: カスタムVMイメージ作成支援ツール
 
Goで作って配布するAzureコマンドラインユーティリティ
Goで作って配布するAzureコマンドラインユーティリティGoで作って配布するAzureコマンドラインユーティリティ
Goで作って配布するAzureコマンドラインユーティリティ
 
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
 
msgraph: Terraform provider for Microsoft Graph
msgraph: Terraform provider for Microsoft Graphmsgraph: Terraform provider for Microsoft Graph
msgraph: Terraform provider for Microsoft Graph
 
go generate 完全入門
go generate 完全入門go generate 完全入門
go generate 完全入門
 
Raspberry Pi + Go で IoT した話
Raspberry Pi + Go で IoT した話Raspberry Pi + Go で IoT した話
Raspberry Pi + Go で IoT した話
 
golang binary hacks
golang binary hacksgolang binary hacks
golang binary hacks
 
StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件
 
Ansible モジュール 作成・配布・貢献
Ansible モジュール 作成・配布・貢献Ansible モジュール 作成・配布・貢献
Ansible モジュール 作成・配布・貢献
 

AnsibleでAzureの インフラを管理する話 + α

  • 1. Ansible で Azure の インフラを管理する話 + α Ansiblejpディベロッパー部 2020.02 Takeshi Yaegashi
  • 2. 自己紹介 八重樫 剛史 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」
  • 3. Ansible に対する貢献 blockinfile モジュールの作者です ● Ansible Meetup in Tokyo 2015.09 の LT で 開発時の顛末を話しました ● 当時の Ansible の開発コミュニティについて 興味のある方は資料をご覧ください ● その後 Red Hat による買収などいろいろあり ましたが、コミュニティやベンダ各社のリソー スを結集して今なお進化を続ける Ansible の 開発体制はすごい https://www.slideshare.net/yaegashi/ansible-52767041
  • 4. 今日の話題 Ansible で Azure インフラ管理す るときに役に立つかもしれない知 識とツール ● Azure Resource Manager ● Azure Resource Explorer (Web アプリ) ● azure_rids (Jinja2 フィルタ) ● Ansible コレクション https://qiita.com/yaegashi/items/fa8984b724e5e819aa6e
  • 5. Azure Resource Manager (ARM) ● Azure リソース階層のアーキテクチャ ○ 管理グループ ○ サブスクリプション (ビリングの単位) ○ リソースグループ ○ リソース (VM やマネージドサービスなど ) ● リソースは必ずリソースグループを作って 格納する必要がある ● アクセス制御 (IAM) もこの階層構造を対象 とした RBAC を設定する (Azure AD と連 携する)
  • 6. リソースID ● ARM の階層を反映した リソースID という文字列でリソースを識別する ● REST API エンドポイント https://management.azure.com のパスでもある /subscriptions/{サブスクリプションID}/resourceGroups/{リソースグループ名} /providers/{リソースプロバイダ名}/{リソースタイプ名}/{リソース名} /{サブリソースタイプ名1}/{サブリソース名1}/...
  • 7. リソース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
  • 8. Azure Resource Explorer ● https://resources.azure.com ● ARM のリソース階層を探索で きる便利な Web アプリ ● 各リソースのプロパティ値の確 認やドキュメントの参照、 REST API の発行ができる
  • 9. 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 冪等性はないので要注意
  • 10. Azure Resource Explorer の活用例 実際にあった例:名前が RG1 のリソースグループに入っている名前が VM1 の VM に くっついてる最初の NIC にくっついている NSG のルールに OpenVPN ポート (1194) の 受信許可がなければ追加するのを Ansible でやりたい ○ 最初の VM 以外のリソース名・リソースグループ名は 不明なことが多い (Azure CLI などのツールは勝手に名前をつけて作るため ) ○ 関連リソースは各リソース内に リソースID で記録されており、 その記録場所は Azure Resource Explorer を使って容易に調べられる
  • 11. ステップ 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階層構造による リソース指定
  • 12. ステップ 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 の保存場所を調査
  • 13. ステップ 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 による リソース指定ができない
  • 14. 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}}"
  • 15. 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 フィルタが利用可能になる
  • 16. 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
  • 17. おわり 今後の活動予定 ● azure_rids フィルタを Ansible の標準機能にする ○ まずは公式コレクション azure.azcollection に入れてもらう? ● 全 azure_rm モジュールが リソースID を受け付けるようにする ○ 現状では azure_rm_resource_info だけが url パラメータでリソース IDを受け付ける ○ Azure CLI でも --ids でリソースID指定できるし、理解してもらいやすいのでは ● Ansible コレクションをやっていく ○ 自作コレクションのドキュメントの整備など、いろいろ