はじめに

Terraformでリソースを作成する際には様々な方法がありますが、今回はcsvの情報を基にリソースを作成する方法を紹介したいと思います。

csvを基にしてリソースを作成するメリットとしては、tfファイルに色々なパラメータが記載されずシンプルになるのとcsvだけ更新・管理すればよい点です。

Terraformで複数のリソースを作成する場合

Terraformで複数のリソースを作成する際にはfor_eachcountがあります。

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