はじめに
こんにちはあるいはこんばんは。みなさんは、AzureのリソースIDを見てそれがterraformのazurermプロバイダのどのリソース種別(resourceブロックで指定する部分)に該当するのかわからずに困ったことはあるでしょうか?
ない?そうかもしれません。ふつうのterraform利用の流れでは、terraformコードを作成してデプロイし、デプロイ後にリリースIDを見れるようになります。今回のお題は、すでにazure上にリソースがwebコンソール手動操作などでデプロイ済みで、これからこの環境のterraformコードを作成したい流れでの、リソースIDからterraformのリソース種別の"逆引き"です。
例えば以下リソースIDが、以下だったとします。
/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/example-rg/providers/Microsoft.Web/serverFarms/example-asp
このリソースIDから、azurermプロバイダの "azurerm_service_plan" を見つける場合です。リソースIDの文字列から推測するのが難しいですよね。私は非常に困ったので、AzureのリソースIDとazurermプロバイダのリソース種別を紐づけた記録をご紹介します。
Azure resource IDとは
前述の通り、リソースのプロパティや、ARMテンプレートに記載されています。以下例として、3リソースのリソースIDを記します。
/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/example-rg/providers/Microsoft.ApiManagement/service/example-apim
/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/example-rg/providers/Microsoft.Storage/storageAccounts/examplestorage
/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/example-rg/providers/Microsoft.Web/serverFarms/example-asp
- 11111111-1111-1111-1111-111111111111: サブスクリプションID
- example-rg: リソースグループ名
- 行末のexample-XXX: リソースの名前。任意です。
- リソースグループ名と、リソースの名前の間: リソース種類
と、重要な情報がすべて入っていますね。
azurermプロバイダとは
Terraformのhashicorpが提供するAzure Providerです。
他に、azapiプロバイダというものがあります。これはご参考で、今回記事はazurermプロバイダを主眼に置いています。
単純web検索では見つけにくい
以下リソースIDを見てみます。
/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/example-rg/providers/Microsoft.Web/serverFarms/example-asp
「providers/」と「/example-asp(リソースの任意の名前)」の間の「Microsoft.Web/serverFarms」がリソースの種類を表しています。
この「Microsoft.Web/serverFarms」をweb検索すると、Microsoftのwebサイトにたどりつきます。ここにはazapiプロバイダとの関連がありますが、azurermプロバイダとの関連は記載がありませんのでご注意ください。
また、azurermプロバイダページの検索窓に「Microsoft.Web/serverFarms」と入力しても検索できません。
困りました...
解決方法1: web検索でドメインを絞り込む
registry.terraform.io ドメインに絞って検索するようにします。「Microsoft.Web/serverFarms」を探す場合、以下のようにします。この方法、手軽に検索できるのですが、正しいazurermプロバイダのページが上位に出てくる保証がありません。
- Googleの場合: Microsoft.Web/serverFarms site:registry.terraform.io/
- Bingの場合: Microsoft.Web/serverFarms domain:registry.terraform.io/
解決方法2: 関連付けリストを作成する
紐づけのリストが無いなら作るしかない、ということで作成します。作り方としては、azurermプロバイダページのソースをダウンロードしてきて、webページをgrepして作ります。リスト自体の公開は難しいので、作り方をご紹介します。
1.azurermプロバイダページのダウンロード
以下URLのコードをダウンロードします。
2.ディレクトリをgrep
- grep対象ディレクトリ: terraform-provider-azurerm-main/website/docs/r
- grep文字列: "terraform import "
3.整形
grepで抽出した結果を見てみましょう。
「Microsoft.Web/serverFarms」の行を見てみましょう。スペース区切りで要素分割します。
terraform import azurerm_service_plan.example /subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Web/serverfarms/farm1
「import」の次の要素から「.example」をぬいた要素「azurerm_service_plan」: これが目的のazurermプロバイダにおけるリソース種別です。
まとめ
今回は、日常業務で非常に困っていた部分をなんとか解決してみました。もう少しスマートな方法があったらよかったのですが、検索した限りでは見つからなかったため、なんとか関連付けしてみました。以上、AzureのリソースIDとazurermプロバイダを紐づけた記録でした。
- Microsoft Azure は,Microsoft Corporation の商標または登録商標です。
- Terraform は、HashiCorp, Inc. の米国およびその他の国における商標または登録商標です。
- その他、本資料に記述してある会社名、製品名は、各社の登録商品または商標です。