TerraformでAWSの構築行う際に利用するブロックについてまとめました。
参考動画
ブロック名 | 説明 |
---|---|
locals | 外部からの変更が行えない変数を設定する。 |
variables | 外部から変更可能な変数を設定する 。 |
provider | 使用する製品(aws等)を宣言し、接続環境の設定(profile、regionなど)を行う。 |
resource | 第一引数にAWSのサービス名、第二引数にラベル(任意の名前)を記述することで。 AWSサービスを構築できる。ec2を作成する場合、第一引数に"aws_instance"と記述する。 |
data | jsonなどで外出ししたい設定を記載しておき、外部のresourceブロックから読み込ませたりするのに利用する 。 |
output | 作成したリソース情報をterraform apply後にコンソールへ出力する。ファイルなどにも出力可能。 |
localsの定義例
変数はlocals {"変数名" = "値"}
のかたちで定義します。
変数の呼び出しは"${local.変数名}"
と記述します。
locals {
env = "development"
my_name = "hoge"
}
resource "aws_instance" "hoge" {
ami = "ami-0ae111ac6fd3e34c9"
instance_type = "t2.micro"
tags = {
Name ="${local.env}_${local.my_name}"
}
}
variablesの定義例
変数はvariables "変数名" {type = 変数の型 default ="変数のデフォルト値"}
のかたちで定義します。
変数の呼び出しは"${var.変数名}"
と記述します。
variables "env" {
type = string
default = "development"
}
resource "aws_instance" "hoge" {
ami = "ami-0ae111ac6fd3e34c9"
instance_type = "t2.micro"
tags = {
Name ="${var.env}_test"
}
}
providerブロックの定義例
下記例では、awsを利用して環境my_profile
のリージョンap-northeast-1
に接続するように設定しています。※profileは~/.aws/config
、~/.aws/credentials
に設定されている情報。
provider "aws" {
profile = "my_profile"
region = "ap-northeast-1"
}
dataブロックの定義例
下記例では、ポリシードキュメントをdataで定義し、 IAMポリシーの設定時にそれを読み込ませています。
# ポリシードキュメントの定義
data "aws_iam_policy_document" "allow_describle_regions" {
stement {
actions = ["ec2:DescribeRegions"]
resources = ["*"]
}
}
# IAMポリシーの定義(上記dataを参照する)
resource "aws_iam_policy" "my_policy" {
name = "my_policy"
policy = data.aws_iam_policy_document.allow_describle_regions.json
}
outputブロックの定義例
下記例は、ec2インスタンス作成後にコンソールへそのidを出力します。
# ec2インスタンスの定義
resource "aws_instance" "my_ec2" {
ami = "ami-0ae111ac6fd3e34c9"
instance_type = "t2.micro"
}
# terraform apply後に上記で作成したec2インスタンスのidをコンソールに出力する
output "ec2_instance_id_view" {
value = aws_instance.my_ec2.id
}