はじめに
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を活用したリソース作成時の参考になれば幸いです。