LoginSignup
2
2

Terraformのどのリソース種別で定義すべきか困った話(Azure編)

Last updated at Posted at 2024-02-09

はじめに

こんにちはあるいはこんばんは。みなさんは、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. の米国およびその他の国における商標または登録商標です。
  • その他、本資料に記述してある会社名、製品名は、各社の登録商品または商標です。
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2