はじめに
Terraformでリソースを作成する際には様々な方法がありますが、今回はcsvの情報を基にリソースを作成する方法を紹介したいと思います。
csvを基にしてリソースを作成するメリットとしては、tfファイルに色々なパラメータが記載されずシンプルになるのとcsvだけ更新・管理すればよい点です。
Terraformで複数のリソースを作成する場合
Terraformで複数のリソースを作成する際にはfor_eachやcountがあります。
countでは個別の値を必要としないもの、つまり全く同じものを複数作成する際の使用が推奨されています。
resource "aws_vpc" "main-vpc" {
count = 3
cidr_block = "198.168.0.0/24"
enable_dns_hostnames = true
tags = { Name = var.main-vpc01_name }
}
逆にfor_eachでは個別の値を必要とするものでの使用が推奨されています。
resource "aws_vpc" "main-vpc" {
for_each = var.vpc_map_data
cidr_block = each.value.vpc_cidr
enable_dns_hostnames = true
tags = { Name = each.value.vpc_name }
}
それぞれHashiCorp社から出ているTerraform Style Guideではfor_eachやcountの控えめな使用を推奨しています。
Style Guide
https://developer.hashicorp.com/terraform/language/style
─────────────────────────
Use count and for_each sparingly.
csvファイルからリソースを作成する
csvからリソースを作成するには上記で使用したfor_eachを併用します。
以下のようなcsvファイルを作成して、Terraformを実行するディレクトリ配下に置きます。
vpc_name,vpc_cidr vpc01,198.168.0.0/24 vpc02,172.30.43.0/24 vpc03,172.31.0.0/16
そしてTerraform側を以下の様にcsvを読み込む形へ変更することで上記で作成したcsvの情報を基にリソースが作成されます。
locals {
csv_data = csvdecode(file("./vpc.csv"))
}
resource "aws_vpc" "main-vpc" {
for_each = { for list in local.csv_data : list.vpc_name => list }
cidr_block = each.value.vpc_cidr
enable_dns_hostnames = true
tags = { Name = each.value.vpc_name }
}
まとめ
Terraformでcsvを使用したリソース作成方法を紹介させていただきました。
本記事が、Terraformを活用したリソース作成時の参考になれば幸いです。

 
     
     
     
    