Terraform 1.5から追加されたimportブロックがすごい!!
2023-07-14
azblob://2023/07/14/eyecatch/2023-07-14-Introduction-to-terraform-import-000.jpg

はじめに

こんにちは!23年入社の村田です。

今回はTerraformの新しい機能に触れたので書いてみました。

Terraform 1.5で追加されたimportブロックについて

Terraformのバージョン1.5が6月12日に一般公開されました!!

インストールはこちら から

Terraformにimportブロックというものが定義できるようになりました。

importブロックを定義すると、Terraformで作成していない既存のリソースをTerraformで管理できるようになります。

今回はAzureでTerraformのimportブロックを使用する方法を、注意点を踏まえながら紹介したいと思います。

importブロックの使い方

インポートしたいリソースがストレージアカウントの場合

import {
  id = "ストレージアカウントのリソースID"
  to = azurerm_storage_account.<Terraformでのリソース名>
}

注意点

ここでいうTerraformのリソース名とは

resource "azurerm_storage_account" "st" {

の"st"の部分です。

というようにimportブロックを定義し、

$ terraform init
$ terraform plan -generate-config-out=作成したいファイル名.tf

上記コマンドを実行すると、指定したファイルにインポートしたいリソースのTerraformコードが生成されます。

下記のようにファイルが出力されます

# __generated__ by Terraform
# Please review these resources and move them into your main configuration files.

# __generated__ by Terraform
resource "azurerm_storage_account" "st" {
  access_tier                       = "Hot"
  account_kind                      = "StorageV2"
  account_replication_type          = "GRS"
  account_tier                      = "Standard"

注意点

  • 生成されたファイルには共存しない引数が存在する場合がある
  • 生成されたファイルのままplanが通らない場合があるのでエラーのでた引数を削除したり、変更しないといけない

    error

  • 生成するファイルが存在する場合上書きができないので、存在しないファイル名を指定しないといけない

    error

  • ファイル名はdir/generated.tfといったように指定できるが、存在しないフォルダの場合、フォルダが生成されるわけではない
  • インポートしたファイルで名前以外の引数の値を変更しても、apply時に変更される状態でインポートされる(リソースも変更される)
  • 生成されたファイルをmain.tfなどにコピペして書き換えても正常に動作する

    error

そして生成されたファイルを修正し、

$ terraform plan

もう一度、今度はオプションなしでplanを実行します。
エラーがでなければ、

$ terraform apply

をすることでインポート完了です。
インポート後はimportブロックを削除しても問題ないです。

一度インポートしてしまえば、生成されたTerraformのコードの引数の値を変更することでリソースの操作も可能です。

注意点

  • 名前を変更すると再作成になります

終わりに

今回はTerraformの1.5から追加されたimportブロックに関して書かせていただきました。
実は他にもCheckブロックというもの追加されて、触れる機会があれば記事にしたいなとか思ってます。
ここまでお読みいただきありがとうございました。