1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

こんにちはあるいはこんばんは。みなさん、Terraformを利用していますか?あるいは、webコンソールを操作してクラウドリソースを構築していますか?
どちらもあると思います。ここで、最初はコンソール操作だったプロジェクトで、構築中や構築後にIaCをやろう!となった場合を考えてみてください。なんとなく、Terraformコード作成がコンソールポチポチと同程度の工数がかかってしまいそうです。
今回まさにその状況になったため、ツールを使って解決してみた記録です。

前提

  • Azureが対象です
  • Azureにすでに構築した環境があることとします

Azure Export for Terraformとは

Azure と Terraform の概念間の翻訳の摩擦を軽減するために設計されたツール。以降aztfexportと称します。

インストール方法は割愛いたします。

なお実行環境は以下です。

  • Windows 10 Pro 22H2
  • aztfexport.exe v0.14.0(fb772ba)
  • terraform.exe v1.6.2

aztfexport実行前準備

aztfexportを使う前に、以下コマンド実行が必要です。

PS C:\tmp> az login
PS C:\tmp> az account list -o table

1つめのコマンドで、ログイン画面がポップアップするので、適切なMicrosoft IDを選択してください。
2つめのコマンドで、取得したいリソースグループがあるAzureサブスクリプションの「IsDefault」が「True」になっていることを確認してください。

Name         CloudName    SubscriptionId                        TenantId                              State    IsDefault
-----------  -----------  ------------------------------------  ------------------------------------  -------  -----------
ALPHA        AzureCloud   11111111-1111-1111-1111-111111111111  00000000-0000-0000-0000-000000000000  Enabled  True
BETA         AzureCloud   22222222-2222-2222-2222-222222222222  00000000-0000-0000-0000-000000000000  Enabled  False

(表記はダミーです)

もし「IsDefault」が適当でない場合、以下コマンドでセットしてください。

PS C:\tmp> az account set -s <SubscriptionId>

空のディレクトリに移動してください。空でないとエラーになります。

aztfexportでコード取得してみる

では、以下コマンドでリソースグループ全体を取得してみましょう。

PS C:\tmp\aztf> aztfexport resource-group <リソースグループ名>

残念ながら、試した環境では権限が不足していたのかうまく動作しませんでした。
リソースごとに取得してみましょう。

PS C:\tmp\aztf> aztfexport resource <リソースID>

Terraformerとは

さまざまなクラウドプロバイダに対応しているツール。

インストール方法は割愛いたします。

なお実行環境は以下です。

  • Windows 10 Pro 22H2
  • terraformer.exe v0.8.24
  • terraform.exe v1.6.2

Terraformer実行前準備

Terraformerを使う前に、以下コマンド実行が必要です。

PS C:\tmp> az login
PS C:\tmp> $Env:ARM_SUBSCRIPTION_ID=<SubscriptionId>

空のディレクトリに移動してください。以下内容の「main.tf」というファイルを作成します。

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

provider "azurerm" {
  features { 
  }
}

一度以下コマンドを実行し、Terraformを初期化してください。これで準備完了です。

PS C:\tmp\tfer> terraform init

Terraformerでコード取得してみる

に記載のオプションごとにコマンドを実行すると、小分類のリソースまで取得してくれます。
このURL記載の「resource group」は、URLに記載の「List of supported Azure resources」の大項目であって、Azureのリソースグループではありませんのでご注意ください。
このリストに記載があれば、基本かならず取得ができます。

たとえばVirtual Networkを取得するには以下のようにします。

PS C:\tmp\tfer> terraformer import azure -r virtual_network

aztfexportとTerraformerの比較

今回試したリソースグループで、2つのツールの取得可否状況は以下の通りでした。

resource aztfexport Terraformer comment
API management service Y N
App Service Y Y Terrafomerは旧形式のazurerm_app_serviceを取得する
App Service Plan Y N
Azure Monitor Private Link Scope Y N
Log Analytics Workspace Y N
Application Gateway Y Y
storage account Y Y
data collect point Y N
network interface N Y
network security group N Y
public ip address Y Y
private dns zone Y Y
private dns a record N Y
private endppoint N Y
virtual network Y Y
subnet N Y
virtual machine N Y
  • aztfexportが取得できないリソースがあった(試した環境の影響かもしれないです)
  • Terraformerは、用意されているオプション以外を取得できない

以上より、今回は2つのツールを組み合わせて、全体のリソースを取得しました。

まとめ

今回目的に対し、ツールをつかってサクッと解決とはならず、ツールの組み合わせで対応しました。
ツールを使うことで、たとえばリソース名をAzureコンソールからTerraformコードにコピペしたり、Azureコンソールのメニューを細かく掘ったり、といったことを省略できたと考えます。

以上、Azureの既環境からTerraformコードを作成した記録でした。


  • Microsoft Azure は,Microsoft Corporation の商標または登録商標です。
  • Terraform は、HashiCorp, Inc. の米国およびその他の国における商標または登録商標です。
  • その他、本資料に記述してある会社名、製品名は、各社の登録商品または商標です。
1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?