0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Terraformの使い方・導入・落とし穴:実践ガイド

Posted at

1. はじめに

Terraform は、インフラをコードで管理する Infrastructure as Code(IaC) ツールの一つであり、AWS、Azure、GCP などのクラウドリソースを 宣言的に 構築・管理できます。

本記事では、Terraform の 導入、基本的な使い方、落とし穴、実際の経験から学んだポイント を詳しく解説します。


2. Terraformの基本概念

Terraform は HCL(HashiCorp Configuration Language) という独自の記法を使用し、クラウドリソースをコードで定義します。

メリット

  • コードでインフラ管理 → 手作業のミスを防ぎ、再現性が高い
  • クラウドに依存しない → AWS、GCP、Azure などマルチクラウドに対応
  • 宣言的な管理 → 望む状態を定義し、Terraformが自動で変更適用
  • 状態管理terraform.tfstate により、リソースの状態をトラッキング

デメリット

  • 学習コストがある → HCLに慣れる必要がある
  • 状態管理(State Management)が重要 → 破損するとリソース管理が困難
  • チームでの運用にはロック機構が必須 → Terraform Cloud などの活用が推奨

3. Terraformのインストールと導入

🛠 Terraformのインストール

1. Terraform CLI をダウンロード

# Macの場合(Homebrew)
brew install terraform

# Linuxの場合
sudo apt-get update && sudo apt-get install -y terraform

2. バージョン確認

terraform -v

4. Terraformの基本操作

Terraform は以下の手順でリソースを管理します。

📝 Terraformの基本フロー

  1. コードを書く (.tf ファイル作成)
  2. 初期化 (terraform init)
  3. 計画 (terraform plan)
  4. 適用 (terraform apply)
  5. 変更の破棄 (terraform destroy)

📌 AWS EC2の作成例

1. Terraform 設定ファイルを作成(main.tf

provider "aws" {
  region = "us-west-2"
}

resource "aws_instance" "web" {
  ami           = "ami-0abcdef1234567890"
  instance_type = "t2.micro"
}

2. 初期化(terraform init

terraform init

3. 計画(terraform plan

terraform plan

4. 適用(terraform apply

terraform apply -auto-approve

5. 破棄(terraform destroy

terraform destroy -auto-approve

terraform apply でリソースを作成し、terraform destroy で削除できます。


5. Terraformの落とし穴と対策

❌ 落とし穴 1: tfstate の管理ミス

Terraform は terraform.tfstate というファイルでリソースの状態を管理します。このファイルが壊れると リソースの整合性が取れなくなり、最悪の場合インフラが壊れる ことがあります。

対策:

  • Terraform Cloud や S3 バックエンドで tfstate を管理
  • チーム運用では terraform lock を利用

S3にtfstateを保存する例(backend.tf

terraform {
  backend "s3" {
    bucket = "my-terraform-state"
    key    = "global/s3/terraform.tfstate"
    region = "us-west-2"
  }
}

❌ 落とし穴 2: terraform destroy で誤って全削除

terraform destroy を誤って実行すると 全てのリソースが削除される 危険性があります。

対策:

  • terraform plan -destroy で削除プレビュー
  • prevent_destroy = true で重要なリソース削除を防ぐ
resource "aws_s3_bucket" "my_bucket" {
  bucket = "my-important-bucket"
  lifecycle {
    prevent_destroy = true
  }
}

❌ 落とし穴 3: Providerバージョンの不整合

Terraform は クラウドプロバイダ(AWS, GCP, Azure)ごとに Provider を利用 します。これが古いと terraform apply がエラーになります。

対策:

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = ">= 3.0"
    }
  }
}

6. Terraformを本番環境で運用するポイント

1. S3 + DynamoDBでtfstateを管理する

terraform {
  backend "s3" {
    bucket         = "my-terraform-state"
    key            = "env/prod/terraform.tfstate"
    region         = "us-west-2"
    dynamodb_table = "terraform-lock"
  }
}

2. terraform fmt でコードフォーマット

terraform fmt

3. terraform validate で構文チェック

terraform validate

4. CI/CDと統合(GitHub Actions)

jobs:
  terraform:
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Terraform Init
        run: terraform init
      - name: Terraform Plan
        run: terraform plan

7. まとめ

✅ Terraform を使うことで、インフラをコードで管理し、再現性を確保できる
terraform.tfstate の管理は S3やTerraform Cloud で行うのが安全
terraform destroy の誤用に注意し、 prevent_destroy を設定
GitHub Actionsと連携 してCI/CDを構築すると自動化が進む

Terraformを適切に活用し、安全かつ効率的なインフラ運用を実現しましょう!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?