ã2026幎çãTerraformã®å§ãæ¹ â ã€ã³ãã©ãã³ãŒãã§ç®¡çããç¬¬äžæ©
- Terraformã®ã€ã³ã¹ããŒã«ãšã»ããã¢ãã
- HCLæ§æïŒresource/variable/outputïŒã®åºæ¬
- terraform init/plan/apply/destroy ã®ã¯ãŒã¯ãããŒ
- ã¹ããŒã管çã®æŠå¿µïŒterraform.tfstateïŒ
ã€ã³ã¹ããŒã«æé
# macOSïŒHomebrewïŒ
brew tap hashicorp/tap
brew install hashicorp/tap/terraform
# WindowsïŒwingetïŒ
winget install HashiCorp.Terraform
# ããŒãžã§ã³ç¢ºèª
terraform version
Terraformã³ãã³ãæ©èŠè¡š
terraform init # ãããã€ããŒãããŠã³ããŒãïŒæåã«å¿
ãå®è¡ïŒ
terraform plan # 倿Žå
容ã確èªïŒå®éã«ã¯å€æŽããªãïŒ
terraform apply # ã€ã³ãã©ãæ§ç¯ã»å€æŽ
terraform destroy # ã€ã³ãã©ãåé€
terraform fmt # ã³ãŒãã®ãã©ãŒããã
terraform validate # æ§æãã§ãã¯
terraform output # output倿°ã®è¡šç€º
terraform state list # ã¹ããŒãã®ç¢ºèª
ã¯ãããŠã®ã³ãŒãïŒAWSã§S3ãã±ãããäœæïŒ
# main.tf
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = "ap-northeast-1"
}
resource "aws_s3_bucket" "my_bucket" {
bucket = "my-terraform-bucket-${random_id.suffix.hex}"
}
resource "random_id" "suffix" {
byte_length = 4
}
output "bucket_name" {
value = aws_s3_bucket.my_bucket.bucket
}
ããããè©°ãŸããã€ã³ã
Q: terraform.tfstate ãGitã«ã³ãããããŠããã®ïŒ
â ããŒã«ã«ã®tfstateã«ã¯ã·ãŒã¯ã¬ããæ
å ±ãå«ãŸããå Žåãããããã.gitignore ã«è¿œå ããŸããããããŒã éçºã§ã¯ S3 + DynamoDBïŒããã¯ïŒãªã©ã®ãªã¢ãŒãããã¯ãšã³ãã䜿ããŸãã
Q: terraform apply ã誀ã£ãŠå®è¡ããŠããŸã£ã
â æ¬çªç°å¢ã§ã¯ terraform plan ã®åºåãå¿
ãã¬ãã¥ãŒããŠãã apply ããç¿æ
£ãéèŠã§ãããŸã -target ãªãã·ã§ã³ã§ç¹å®ãªãœãŒã¹ã ãæäœããããšãã§ããŸãã
Q: ãªãœãŒã¹ã®å€æŽããdestroy then createãã«ãªã£ãŠããŸã
â äžéšã®èšå®å€æŽã¯ãªãœãŒã¹ã®åäœæãå¿
èŠã§ããlifecycle { create_before_destroy = true } ã§ããŠã³ã¿ã€ã ãæžãããå ŽåããããŸãã