1. 概要
- Terraform CloudとJenkinsのCI/CD構成の違い
- Jenkinsが今も選ばれるエンタープライズの理由
- 移行を検討する際の判断基準
- それぞれのTerraform実行パターン
JenkinsはオンプレミスのCI/CDサーバーとして長年使われてきました。Terraform Cloudはクラウドネイティブな管理プラットフォームです。社内にJenkins環境がある場合、乗り換えるべきかどうかはチームの状況によります。
2. 機能比較
| 比較軸 | Terraform Cloud | Jenkins |
|---|---|---|
| 導入形態 | 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. 関連記事
- Terraform Cloud vs GitHub Actions — どちらで運用すべきか — SaaS同士の比較
- JenkinsでTerraform運用はまだアリ? — Jenkins詳細解説
- Terraform CloudのVCS連携設定ガイド — 移行手順
- Terraform Cloudは無料でどこまで使える? — 料金プラン
- Terraform CI/CDのシークレット管理 — 認証情報の扱い
- CI/CDパイプラインとTerraform — 基本パターン
8. まとめ
- Jenkinsは「オンプレ・閉域網・既存資産の活用」に強い。カスタマイズ性は最高だが運用負荷が高い
- Terraform Cloudは「Terraform専用機能・低運用負荷・SaaS」が強み。State管理が組み込みで楽
- 既存Jenkinsが安定稼働しているなら無理に移行しない選択も合理的
- 新規プロジェクトやチーム拡大タイミングでTerraform Cloudへの移行を検討する
対象バージョン: Terraform >= 1.9 / Jenkins LTS 公式ドキュメント: https://developer.hashicorp.com/terraform/cloud-docs