- はじめに
- 背景
- サブネット委任とは
- サブネット委任のリソースタイプと名前空間のマッピング
- 調べ方
- おわりに
はじめに
こんにちは、ACS事業部 CIチームの平井です。 今回は、Terraformを使ってAzure環境においてサブネット委任を設定する際のAzureRMプロバイダーのリソースタイプとAzureリソースプロバイダーの名前空間のマッピングについていくつかピックアップしてお話しします。
最後に自分が今回用いた調べ方についても紹介いたしますので、ぜひご覧いただけるとありがたいです。
背景
最近の研修でTerraformを触れる機会がありましたが、その際にAzureのリソースプロバイダーの名前空間とサービス名が一致しないケースが多く、これが原因で設定に時間がかかることがありました。そこで、備忘録も兼ねてこの記事を書かせていただきました。
サブネット委任とは
Azureの仮想ネットワーク(VNet)におけるサブネット委任とは、特定のAzureサービスがサブネット内のリソースを管理および展開できるようにする機能のことを指します。この機能を使用することで、Azureサービスがサブネット内でネットワークリソースを自動的に作成、管理、削除することが容易になります。
サブネット委任のリソースタイプと名前空間のマッピング
個人的に利用機会の多いと考えるサブネット委任先のリソースタイプと名前空間をいくつかピックアップして紹介します。
1. コンピューティングとアプリケーションホスティング
Azure App Service Plan
タイプ: azurerm_service_plan
名前空間: Microsoft.Web/serverFarms
Azure App Service Environment
タイプ: azurerm_service_environment
名前空間: Microsoft.Web/hostingEnvironments
Azure Kubernetes Service (AKS)
タイプ: azurerm_kubernetes_cluster
名前空間: Microsoft.ContainerService/managedClusters
Azure Container Instances
タイプ: azurerm_container_group
名前空間: Microsoft.ContainerInstance/containerGroups
Azure Container Apps environments
タイプ: azurerm_container_app_environment
名前空間: Microsoft.App/environments
2. データベースサービス
Azure Database for PostgreSQL - Flexible Server
タイプ: azurerm_postgresql_flexible_server
名前空間: Microsoft.DBforPostgreSQL/flexibleServers
Azure Database for MySQL - Flexible Server
タイプ: azurerm_mysql_flexible_server
名前空間: Microsoft.DBforMySQL/flexibleServers
Azure SQL Server
タイプ: azurerm_mssql_server
名前空間: Microsoft.Sql/servers
Azure SQL Managed Instance
タイプ: azurerm_mssql_managed_instance
名前空間: Microsoft.Sql/managedInstances
3. ネットワーキングとセキュリティ
Application Gateway for Containers
タイプ: azurerm_application_load_balancer
名前空間: Microsoft.ServiceNetworking/trafficControllers
Azure Network Watcher
タイプ: azurerm_network_watcher
名前空間: Microsoft.Network/networkWatchers
Azure VPN Gateway
タイプ: azurerm_virtual_network_gateway
名前空間: Microsoft.Network/virtualNetworkGateways
Azure DNS Private Resolver
タイプ: azurerm_private_dns_resolver
名前空間: Microsoft.Network/dnsResolvers
4. API管理とインテグレーション
Azure API Management
タイプ: azurerm_api_management
名前空間: Microsoft.ApiManagement/service
Azure NetApp Files
タイプ: azurerm_netapp_volume
名前空間: Microsoft.Netapp/volumes
調べ方
1. Azureのドキュメント
Microsoft Learnで、各サービスのリソースプロバイダーを確認。
2. Terraform AzureRMのドキュメント
Terraform Resistryより、各リソースタイプの詳細を確認。
おまけ
ドキュメントのソースソードを検索することで、見つけることもできます。
以下のAzureRM公式リポジトリよりコードをクローンします。
検索用のpythonコードの作成
import glob # ディレクトリ内のマークダウンファイルを検索 markdown_files = glob.glob('~/terraform-provider-azurerm/website/docs/r/*.markdown') # 検索ワード keyword = 'xxx' # 各マークダウンファイルを読み込み、keywordを含む行を出力 for file in markdown_files: with open(file, 'r', encoding='utf-8') as f: lines = f.readlines() start_printing = False for line in lines: if '## Import' in line: start_printing = True if start_printing and keyword.lower() in line.lower(): print(f'{file}: {line}')
ファイルの実行
例
keyword
をazurerm_service_plan
としたときの出力terraform-provider-azurerm/website/docs/r/service_plan.html.markdown: terraform import azurerm_service_plan.example /subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Web/serverfarms/farm1
providers
以降のMicrosoft.xxxx
の要素がAzureリソースプロバイダーの名前空間になります。
この方法であればkeywordにリソースIDから取得した名前空間からの逆引きも可能なので、色々と応用が効きそうです。
おわりに
この記事が皆さんの学びや実践に少しでも役立てば嬉しいです。今後も引き続き、TerraformとAzureのについて情報を共有していきたいと思います。
私達ACS事業部はAzure・AKSなどのクラウドネイティブ技術を活用した内製化のご支援をしております。
また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。