Azure Export for Terraformを使用して、既存AzureリソースからTerraformに取り込む

以前Terraformを一から作成しAzureリソースを作成する手段や、既存リソースを参照し、Terraformにて追加リソースを作成する手段について書きました。

blog.jbs.co.jp

blog.jbs.co.jp

本記事ではAzure Export for Terraformを利用して、既存AzureリソースをTerraformに取り込む方法について解説します。

Azure Export for Terraformとは

Azure上の既存リソースをTerraformファイルに取り込むことが可能なツールです。

learn.microsoft.com

前提

Azure Export for Terraform用のツールを事前にインストールする必要がございます。

github.com

実行手順

今回は例として以下リソースグループ内のリソースをエクスポートする場合の例の記載致します。

importリソース

Azureにサインインする

今回はAzure CLIにてAzureへサインインを行います。

 az login --tenant "Tenant ID"

aztfexportの実行

以下コマンドを実行し、エクスポートを実行します。

 aztfexport resource-group "Resource Group名"

※今回はリソースグループ指定でエクスポートしていますが、リソース単体で指定する場合は以下コマンドを実行します。

 aztfexport resource "Resource ID"

エクスポートされるリソースが表示されます。 必要に応じてリソースの選択をしてください。

※今回Files、Blob等は作成していないため、スキップ状態のまま「w (import)」を実行します。

aztfexport実行画面(1)

完了すると以下のように表示されるため、任意のキーを押下します。

aztfexport実行画面(2)

定義ファイルが作成されていることの確認

コマンド実行ディレクトリ上に以下ファイルが作成されていることを確認します。

  • import.tf
  • main.tf
  • provider.tf
  • terraform.tf

【import.tf】

import {
  id = "/subscriptions/<Subscription ID>/resourceGroups/nishiyamas-tf-rg"
  to = azurerm_resource_group.res-0
}
import {
  id = "/subscriptions/<Subscription ID>/resourceGroups/nishiyamas-tf-rg/providers/Microsoft.Storage/storageAccounts/<ストレージアカウント名>"
  to = azurerm_storage_account.res-1
}

【main.tf】

resource "azurerm_resource_group" "res-0" {
  location = "japaneast"
  name     = "nishiyamas-tf-rg"
  tags = {
  }
}
resource "azurerm_storage_account" "res-1" {
  account_replication_type         = "LRS"
  account_tier                     = "Standard"
  allow_nested_items_to_be_public  = false
  cross_tenant_replication_enabled = false
  location                         = "japaneast"
  name                             = "<ストレージアカウント名>"
  resource_group_name              = "nishiyamas-tf-rg"
  tags = {
  }
  depends_on = [
    azurerm_resource_group.res-0,
  ]
}

【provider.tf】

provider "azurerm" {
  features {
  }
}

【 terraform.tf】

terraform {
  backend "local" {}
  required_providers {
    azurerm = {
      source = "hashicorp/azurerm"
      version = "3.65.0"
    }
  }
}

結果の確認

正常にエクスポートができているかの確認を行います。

Terraformプロバイダの更新

以下のコマンドを実行して、Terraformプロバイダを更新します。

terraform init --upgrade

成功すると「Terraform has been successfully initialized!」と表示されます。

terraform init --upgrade実行画面(1)

エクスポート結果の確認

以下のコマンドを実行し、エクスポート結果を確認します。

terraform plan

「No changes. Your infrastructure matches the configuration.」と表示されていれば正常にエクスポートできている状態となります。

terraform plan実行画面(1)

おわりに

本記事を最後までお読みいただき、ありがとうございます。

本記事がTerraformを使用する際の参考となれば幸いです。

執筆担当者プロフィール
西山 正太郎

西山 正太郎(日本ビジネスシステムズ株式会社)

クラウドソリューション事業本部に所属。近年は業務で主にMicrosoft Azureに携わっています。山登りが趣味です。

担当記事一覧