Terraform Cloud vs Jenkins — エンタープライズ選定ガイド

1. 概要

  • Terraform CloudとJenkinsのCI/CD構成の違い
  • Jenkinsが今も選ばれるエンタープライズの理由
  • 移行を検討する際の判断基準
  • それぞれのTerraform実行パターン

JenkinsはオンプレミスのCI/CDサーバーとして長年使われてきました。Terraform Cloudはクラウドネイティブな管理プラットフォームです。社内にJenkins環境がある場合、乗り換えるべきかどうかはチームの状況によります。


2. 機能比較

比較軸Terraform CloudJenkins
導入形態SaaS(HashiCorp管理)セルフホスト(自社管理)
State管理組み込み別途S3等が必要
初期セットアップ低(GUIで完結)高(サーバー構築・プラグイン設定)
運用コストサブスクリプション費用サーバー費用+人件費
カスタマイズ性低〜中非常に高い
オンプレ対応Terraform Cloud Agentネイティブ対応
監査ログ標準機能プラグイン依存
Terraform特化機能Sentinel・Run Tasks等なし(自前で実装)

3. JenkinsでTerraformを実行する構成

// Jenkinsfile
pipeline {
    agent any

    environment {
        AWS_REGION = 'ap-northeast-1'
    }

    stages {
        stage('Checkout') {
            steps {
                checkout scm
            }
        }

        stage('Terraform Init') {
            steps {
                withCredentials([
                    string(credentialsId: 'aws-access-key-id', variable: 'AWS_ACCESS_KEY_ID'),
                    string(credentialsId: 'aws-secret-access-key', variable: 'AWS_SECRET_ACCESS_KEY')
                ]) {
                    sh 'terraform init'
                }
            }
        }

        stage('Terraform Plan') {
            when { changeRequest() }
            steps {
                withCredentials([
                    string(credentialsId: 'aws-access-key-id', variable: 'AWS_ACCESS_KEY_ID'),
                    string(credentialsId: 'aws-secret-access-key', variable: 'AWS_SECRET_ACCESS_KEY')
                ]) {
                    sh 'terraform plan -no-color -out=tfplan'
                    sh 'terraform show -no-color tfplan'
                }
            }
        }

        stage('Terraform Apply') {
            when { branch 'main' }
            steps {
                withCredentials([
                    string(credentialsId: 'aws-access-key-id', variable: 'AWS_ACCESS_KEY_ID'),
                    string(credentialsId: 'aws-secret-access-key', variable: 'AWS_SECRET_ACCESS_KEY')
                ]) {
                    sh 'terraform apply -auto-approve'
                }
            }
        }
    }
}

4. Terraform Cloudの基本構成

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

  cloud {
    organization = "my-company"
    workspaces {
      name = "production-ap-northeast-1"
    }
  }
}

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

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

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"
  }
}

5. Jenkinsを継続すべきケース

Jenkinsが有利な状況:

  • 社内ネットワーク(閉域網)からしかAWSにアクセスできない環境(Terraform Cloud Agentで代替可能だが、Jenkinsの方がシンプル)
  • すでにJenkinsで大規模なパイプラインが稼働しており、移行コストが高い
  • Terraformの実行前後に社内固有の処理(承認フロー・CMDB更新等)が必要で、Jenkinsのエコシステムに依存している
  • ライセンスコストを一切かけたくない(Jenkins自体はOSS)

6. Terraform Cloudへ移行すべきケース

  • Jenkins サーバーの運用・メンテナンス(OS更新・プラグイン管理)が負担になっている
  • Terraformの実行環境を複数チームで共有したい(Workspace単位でアクセス制御)
  • StateファイルをS3+DynamoDBで管理しているが、チームが拡大してロック競合が増えた
  • セキュリティ要件(監査ログ・Sentinelポリシー)を充足したい

7. 関連記事


8. まとめ

  • Jenkinsは「オンプレ・閉域網・既存資産の活用」に強い。カスタマイズ性は最高だが運用負荷が高い
  • Terraform Cloudは「Terraform専用機能・低運用負荷・SaaS」が強み。State管理が組み込みで楽
  • 既存Jenkinsが安定稼働しているなら無理に移行しない選択も合理的
  • 新規プロジェクトやチーム拡大タイミングでTerraform Cloudへの移行を検討する

対象バージョン: Terraform >= 1.9 / Jenkins LTS 公式ドキュメント: https://developer.hashicorp.com/terraform/cloud-docs