はじめに
こんにちは!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が通らない場合があるのでエラーのでた引数を削除したり、変更しないといけない
生成するファイルが存在する場合上書きができないので、存在しないファイル名を指定しないといけない
- ファイル名はdir/generated.tfといったように指定できるが、存在しないフォルダの場合、フォルダが生成されるわけではない
- インポートしたファイルで名前以外の引数の値を変更しても、apply時に変更される状態でインポートされる(リソースも変更される)
生成されたファイルをmain.tfなどにコピペして書き換えても正常に動作する
そして生成されたファイルを修正し、
$ terraform plan
もう一度、今度はオプションなしでplanを実行します。
エラーがでなければ、
$ terraform apply
をすることでインポート完了です。
インポート後はimportブロックを削除しても問題ないです。
一度インポートしてしまえば、生成されたTerraformのコードの引数の値を変更することでリソースの操作も可能です。
注意点
- 名前を変更すると再作成になります
終わりに
今回はTerraformの1.5から追加されたimportブロックに関して書かせていただきました。
実は他にもCheckブロックというもの追加されて、触れる機会があれば記事にしたいなとか思ってます。
ここまでお読みいただきありがとうございました。