Terraform

Terraform Cloud のVCS連携 実務ガイド: GitHub・GitLab との接続と試験対策

2026-04-19
NicheeLab編集部

Terraform Cloud/Enterprise はVCS連携を前提に設計されたプラットフォームで、プラン/アプライの自動トリガー、PRコメント、コミットステータス連携が標準機能として提供される。

本稿は GitHub・GitLab 連携の実務と試験で問われやすい論点(連携方式の選択、ワークスペースの紐づけ、トリガー条件、セキュリティ境界)に絞って整理する。

VCS連携の全体像と選択肢

VCS連携は組織(Organization)単位でVCS接続を作成し、各ワークスペースで対象リポジトリ(identifier = 組織/リポジトリ)とブランチを選ぶのが基本である。以後のプラン/アプライはVCSイベントにより自動で駆動される(VCS駆動ワークフロー)。

GitHub では GitHub App 連携が推奨。より細かい権限範囲とリポジトリ単位のインストール制御ができ、PRコメントやコミットステータス更新が安定する。GitLab ではOAuthアプリ連携が一般的で、指定ブランチやディレクトリ配下の変更のみをトリガーにできる。

  • VCS駆動とCLI駆動は排他ではないが、同一ワークスペースでの混在は運用を複雑化するため避けるのが定石。
  • ワークスペースはブランチ単位に分割するのが基本(例: main=本番、develop=検証)。
  • Monorepoでは working_directory と file_triggers/trigger_prefixes を使って影響範囲を限定する。
  • PR作成/更新では Speculative Plan(試行プラン)が走り、デフォルトブランチへのマージ後に本プラン/アプライが起動する(auto_applyの有無で自動適用か承認待ちかが変わる)。
連携方式主な対象権限・粒度/特徴
GitHub AppGitHub.com / GitHub Enterprise Cloudリポジトリ単位でインストール可、最小権限。PRコメント・ステータスが安定。推奨。
GitHub OAuthGitHub.com(従来方式)権限スコープが広くなりがち。既存運用からの移行経路として残存。
GitLab OAuthGitLab.com / GitLab CE/EEGitLab側でOAuthアプリを作成。ブランチ・ディレクトリ絞り込み可。PR/MRコメント・ステータス対応。

VCS駆動ワークフロー(概念)

push / PRwebhook / eventsmerge to defaultDeveloperGitHub / GitLabTerraform CloudWorkspaceSpeculative PlanPR時 / 読み取りPlan (本番) → Apply権限 / 承認に従うPR/MR コメントコミットステータスVCS 駆動: push/PR → Webhook → TFC Workspace → Speculative Plan / 本プラン/Apply → PR コメント

GitHub 連携(GitHub Appが第一候補)

GitHub では GitHub App 連携が推奨。組織管理者がTerraform Cloud側でGitHub App接続を追加し、GitHub上でアプリを対象リポジトリにインストールする。以降、選択したリポジトリとブランチを各ワークスペースに割り当てるだけでPRコメント・コミットステータス・トリガーが機能する。

試験では、細粒度なリポジトリ選択、最小権限、PRでのSpeculative Plan、デフォルトブランチへのマージで本プラン/適用、という流れを説明できることが重要。既存のOAuth接続があっても、新規ではGitHub Appを優先的に選ぶ前提が問われやすい。

  • インストール対象を限定できるため最小権限の原則に合致。
  • フォークからのPRは、権限やセキュリティ設定によりイベントが制限される場合があるため、組織ポリシーに合わせて運用を決める。
  • PRコメントにはリソース変更要約とplanの要点が掲載され、詳細はTerraform CloudのRunログで確認する。

GitLab 連携(OAuthアプリ)

GitLab ではOAuthアプリを作成し、Terraform Cloud 側のVCSプロバイダ作成画面で指示されるリダイレクト/コールバック設定をGitLabに登録する。接続が確立したら、ワークスペース作成時に対象リポジトリを検索して紐づける。

GitLab連携もPR/MRコメント・コミットステータス・Speculative Planをサポートする。Monorepo の場合は working_directory と trigger_prefixes を設定し、無関係な変更でRunが起動しないようにする。

  • 必要なスコープはGitLab側のドキュメントに従い最小限を付与する(一般にAPI/リポジトリアクセス)。
  • CI/CD等の他システムと同時利用時はイベント重複に注意し、Terraformの適用はTerraform Cloud側に集約するのが無難。
  • 自己ホスト型GitLab(CE/EE)も同様の流れで接続可能。Terraform Enterprise でも原理は同じ。

ワークスペースとブランチ/ディレクトリ設計

VCS連携の単位はワークスペース。一般に環境・境界ごとに分割する(例: app-prod, app-stg)。ブランチは該当環境のソース・オブ・トゥルースに合わせる(例: mainをprod、developをstgに対応)。

Monorepo では working_directory を指定し、file_triggers_enabled と trigger_prefixes を使って変更検知を限定する。これにより、巨大リポジトリでも不要なRunの氾濫を抑えられる。

  • working_directory: リポジトリ直下以外にコードがある場合に必須。
  • trigger_prefixes: 指定パス配下の変更のみでRunを起動。複数指定可。
  • ingress_submodules: trueでGitサブモジュールもクローン(モジュールやポリシーをサブモジュール管理している場合に有効)。
  • auto_apply: 本番は通常false(承認必須)、検証環境はtrueも選択肢。

イベント連携とセキュリティの要点

PR/MR作成・更新時はSpeculative Planが走り、結果はPRコメントやコミットステータスで可視化される。デフォルトブランチへのマージが行われると、対象ワークスペースの本プラン/アプライが起動する。ブランチフィルタを設定していれば、そのブランチ以外のpushではRunは起動しない。

