🙌

【入門#12】Terraform環境を変数化をしていこう

に公開

今回の目標

既存のTerraform環境を変数化していこうかと思います。

ちなみに現状のシステム構成図は下記のイメージです。

関連記事:https://zenn.dev/alt_tanuki/articles/7c1f97da33496b

ではやっていきましょうー!

変数を書く!

とはいえどういう方針で変数化していきましょうか。
下記3点でやっていこうかな。
・環境名/プロジェクト名
→ 繰り返し使用するため、プロジェクト名を変えた時の変更箇所がすくなくなる。
・度々変わることがある設定値
→ インスタンスサイズ等の度々変化するもの
・その他よく設定されるもの
→リージョンとか

よーしやってくべー

# 環境名(共通リソースのprefixに使用)
variable "env_name" {
  default = "cask-tokyo"
}

# プロジェクト名(EC2環境リソースのprefixに使用)
variable "project_name" {
  default = "cask-tokyo-ec2"
}

# リージョン
variable "region" {
  default = "ap-northeast-1"
}

# EC2インスタンスタイプ
variable "ec2_instance_type" {
  default = "t2.micro"
}

# EC2キーペア名
variable "ec2_key_pair" {
  default = "cask-tokyo-ec2"
}

# Webアプリ ヘルスチェックパス
variable "tgtgrp_health_check_path" {
  default = "/health"
}

# S3バケット名
variable "s3_bucket_name" {
  default = "cask-tokyo-ec2"
}

# ドメイン名
variable "route53_domain" {
  default = "cask.tokyo"
}

# サブドメイン名
variable "route53_sub_domain" {
  default = "ec2"
}

こんな感じでどうだろうか。。今回は規模が大きくはないため
意味もなく変数を増やしても管理があとあと面倒になると思いだいぶ少なくしています。

何かこれもしたほうがいい!というものを教えて下さい。

変数は2種類ある

変数にはlocalsとvaliablesの2種類があります。
ざっくりと以下の違いがあります。

local: applyで引数指定できない
valiables: applyで引数指定できる(default値も設定可能)

# local
locals {
  route53_sub_domain = "ec2"
}

# valiables
variable "route53_sub_domain" {
  default = "ec2"
}

valiablesは下記のようにTerraform実行時に値として指定できます。

terraform apply -var ec2_instance_type="t3.small"

インスタンスタイプみたいに頻繁に変わるものとかはいいですね。

変数を使う!

実際に使用するには、var.xxx(変数名)として各所で指定します。
例えば、プロジェクト名を各所で設定する場合、こんな感じです。

プレフィックスとして使用する場合、"{var.xxx}-xxx"のように{}を使用します。

  tags = {
    Name = "${var.project_name}-sg-ec2"
  }

全般的に設定を進めます。

実行してみよう!

terraform applyを行うと。

まぁ特には変わらないですね。
変わらないことの確認ができば良しです。

下記の記事を目次として、入門#1から順にTerraformで環境構築を学べます。気になる方はぜひ見に来てください!

https://zenn.dev/alt_tanuki/articles/7c1f97da33496b

Discussion