Terraform Cloud / HCP Terraform — stateのリモート管理

1. 概要

  • Terraform Cloud / HCP Terraformとは
  • 無料プランでできること
  • stateのリモート管理
  • リモートplan/applyの実行
  • ローカルのS3バックエンドとの違い

Terraform Cloud(現在はHCP Terraformにリブランド)はHashiCorpが提供するTerraformのSaaSプラットフォームです。stateの管理・plan/applyの実行環境・チームコラボレーション機能を提供します。


2. Terraform Cloud(HCP Terraform)の主な機能

State管理

  • stateをTerraform Cloudで自動管理(S3バックエンド不要)
  • バージョン履歴・変更履歴が自動で保存される
  • ロック機能でチームの同時実行を防ぐ

リモート実行

  • plan/applyをTerraform Cloudのサーバーで実行できる
  • ローカルのTerraformバージョン差異の問題がなくなる
  • 実行ログがWeb UIで確認できる

チームコラボレーション

  • planの結果をUIで確認しapplyを承認するワークフロー
  • VCS(GitHub/GitLab)との連携でPRから自動plan
  • チームメンバーへの権限設定

無料プランの範囲: 5ユーザーまで、すべての基本機能が無料で使える(2024年時点)


3. セットアップ

ステップ1: HCP Terraformへのサインアップ

https://app.terraform.ioでアカウントを作成します。

ステップ2: Organizationとworkspaceの作成

Web UIからOrganization名(例: my-company)とworkspace名(例: aws-prd)を作成します。

ステップ3: Terraformコードの設定

terraform {
  required_version = ">= 1.9"

  # cloud ブロックでHCP Terraformに接続
  cloud {
    organization = "my-company"  # Organizationを指定

    workspaces {
      name = "aws-prd"  # workspace名を指定
    }
  }

  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}

provider "aws" {
  region = "ap-northeast-1"
}

variable "environment" {
  description = "環境名"
  type        = string
  default     = "prd"
}

data "aws_ami" "amazon_linux_2023" {
  most_recent = true
  owners      = ["amazon"]
  filter {
    name   = "name"
    values = ["al2023-ami-*-x86_64"]
  }
}

resource "aws_instance" "web" {
  ami           = data.aws_ami.amazon_linux_2023.id
  instance_type = "t3.micro"

  root_block_device {
    volume_size = 20
    volume_type = "gp3"
    encrypted   = true
  }

  tags = {
    Name        = "${var.environment}-web"
    Environment = var.environment
    ManagedBy   = "terraform"
  }
}

ステップ4: 認証

# HCP Terraformにログイン(トークンを取得してローカルに保存)
$ terraform login

# initでcloudバックエンドを初期化
$ terraform init

4. AWSの認証情報をHCP Terraformに設定

リモート実行モードではHCP Terraform側にAWSの認証情報を設定します。

# Web UIの Workspace → Variables → Environment Variables に追加:
# AWS_ACCESS_KEY_ID       = xxxxxxxxxx
# AWS_SECRET_ACCESS_KEY   = xxxxxxxxxx(Sensitiveにチェック)
# AWS_DEFAULT_REGION      = ap-northeast-1

または、OIDCを使ってIAMロールを引き受ける設定もできます(推奨)。


5. ローカルS3バックエンドとの比較

比較S3バックエンドHCP Terraform
stateの保存場所S3(自己管理)HCP Terraform(マネージド)
バージョン管理S3のバージョニング機能自動でバージョン管理
インフラコストS3/DynamoDBのコスト無料プランあり
初期設定の手間S3・DynamoDB・KMSの作成が必要サインアップのみ
CI/CD連携GitHub Actionsで自前構築VCS連携が組み込み
チームコラボレーション別途設定が必要UI・権限管理が組み込み
実行環境各自のローカル or CIHCP Terraform(統一環境)

6. どちらを選ぶべきか

HCP Terraformが向いている場合:

  • チームでTerraformを使い始める
  • CI/CDの構築コストを下げたい
  • stateの自己管理インフラを避けたい

S3バックエンドが向いている場合:

  • AWSのみにインフラを集約したい
  • 既にS3バックエンドの運用が確立している
  • HCP Terraformへの外部依存を避けたい

7. 関連記事


8. まとめ

  • Terraform Cloud(HCP Terraform)はstateのマネージドサービス + リモート実行環境
  • 5ユーザーまで無料で使える(基本機能)
  • cloudブロックで既存コードに組み込める。terraform loginterraform initで接続
  • S3バックエンドより初期設定が簡単で、チームコラボレーション機能が組み込み
  • AWSのみにインフラを集約したい場合や既存S3運用があればS3バックエンドで十分

動作確認バージョン: Terraform >= 1.9 公式ドキュメント: https://developer.hashicorp.com/terraform/cloud-docs