ã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 } ã§ããŠã³ã¿ã€ã ãæžãããå ŽåããããŸãã
Terraformã£ãŠããèããã©ãçµå±ãªã«ãã§ããã®ïŒ
ãµãŒããŒããããã¯ãŒã¯ãšãã£ãã€ã³ãã©ããã³ãŒãïŒããã¹ããã¡ã€ã«ïŒã§å®çŸ©ããŠèªåæ§ç¯ã§ããããŒã«ã ããæäœæ¥ã§AWSãGCPã®ç®¡çç»é¢ããããããã代ããã«ãèšå®ãã¡ã€ã«ãæžããŠãããäœã£ãŠïŒããšã³ãã³ãäžçºã§ç°å¢ãåºæ¥äžãããã ã
ãžããïŒã§ããªãã§ããããã³ãŒãã«ããå¿ èŠãããã®ïŒç»é¢ã§äœã£ãã»ããæ¥œãããªãïŒ
æåã¯ç»é¢ã®ã»ããæ¥œã«æãããã©ãåãç°å¢ãäœåºŠãäœããããšãããããŒã ã§å ±æããããšãã«ã³ãŒããåšåãçºæ®ãããã ãGitã§å€æŽå±¥æŽãæ®ããããã誰ããã€äœãå€ãããããå šéšè¿œããããã«ãªãããã€ã³ãã©ã®ã¬ã·ããã¿ããªã§ç®¡çã§ããã€ã¡ãŒãžã ãã
ãªãã»ã©ïŒãããå§ããã«ã¯ãŸãäœãããã°ããã®ïŒ
ãŸãTerraformãã€ã³ã¹ããŒã«ããããå ¬åŒãµã€ããããã€ããªãããŠã³ããŒãããŠãããããMacãªãbrew install terraformãWindowsãªãchocolateyãwingetã§ãå ¥ãããã€ã³ã¹ããŒã«ãããã¿ãŒããã«ã§ terraform -version ãšæã£ãŠãããŒãžã§ã³ã衚瀺ãããã°OKã ãã
ããã§ãterraform versionããšæã£ãŠããŒãžã§ã³ã衚瀺ãããã確èªããŠã¿ãŠããæ¬¡ã«æ°ãããã©ã«ããäœã£ãŠãterraform initããå®è¡ããŠã¿ããããããã€ããŒãããŠã³ããŒããããŠãTerraform has been successfully initialized!ããšåºãã°æºåå®äºã ãïŒ
ã§ããïŒæ¬¡ã¯äœãæžãã°ããã®ïŒ
æ¡åŒµåã .tf ã®ãã¡ã€ã«ãäœãããæå°æ§æã ãšããŸãproviderãããã¯ã§ã©ã®ã¯ã©ãŠãã䜿ãã宣èšããŠã次ã«resourceãããã¯ã§äœããããã®ãæžããããšãã°AWSã®S3ãã±ããã1ã€äœããªããprovider "aws" ãšresource "aws_s3_bucket" "my_bucket" ã®2ãããã¯ã ãã§æžããã ã
æã£ãããã·ã³ãã«ãªãã ãïŒæžãããããã¯ã©ãŠãã«åæ ãããã®ïŒ
ãããªãåæ ã¯ããªãããTerraformã«ã¯3ã¹ãããã®ã¯ãŒã¯ãããŒããããã ããŸã terraform init ã§ãã©ã°ã€ã³ãæºåãæ¬¡ã« terraform plan ã§ãäœãäœãããããã®ãã¬ãã¥ãŒã確èªãæåŸã« terraform apply ã§å®éã«äœæãplanã§å·®åã確èªããŠããapplyããããããã£ãããã¹ãé²ãããã ãã
planã§ç¢ºèªã§ããã®å®å¿ã ãïŒã§ãééããŠäœã£ã¡ãã£ããã©ãããã®ïŒ
terraform destroy ã§äœã£ããªãœãŒã¹ããŸãšããŠåé€ã§ããããããã«ãTerraformã¯stateãã¡ã€ã«ãšãããä»ã©ããªãªãœãŒã¹ãååšããããã®å°åž³ãæã£ãŠããŠãã³ãŒããšå®éã®ã€ã³ãã©ã®å·®åãåžžã«ææ¡ããŠãããã ãã ããã³ãŒããä¿®æ£ããŠapplyããã°ã倿Žåã ãåæ ããŠããããã
䟿å©ïŒåŠç¿ã®ããŒãããããšããŠã¯ã©ãé²ããã®ããããããªã®ïŒ
ãŸãã¯AWSãGCPã®ç¡ææ ã§S3ãã±ãããVPCãäœããšããããå§ãããšããããæ¬¡ã«variableãoutputã§å€ãå€åºãããæ¹æ³ãèŠããŠããã®ããšmoduleã§èšå®ãåå©çšã§ããããã«ãããå ¬åŒã®ãã¥ãŒããªã¢ã«ãGet Startedãã·ãªãŒãºãã¹ããããã€ã¹ãããã§ããã§ããŠããããããŸãããããªããã®ãããããã ãã
æå€§ã®åŒ·ã¿ã¯ãã«ãã¯ã©ãŠã察å¿ã ããAWSã»GCPã»Azureã»Cloudflareãªã©æ°åã®ãããã€ãã«å¯Ÿå¿ããŠããŠã1ã€ã®èšèªïŒHCLïŒã§çµ±äžçã«æžãããå®ã¯2023幎ã«ã©ã€ã»ã³ã¹ãBSLã«å€ãã£ãŠãããããOpenTofuãšãããã©ãŒã¯ãçãŸãããã ã2026幎çŸåšã¯äž¡æ¹æŽ»çºã«éçºãããŠãããããäŒæ¥ã®ã©ã€ã»ã³ã¹ããªã·ãŒã«ãã£ãŠäœ¿ãåããæµãã«ãªã£ãŠãããã
OpenTofuã£ãŠããã®ããããã ãïŒstateãã¡ã€ã«ã®ç®¡çã§æ°ãã€ããããšã£ãŠããã®ïŒ
ããã¯ããã©ã³ã§ãããããã€ã³ãã ããstateãã¡ã€ã«ã«ã¯ãªãœãŒã¹ã®IDãIPã¢ãã¬ã¹ã ããããªããããŒã¿ããŒã¹ã®ãã¹ã¯ãŒããªã©æ©å¯æ å ±ãå¹³æã§å ¥ãããšããããã ãã ããããŒã«ã«ã«çœ®ãã£ã±ãªãã¯çµ¶å¯ŸNGãS3ãTerraform Cloudãªã©ã®ãªã¢ãŒãããã¯ãšã³ãã«ä¿åããŠãæå·åãšã¢ã¯ã»ã¹å¶åŸ¡ããããã®ãéåã ããããã«state lockãæå¹ã«ããªããšãããŒã ã§åæã«applyããŠç¶æ ãå£ãããªã¹ã¯ãããããèŠæ³šæã ãã