Azureポータルから既存リソースをTerraformでエクスポート可能に!

この記事の内容

  • AzureポータルからTerraformコードをエクスポートできる新機能(パブリックプレビュー)が発表されました
  • 対象は単一リソースからリソースグループ全体まで対応しており、既存環境のIaC化に活用できます
  • エクスポート時に azurerm プロバイダーと AzApi プロバイダーのどちらかを選択できます
  • 利用前に Microsoft.Terraform リソースプロバイダーをサブスクリプションへ登録する必要があります
  • パブリックプレビュー段階のため、環境によってはエラーが発生する場合があります

はじめに

Microsoftより「Announcing Public Preview: Terraform Export from the Azure Portal」というアナウンスが公開されました。このアップデートにより、Azureポータルから既存のリソースをTerraform形式でエクスポートできるようになりました。Terraformをすでに利用している方にとっては、待望の機能と言えるでしょう。


TerraformとInfrastructure as Code(IaC)

Terraformは、インフラ構成をコードで管理するツール(Infrastructure as Code: IaC)として、非常に高い人気を誇ります。

AzureにはネイティブなIaCツールとして、ARMテンプレートや、それを簡易化したBicepが存在します。一方でTerraformは、AzureだけでなくAWSやGCPなど、マルチクラウド環境でも統一して利用できる汎用性の高さが最大の魅力です。

インフラをコードで管理することで、手動での設定ミスを防ぎ、構成のバージョン管理や再利用が容易になります。設計書と実際の環境の乖離を防ぎ、インフラ管理の効率性と信頼性を大幅に向上させることができます。


既存リソースのエクスポート機能が役立つシナリオ

この新機能が特に役立つのは、「既存のAzureリソースをTerraform管理下に移行したい」というシナリオです。

すでに存在するリソースをTerraformのコード(HCL)でどのように表現すればよいかを理解するのは、容易ではありません。しかし、このエクスポート機能を使えば、単一のリソースからリソースグループ全体まで、対象リソースがTerraformでどのように記述されるかを迅速に確認できます。


2つのTerraformプロバイダー

TerraformでAzureリソースを扱う際には、主に2つの「プロバイダー」が存在します。エクスポート時にはどちらを使用するかを選択できます。

azurerm プロバイダー

  • Terraform向けに公式に整備された主流のプロバイダーです
  • 使いやすく設計されており、多くのリソースに対応しています
  • ただし、Azureの新サービスや新機能への対応が遅れる場合があります。最新リソースではまだサポートされていないケースがあります

AzApi プロバイダー

  • AzureのREST APIを直接操作する仕組みのプロバイダーです
  • REST APIとして公開されている機能であれば、原則としてすべて対応可能で、最新機能もすぐに利用できます
  • 一方で、APIを直接扱うため azurerm に比べて記述が複雑になる傾向があります

Terraformエクスポート機能の使い方

前提条件:リソースプロバイダーの登録

この機能を利用するには、まずサブスクリプションに Microsoft.Terraform リソースプロバイダーを登録する必要があります。

Azure CLIで登録する場合:

az provider register --namespace Microsoft.Terraform

Azureポータルで登録する場合:

  1. 対象のサブスクリプションに移動します
  2. [設定] > [リソースプロバイダー] を選択します
  3. Microsoft.Terraform を検索します
  4. 状態が「未登録(NotRegistered)」の場合は選択して [登録] をクリックします

エクスポートの手順

  1. エクスポートしたいリソースが含まれるリソースグループに移動します
  2. [オートメーション] > [テンプレートのエクスポート] を選択します
  3. 上部のタブから [Terraform] を選択します
  4. プロバイダー(azurerm または AzApi)を選択すると、Terraformコードが生成されます

実際に試してみた結果

実際にこの機能を試してみました。

比較のためにARMテンプレートとBicepのエクスポートを確認すると、ARMテンプレート(JSON形式)は非常に冗長で可読性が低いのに対し、Bicepはかなりすっきりと記述されていることがわかります。

次に、リソースプロバイダーの登録を行った上でTerraformエクスポートを試みました。しかし、デモの時点では「Invalid authentication token」というエラーが発生し、コードを生成できませんでした。

これは、リソースプロバイダー登録の反映に時間がかかっているか、あるいはパブリックプレビュー段階の不具合である可能性が考えられます。


まとめ

パブリックプレビューということもあり、デモ中にエラーが発生する場面もありましたが、AzureポータルからTerraformコードを直接エクスポートできるこの機能のポテンシャルは非常に高いと言えます。

手動で作成した環境をコード化する際の学習コストを大幅に下げ、IaCへの移行を強力にサポートしてくれるはずです。Terraformを利用している方は、ぜひ一度試してみてはいかがでしょうか。今後の正式リリースに向けて、さらなる安定性の向上に期待しましょう。