###### tags: `terraform` # Terraform 基礎 ## String terraformでの多くの設定値は文字列型で定義する - 変数名 - 値 - mapのkey, value 文字列の中に変数をテンプレートとして埋め込むこともできる "#{vars}" ## Map 辞書構造 基本的にはterraformのオブジェクトはこれで記述される ```tf variable "AMIS" { type = "map" default = { ap-northeast-1 = "ami-06cd52961ce9f0d85" } } ``` 取り出すには、lookup関数を使う ```tf "${lookup(map, key)}" ``` ## Varilable 定義 variable キーワード ```tf variable "access_key" {} variable "secret_key" { default = "XXXXXXX" } ``` 使うときは vars.~~~ で呼び出す ## Command ```bash terraform init terraform plan terraform apply terraform destroy ``` 基本これだけで行ける。 ## resource resource 1 2 3 1. "リソースタイプ" 2. "名前" 3. {map} - ami - instance_type : 性能 - user_data - tags : {map} ## output apply を実行後に、変数を出力する ```tf output "example_instance_id" { value = "${aws_instance.example.id}" } ``` ## data AMI情報などを外部リソースから取得する ```tf data "aws_ami" "recent_amazon_linux_2" { most_recent = true owners = ["amazon"] filter = { name = "name" values = ["amzn-ami-hvm-2.0.????????-x86_64-gp2"] } filter = { name = "state" values = ["available"] } } ``` # interpolation syntax 特殊な構文 ## 参照 ```tf resource "aws_security_group" "bbb"{ ... ingress {} egress {} } resource "aws_instance" "ex"{ ... vpc_securerity_group_ids = [aws_security_group.bbb.id] } ``` **type.name.attribute** の形式で、他のリソースの値を参照できる。 ## 条件分岐 三項演算子が使える == != 比較 ? 三項演算子 ```tf instance_type = var.env == "dev" ? "t3.micro" : "m5.large" ``` ## built-in 関数 よく使う操作を関数として使える - lookup(map, key) : マップから値を取り出す - file("file.sh") : ファイルを読み込む ```tf resource "aws_instance" "ex"{ ... user_data = file("./install_apache.sh") } ``` apacheをインストールするbashスクリプトを読み込む例 ## テンプレート(.tpl) terraformでは、実行時に値を埋め込むテンプレートエンジンが有る。 拡張子は.tplでも何でもいいっぽい "template_file" タイプの ```bash #!/bin/sh yum install -y ${package} systemctl start ${package}.service ``` ```tf data "template_file" "apache_install"{ template = file("./user_data.sh.tpl") vars = { pakage = "httpd" } } # 使うとき data.template_file.apache_install.rendered ```