MENU

【Terraform】ゼロから始めるAWSインフラのコード化 — 初心者が最初に押さえるべき5つのポイント

「インフラをコードで管理したい」と思い立ったとき、最初の選択肢に上がるのがTerraformです。AWS CDKやCloudFormationもありますが、マルチクラウド対応でシンプルな宣言型構文のTerraformは、学習コストと実用性のバランスに優れています。この記事では、Terraform初心者が最初に押さえるべきポイントを5つに絞って解説します。

目次

1. tfstateファイルの管理が最重要

Terraformで最も重要な概念が terraform.tfstate です。このファイルには、Terraformが管理しているリソースの現在の状態が記録されています。このファイルを失うと、Terraformはどのリソースを管理しているか分からなくなり、大惨事になります。

# S3バックエンドの設定(必須!)
terraform {
  backend "s3" {
    bucket         = "my-terraform-state-bucket"
    key            = "production/terraform.tfstate"
    region         = "ap-northeast-1"
    dynamodb_table = "terraform-lock"
    encrypt        = true
  }
}

ローカルにtfstateを置くのは個人の検証環境だけにしましょう。チームで運用する場合はS3 + DynamoDB(ロック機構)が鉄板です。

2. ディレクトリ構成を最初に決める

terraform/
├── environments/
│   ├── production/
│   │   ├── main.tf
│   │   ├── variables.tf
│   │   ├── outputs.tf
│   │   └── terraform.tfvars
│   └── staging/
│       ├── main.tf
│       ├── variables.tf
│       ├── outputs.tf
│       └── terraform.tfvars
└── modules/
    ├── vpc/
    │   ├── main.tf
    │   ├── variables.tf
    │   └── outputs.tf
    ├── ecs/
    └── rds/

環境(production / staging)ごとにディレクトリを分け、共通のリソース定義はmodulesにまとめます。こうすることで、同じ構成を環境ごとに変数だけ変えて展開できます。

3. variablesとlocalsの使い分け

variable は外部からの入力、locals は内部での計算値に使います。この区別を意識するだけで、コードの可読性が大幅に向上します。

# variables.tf — 外部から注入する値
variable "environment" {
  type        = string
  description = "環境名(production, staging, development)"
}

variable "app_name" {
  type    = string
  default = "myapp"
}

# main.tf — 内部で計算する値
locals {
  name_prefix = "${var.app_name}-${var.environment}"
  common_tags = {
    Project     = var.app_name
    Environment = var.environment
    ManagedBy   = "terraform"
  }
}

4. plan → apply の習慣を徹底する

terraform apply を直接実行するのではなく、必ず terraform plan で差分を確認する習慣をつけましょう。CI/CDパイプラインでも、PRのタイミングで plan を実行し、レビューしてからマージ後に apply するフローが安全です。

# 差分確認
terraform plan -out=plan.tfplan

# 確認済みのplanを適用
terraform apply plan.tfplan

5. データソースを活用する

既存リソースの情報を参照するには data ソースを使います。手動で作成したリソースや別のTerraform管理下のリソースと連携する際に重宝します。

# 既存のVPCを参照
data "aws_vpc" "existing" {
  filter {
    name   = "tag:Name"
    values = ["production-vpc"]
  }
}

# 最新のAmazon Linux 2023 AMIを取得
data "aws_ami" "al2023" {
  most_recent = true
  owners      = ["amazon"]

  filter {
    name   = "name"
    values = ["al2023-ami-*-x86_64"]
  }
}

まとめ

Terraformは奥が深いツールですが、この5つのポイントを押さえておけば、実務で困ることはかなり減ります。最初は小さなリソース(S3バケットやIAMロールなど)から始めて、徐々にVPCやECSのような複雑なリソースに挑戦していくのがおすすめです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次