AWSでterraformをつかう流れ
Terraform RegistoryからダウンロードされるTerraformを設定する(config.tf)
kadoyau.iconエントリポイントの名前はチュートリアルだとmain.tfだったりconfig.tfだったりする
code:config.tf
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 3.27"
}
}
}
Official Providerの場合はなくてもいい
主要なやつはだいたいあるからつかわなそう?
providerを設定する(config.tf)
code:config.tf
provider "aws" {
// cedentialがどこにあるか
// aws cliで設定できるはず
profile = "default"
region = "us-west-2"
}
アクセスキー、シークレットキー、リージョンを入れる
鍵は直接書き込まずに、環境変数に入れたりする
resoureceを設定する(config.tf)
code:config.tf
resource "aws_instance" "example" {
ami = "ami-830c94e3"
instance_type = "t2.micro"
tags = {
Name = "ExampleInstance"
}
}
インフラを定義する
EC2とか、Herokuとか
マシンサイズ
resource "resource type" "name"というsyntax
typeのprefixはprovider
providerはawsだと解釈される
ここはproviderによる
初期化する terraform init
configurationで使われたproviderなどがインストールされる
新しくconfiguration fileを追加したり、cloneしてきたときに始めにこのコマンドを打つ
何回やっても安全(冪等性)
構文チェック terraform validate
このコマンドの前に、事前にinitialaizeしておく必要がある
regionが異なるのでAMIの設定が違う
そのリージョンにdefault VPCを作成していない
確認する terraform plan
適用する terraform apply
config.tfと同じディレクトリでないと動かない
terraform.tfstateに現在の状態が自動的に書き込まれる
フォーマッタをかけてcommit terraform fmt
現在の状況を確認する terraform show
config.tf一部を変えてからterraform apply
terraform applyの逆
本番環境では早々ないけど、QAとかdevではよくあるユースケース
current configuration以外の動いてるリソースは消えない
localをdestroyしたらprodまで消えたら大惨事だ
依存関係があればちゃんとその順に消してくれれるらしい
変数を切り出す
色んな方法がある
1. variables.tf に切り出す
code:variables.tf
variable "instance_name" {
description = "Value of the Name tag for the EC2 instance"
type = string
default = "ExampleInstance"
}
呼び出しているconfigurationでvar.instance_nameに置き換える
2. 変数の値を直接与える
terraform apply -var="foo=bar"
3. 別ファイルから与える(localにsecretsを設定する方式)
code:sensitive.tfvars
foo=bar
terraform apply -var-file="sensitive.tfvars"
4. 環境変数
code:zsh
export TF_VAR_foo="bar"
terraform apply
terraform cloudを使っているとGUIで設定できる
Herokuで環境変数設定できるようなUI
outputs.tfを作成する
code:outputs.tf
output "instance_id" {
description = "ID of the EC2 instance"
value = aws_instance.example.id
}
output "instance_public_ip" {
description = "Public IP address of the EC2 instance"
value = aws_instance.example.public_ip
}
terraform applyする(変数を使う前にこのconfigurationをapplyする必要がある)
terraform output