terraform applyは最終的にインフラへ変更を適用するコマンドです。試験ではplanとの関係、承認の入れ方、ロックや並列度などの安全装置がよく問われます。
本稿は、CLI単体とTerraform Cloud/Enterpriseの両方で、変更の確認・承認・適用をどう設計するかを、手順と判断基準に落として解説します。
terraform applyは計画と適用を実行します。対話モードでは差分プランを表示し、承認プロンプトにYesで続行します。-auto-approveを付けると承認なしで適用しますが、本番では推奨されません。
安全に承認を挟むには、terraform plan -outでバイナリの計画ファイルを作り、人手レビュー後にterraform apply planfileで適用します。計画ファイルは同一の作業ディレクトリと依存関係(プロバイダ版や変数)を前提とし、長距離・長期間の持ち運びには向きません。
デフォルトで状態はリフレッシュされます(-refresh=falseで抑制可能)。ロックは対応バックエンドで有効化され、-lockと-lock-timeoutで制御できます。並列度は-parallelismで設定します。
最小構成の承認フローは、保存プランをアーティファクトにして人手承認を挟む方法が堅実です。レビューはplanのテキスト出力、適用は保存プランで再現性を担保します。
ポイントは、レビュー対象(人が読むテキストのplan出力)と適用対象(機械が読むplanファイル)を分離すること、適用時に状態ロックを有効にすること、作業ツリーやプロバイダ版が一致していることをCIで検証することです。
CLI保存プランを用いた承認フロー
Terraform Cloud/Enterprise(TFC/E)はリモート実行と組織的な承認・ポリシーを提供します。VCS連携では、プルリク作成時にスペキュレイティブプラン(適用しない試算)を自動生成し、mainブランチへのマージで本番ワークスペースの計画が走ります。ワークスペース設定でApplyを手動承認にすれば、人のクリックが入るまで適用されません。
SentinelポリシーやRun Tasksでガードレールを実装できます。ハードマンダトリは違反時に実行停止、ソフトマンダトリは警告のうえ手動継続が可能です。コスト見積もり、監査ログ、機密値の保護も併せて利用できます。
| 項目 | CLI単体 | Terraform Cloud/Enterprise | GitOps CI/CD |
|---|---|---|---|
| 承認ポイント | 人手レビュー後にapply実行者が判断 | ワークスペースの手動承認とポリシー判定 | PRレビュー+環境別ジョブ承認 |
| アーティファクト | 保存プラン(tfplan)とplan出力 | Run内の計画結果・ポリシーレポート | CIログと保存プラン(任意) |
| 状態保存/ロック | S3+DynaboDB等のバックエンド | TFC/E内で管理・自動ロック | バックエンドに依存(共通基盤推奨) |
| ポリシー/ガード | スクリプトでlint/validate | Sentinel/Run Tasks/Cost Estimation | ポリシーステップ(OPA, tfsec等) |
| 監査性 | CIログ+手作業の記録次第 | 組織・ワークスペース単位の監査ログ | CIの監査ログ・署名付きリリース |
| 機密情報 | env/var-fileの取り扱い次第 | Variablesに保護属性、Redact済み出力 | CIのシークレット管理に依存 |
状態ロックは同時実行による破壊的な競合を防ぎます。S3バックエンドではDynamoDBテーブルを併用してロックを実現します。ConsulやTFC/Eはロックをネイティブ提供します。apply時は-lock=true(既定)で、競合時は-lock-timeoutで待機時間を延ばせます。
並列度は-parallelismで制御します。デフォルトは10前後(環境により既定値あり)。依存の少ない大量リソースを作るときは上げ、レートリミットの厳しいAPIでは下げます。
再実行時は冪等性を前提としつつ、プロバイダの差分判定や外部変更(ドリフト)を考慮します。ドリフトが疑わしいときはplan -refresh-onlyやapply -refresh-onlyでまず状態を実態に合わせるのが無難です。
保存プランの適用失敗: 計画生成後にプロバイダ版や設定、変数が変わると適用に失敗します。同じ作業ディレクトリ・同じ依存で短時間にhandoffする運用に限定しましょう。
-auto-approveの誤用: CIで誤って本番に即時反映しないよう、環境ごとにジョブを分離し、適用ステップには必ず手動承認を入れます。
-targetの乱用: 局所適用は依存グラフの一貫性を壊しがちです。緊急避難以外では使わず、根本原因を修正して全体計画を適用します。
最小限の安全装置を備えたスクリプト例です。保存プランを生成・保存し、レビュー可能なテキストを出力、承認後に同一プランを適用します。S3+DynamoDB等のバックエンドを前提にしています。
環境ごとに変数ファイルとバックエンド設定を分け、適用先はブランチやタグで明示します。
保存プラン駆動の承認・適用テンプレート(bash)
# 初期化(ロックファイルを尊重)
terraform init -lockfile=readonly || exit 1
# 変数と並列度、ロック待機を調整
ENV=prod
TFVARS=env/${ENV}.tfvars
PLAN_OUT=.artifacts/${ENV}.tfplan
mkdir -p .artifacts
# 計画を生成(保存プラン)
terraform plan \
-var-file="${TFVARS}" \
-out="${PLAN_OUT}" \
-lock=true -lock-timeout=5m \
-parallelism=5 \
-input=false || exit 1
# レビュー用にテキスト化(PRに添付)
terraform show -no-color "${PLAN_OUT}" > .artifacts/${ENV}.plan.txt || exit 1
# --- ここで人手承認を実施(CIのManualジョブなど) ---
# 承認後に同一プランを適用
terraform apply -input=false -lock=true -lock-timeout=5m "${PLAN_OUT}" || exit 1
echo "Apply finished for ${ENV}"Associate
問題 1
組織で本番適用前に人手承認を必須にしたい。CLIのみで最も安全な運用として適切なのはどれか。
正解: A
保存プランを生成してレビューし、その同一プランを適用することで、計画と適用の不整合を防げます。-auto-approveは本番では避けるべきで、planテキストのみを保存してapplyをやり直すと計画が再計算されレビュー内容と乖離する恐れがあります。destroyは要件に反します。
保存プラン(tfplan)はどこまで再利用できますか?
同一の作業ディレクトリと依存関係(プロバイダ版、モジュール、変数入力)が一致している前提で短期間のハンドオフに使います。構成やバイナリが変わると適用に失敗し得るため、長期保管や別環境への流用は避けてください。
-auto-approveはいつ使っても良いですか?
検証用環境や一時的なサンドボックスでは有用ですが、本番では人手承認やポリシー判定を挟むべきです。Terraform Cloud/Enterpriseではワークスペースに手動承認を設定し、CLIでは保存プラン+Manualジョブで代替します。
Terraform Cloudの承認は誰ができますか?
ワークスペースのアクセス権(例: Write/Apply許可を持つチーム)に付与されたユーザーが実行・承認できます。組織設定でチームとロールを分離し、Plan権限とApply権限を分けるのがベストプラクティスです。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Terraform HCL 構文の基礎:Block / Attribute / Expression を正しく使い分ける
Terraform Associate で頻出の HCL 構文を、ブロック・属性・式の3視点で整理。実務で迷いがちな書き...
Terraform Authoring & Ops Pro: 上位資格の範囲と対策
上位レベルを想定したTerraformの設計・運用ドメインを整理し、実務で通用する対策を提示。モジュール設計、ステート運...
Terraform Providers の基本: プラグイン型アーキテクチャを正しく使いこなす
Associate レベルで押さえるべき Provider の基礎、インストール、バージョニング、認証、エイリアス運用を...
Terraform Resourceブロック徹底ガイド: 最小単位のリソース定義
Associateレベルで押さえるべきResourceブロックの構造、依存関係、メタ引数、ライフサイクル制御を実務目線で...
Terraform Data Source徹底理解:既存リソースの参照で壊さず足す
Terraform Associate向けに、Data Sourceを用いた既存リソース参照の基本、選択基準、評価順序、...