Terraformのtfvarsファイルを自動生成する

過去記事からの派生案件で、Terraformで使うtfvarsファイルについて、繰り返しデータを多数投入する想定のため、これを自動生成したいと考えた。 Terraform loop処理の超シンプルな例 Python - Jinja2テンプレートで連続データを処理したい 実際に使用するファイル群は過去記事に記載しているがこんな想定で。(もちろん実際は他にもいろいろ必要)自動生成したいのは、以下の*印をつけたcodecommit.auto.tfvarsである。(この時点では手動で値を記述したもの) work_dir/ ├── codecommit.auto.tfvars * ├── codecommit.tf ├── config.tf ├── terraform.tfvars ├── variables.tf └── vpc.tf これとは別に、tfvars自動生成作業用ディレクトリの作業前はこの状態。以下3つのファイルを用意する。codecommit.tmplはテンプレートとなる。このファイル名はスクリプトから呼び出すので名称に注意。対象のAWSリソースによって変えるが、tfファイルの名称に合わせておけばよい。 script_dir/ ├── codecommit.tmpl ├── create_vars.py └── data.csv codecommit.tmpl param{{ num }} = { repository_name = "{{ repo_name }}" description = "{{ des }}" } data.csv (今回の例ではヘッダーありの前提) num,repo_name,des 1,"my-repo001","my-repo001の説明" 2,"my-repo002","my-repo002の説明" 3,"my-repo003","my-repo003の説明" create_vars.py import sys import pandas as pd from jinja2 import Environment, FileSystemLoader def main(): # テンプレート読み込み env = Environment(loader=FileSystemLoader('....

November 28, 2021

Terraform loop処理の超シンプルな例

前回投稿で言及したTerraformのループ処理を、めっちゃシンプルなパターンでやってみた。 前回投稿 Terraform loop処理のリンク集 参考記事 Terraformで配列をloopする時はfor_eachを使った方がいい やったこと Terraformのセットアップは割愛。作業ディレクトリには以下のtfコードがある。 work_dir/ ├── codecommit.tf ├── init.tf ├── variables.tf └── vpc.tf 以下は初期化ファイル。terraform init で初期化実行すみである。VPCも別途サクッと作ってある。ひとりPoCだからremote_stateにする必要もないのだが、なんとなくtfstateをS3に保管するためbackendの定義がある。 init.tf terraform { required_providers { aws = { source = "hashicorp/aws" version = "3.66.0" } } } terraform { required_version = "1.0.11" backend "s3" { bucket = "my-terraform-poc-repository" key = "poc/poc.tfstate" region = "ap-northeast-1" } } で、肝心のloop処理。最初なので脳に優しく、超シンプルなパターンでいく。CodeCommitリポジトリの作成はパラメータが少ないので、参考記事を参照し、これで試した。他にもパラメータが少ないやつならなんでもいいけど。今回セットする値はrepository_nameとdescriptionの2点だけ。 variable.tf variable "codecommit_param_list" { type = map(map(string)) default = { param1 = { repository_name = "repo001" description = "desciption for repo001" } param2 = { repository_name = "repo002" description = "desciption for repo002" } param3 = { repository_name = "repo003" description = "desciption for repo003" } } } codecommit....

November 23, 2021

Terraform loop処理のリンク集

Terraformでループ処理ってどうするんだっけ…と調べたらいろいろ出てきた。読んでも全然頭に入らないがとりあえず参考リンクをメモ。パッと見る限りcountよりfor_eachの方がお勧め?ひとつのリソースに2個以上のパラメータをセットする場合は以下記事の「for_eachを使った書き方(その2)」を参考にすればいいかな。 for_eachを知らずにcountを使って作成したところ、追加や削除の際に色々と意図しない挙動になったので、回避策について備忘録を残しておきたいと思います。 Terraformで配列をloopする時はfor_eachを使った方がいい 以下もちゃんと読めば有益そうなのだが、マニアックすぎて理解が追いつかない。 Terraformでのloop処理の書き方(for, for_each, count) Terraformのループ処理(for_each,for)について Terraformでimportを使う理由とfor_eachをつかったリソース定義に実リソースをimportする方法 これはcountを使う方法。多分使わないけど比較用にメモ。 Terraformで超サクッとループでリソースを用意する方法 上記記事のリンクにあったこっちの記事の方にピピっときた。IntelliJでTerraformね、これはやってみよう。仕事じゃ使えないけど。 新記法対応! IntelliJ IDEAを使ってTerraformを書いてみた IntelliJはさておき、久しぶりに使ってみたらプロバイダの記述方法が変わっていてハマった。今現在は以下の方式で書く。 terraform { required_providers { aws = { source = "hashicorp/aws" version = "3.66.0" } } } 以下記事に最近変わった細かい規則とかいろいろ書いてある。ロックファイルとか面倒くせぇな、なくていいのに。…と思ったが、ドキュメント読む限り気にしなくてよさげ。 Terraform職人再入門2020

November 21, 2021