セキュリティ上、VCS接続のクレデンシャルはTerraform Cloudの組織スコープで安全に保管され、Run環境へは直接露出しない。クラウドプロバイダの認証情報や機密はワークスペースの環境変数/機密変数で管理し、VCSにコミットしない。

  • PRコメントとコミットステータスで「誰が/何を/どこに」適用しようとしているかを可視化。
  • フォークからのPRは、接続方式や組織のセキュリティ設定によりイベントが制限されることがある。
  • Terraform CloudのIPは公開SaaSであり、通常はVCSからのイベントを受け取れる。エンタープライズ環境ではアウトバウンド/インバウンドの到達性を事前検証する。

IaCとしてVCS連携を管理(tfeプロバイダ)

VCS連携そのものもコードで管理できる。ハッシュコープ公式のtfeプロバイダを用いれば、ワークスペース作成と同時にVCSリポジトリ、ブランチ、作業ディレクトリ、トリガー設定を宣言できる。OAuth/GitHub Appなど組織側の接続作成はUI/APIで先に行い、その識別子(例: oauth_token_id)を参照する。

試験では、tfe_workspace の vcs_repo.identifier は org/repo 形式、working_directory で配下ディレクトリを指定、file_triggers_enabled と trigger_prefixes でMonorepoの不要トリガーを避ける、というポイントが問われやすい。

  • ワークスペース命名規則とブランチの対応をコードで固定化。
  • auto_apply の既定値を環境別に明示。
  • 組織接続ID(例: oauth_token_id)はUIやAPIで払い出し、機密変数として渡す。

tfeプロバイダでワークスペースとVCS連携を作成する例

# tfeプロバイダでTerraform Cloud/Enterpriseを管理
terraform {
  required_providers {
    tfe = {
      source = "hashicorp/tfe"
    }
  }
}

provider "tfe" {
  # Terraform Cloud (SaaS) は hostname 省略可。Terraform Enterprise はホスト名を指定。
  token = var.tfe_token
}

variable "tfe_token" { type = string }
variable "organization" { type = string }
variable "oauth_token_id" { type = string } # 組織のVCS接続(OAuth等)ID

resource "tfe_workspace" "app_prod" {
  name         = "app-prod"
  organization = var.organization

  # Monorepoの一部のみをターゲット
  working_directory     = "infra/terraform"
  file_triggers_enabled = true
  trigger_prefixes      = ["infra/terraform/"]

  # 本番は通常、手動承認にする
  auto_apply = false

  # VCSリポジトリとの紐づけ
  vcs_repo {
    identifier         = "my-org/app-infra"   # org/repo 形式
    branch             = "main"               # 対象ブランチ
    oauth_token_id     = var.oauth_token_id   # 組織のVCS接続ID
    ingress_submodules = true                 # サブモジュールを取得
  }
}

問題で確認

Pro

問題 1

GitHub.com の特定リポジトリだけに最小権限で接続し、PR作成時にSpeculative Planの結果をPRコメントとコミットステータスで返したい。Terraform Cloud で推奨される連携方式はどれか?

  1. GitHub App 連携を用いる
  2. GitHub OAuth 連携で組織全体に広い権限を付与する
  3. VCS連携を使わずCLI駆動で手動トリガーのみを使う
  4. GitLab OAuth 連携をGitHub.comに対して設定する

正解: A

GitHub App はリポジトリ単位のインストールと最小権限・安定したPRコメント/ステータス連携を提供するため、要件とベストプラクティスに合致する。

よくある質問

Monorepo で不要なRunを避けるには?

working_directory をターゲット配下に設定し、file_triggers_enabled と trigger_prefixes を併用する。これにより指定パス配下の変更のみでRunが起動し、他領域の変更ではトリガーされない。

PRを作成したのにSpeculative Planが走らない/コメントが付かない場合の確認点は?

ワークスペースが正しいブランチに紐づいているか、リポジトリがVCS接続の対象に含まれているか、アプリ(GitHub App/OAuth)の権限・インストール対象が適切か、フォークPRが制限されていないか、そしてTerraform Cloud側でRunが抑止(キュー満杯、ポリシーチェック待ち等)されていないかを確認する。

プライベートモジュールレジストリにモジュールを公開するにはVCS連携が必要?

はい。VCS接続で対象リポジトリを登録し、一般的な命名規則(terraform-<PROVIDER>-<NAME>)とセマンティックバージョンのタグを付ける。Terraform Cloud がタグを検出してモジュールを登録する。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Terraform

Terraform HCL 構文の基礎:Block / Attribute / Expression を正しく使い分ける

Terraform Associate で頻出の HCL 構文を、ブロック・属性・式の3視点で整理。実務で迷いがちな書き...

Terraform

Terraform Authoring & Ops Pro: 上位資格の範囲と対策

上位レベルを想定したTerraformの設計・運用ドメインを整理し、実務で通用する対策を提示。モジュール設計、ステート運...

Terraform

Terraform Providers の基本: プラグイン型アーキテクチャを正しく使いこなす

Associate レベルで押さえるべき Provider の基礎、インストール、バージョニング、認証、エイリアス運用を...

Terraform

Terraform Resourceブロック徹底ガイド: 最小単位のリソース定義

Associateレベルで押さえるべきResourceブロックの構造、依存関係、メタ引数、ライフサイクル制御を実務目線で...

Terraform

Terraform Data Source徹底理解:既存リソースの参照で壊さず足す

Terraform Associate向けに、Data Sourceを用いた既存リソース参照の基本、選択基準、評価順序、...

Terraformの記事一覧 (101件)
© 2026 NicheeLab All rights reserved.