terraformの書き方をざっくりまとめます。
##基本的な構成
.
├── main.tf //メインのファイル(リソース作ったりするファイル)
├──valiables.tf //変数ファイル
└──outputs.tf //作成したリソースの情報を変数として保持するファイル
terrafirmはカレントディレクトリにある.tfファイルをすべて読むので、一つのファイルにまとめて書いても実行できるがメインの処理と変数を分けて記載しておく。
##各ファイルの記載内容と構文
###main.tf
data
コード内で使うデータを、すでにあるリソースから取得する。
#data "${要求するリソース名:aws_vpc}" "${エクスポートするローカル名:example_name}"
data "aws_vpc" "example"{
#要求する条件
id = "vpc-01b2caf4c15eaab98"
}
data "aws_subnet_ids" "example_subnet" {
#↑のaws_vpcのexampleで指定したid
vpc_id = data.aws_vpc.example.id
name = "aqua-all"
}
resource
これから作成するリソースについて記載する。
resource "aws_network_interface" "interface1" {
count = 1
subnet_id = tolist(data.aws_subnet_ids.aqua-all.ids)[count.index]
}
module
利用するリソースの情報を一つにまとめたもの
module "ec2" {
source = "../../"
instance_count = 1
name = "terraform-test"
ami = ${var.ami}
instance_type = "c5.large"
subnet_id = tolist(data.aws_subnet_ids.aqua-all.ids)[0]
vpc_security_group_ids = [data.aws_security_group.aqua-all.id]
associate_public_ip_address = true
placement_group = aws_placement_group.web.id
user_data_base64 = base64encode(local.user_data)
root_block_device = [
{
volume_type = "gp2"
volume_size = 30
},
]
ebs_block_device = [
{
device_name = "/dev/sdf"
volume_type = "gp2"
volume_size = 5
encrypted = true
}
]
tags = {
"Env" = "Private"
"Location" = "Secret"
}
}
valiables.tf
provider
プロバイダー(どのクラウド環境を使うか)の設定
provider "aws" {
region = "ap-northeast-1"
}
**locals **
ローカル変数の指定
variable
変数の定義
#variable "${変数名}"
variable "foo" {}
#default値を指定することもできる。
variable "vpc_cidr" {
default = "172.16.0.0/16"
}
ここで作成した変数は、${var.変数名}でアクセスできる。
resource "aws_s3_bucket" "s3_bucket" {
bucket = "${var.vpc_cidr}"
acl = "private"
}
値の代入方法は
・ 実行時に指定
・ コマンド引数による指定
・ 環境変数による指定
・ 設定ファイルによる指定
の4種類ある。下記参照
https://qiita.com/ringo/items/3af1735cd833fb80da75
outputs.tf
main.tfで作成したリソースの情報を使って他のリソースを作りたい時がある。そのため、作成したリソースの情報を変数として保持して使えるようにするためのファイル。
output
作成したリソースの情報の出力
output "public_dns" {
#説明書き(任意)
description = "List of public DNS names assigned to the instances"
#どのリソースで作成される値かを指定
value = module.ec2.public_dns
}
参照
Terraformはサンプルコードも公式ドキュメントも充実しているので、こちらを参照
▼サンプルコード
https://github.com/terraform-providers
▼公式ドキュメント
https://www.terraform.io/docs/configuration/resources.html