Terraformのブロックタイプ
locals
変数定義ができるブロック。外部から変更(上書き)はできない
別ブロックで${local.<Name>}みたいな使い方をする。
使い方
code:main.tf
locals {
project = "testylog"
env = "dev"
}
resource <RESOURCE_TYPE> <RESOUECE> {
tag = {
Name = "${local.project}-${local.env}-vpc"
}
}
variable
変数定義ができるブロック。外部から上書きが可能。
variable 1ブロックで1変数を定義する。データ型と初期値を定義する
使用するときには${var.<変数名>}で定義する
使い方
code:main.tf
variable "project" {
type = string
default = "tastylog"
}
resource <RESOURCE_TYPE> <RESOUECE> {
tag = {
Name = "${var.project}-dev-vpc"
}
}
使用できるデータ型
Terraform で使用できるデータ型
変数を上書きする方法。
環境変数
ソースコード
code:main.tf
variable "message" {
type = string
default = "nothing"
}
ビルド実行
code:bash
export TF_VAR_message="Hello World!"
terraform apply
使い分け
鍵情報、環境依存する情報などを管理
実行ログに残らない
変数ファイル
実行ファイル(terraform.tfvars)
code:terraform.tfvars
message = "Hello World!"
ビルド実行
code:bash
terraform apply
使い分け
git管理できる
ロジックとデータを切りはなして管理するときに使用する
コマンド引数
コマンド実行
code:bash
terraform apply -var message="Hello world!"
使い方
テストで部分的に変更して使用したい、デバッグ時に使用したい
実行ログに残る
一緒に変数を定義した場合の優先度は、環境変数<変数ファイル<コマンド引数になる
上書きした場合は、基本的にあと優先になる
terraform
全体に関わる設定。terraformやproviderのバージョンを指定するときなどに使用する
provider
プロファイルの情報、リージョンなどを指定する
code:main.tf
provider "aws" {
region = "ap-northeast-1"
}
data
管理対象外のリソースを取り込めることができる
Ex)AWSが作成したリソース、既存システムのリソース、外だしの設定
AMIなどを検索かけて取り出すこともできる
code:main.tf
data "aws_ami" "resent_amazone_linux_2" {
most_recent = true
owners = "amazon"
filter {
name = "name"
values = "amzn2-ami-hvm-2.0.???????-x86_64-gp2"
}
filter {
name = "state"
values = "available"
}
}
resource "aws_instance" "example" {
ami = data.aws_ami.recent_amazon_linux_2.image_id
instance_type = "t3.micro"
}
output
applyを実施したときに標準出力されるようになる。
モジュールから値を取り出すこともできる
code:main.tf
resource "aws_instnce" "hello_world" {
ami = "xxx"
instance_type = "t2.micro"
}
output "ec2_instance_id" {
value = aws_instance.hello-world.id // ターミナルに出力される
}
resource
別のリソースを参照するときはドット繋ぎで対応する<BLOCK_TYPE>.<LABEL_1>.<LABEL_2>で記述する
<BLOCK_TYPE>は省略してもいい
code:main.tf
resource "aws_vpc" "vpc" {
cidr_block = "192.168.0.0/20"
instance_tenancy = "default"
enable_dns_support = true
enable_dns_hostnames = true
}
resource "aws_subnet" "public_subnet_1a" {
vpc_id = aws_vpc.vpc.id // ドット繋ぎで実施
avalilability_zone = "ap-northeast-1a"
cidr_block = "192.168.1.0/24"
map_public_ip_on_launch = true
}