Terraform
エンジニアのためのWebチートシート
Terraformは、HashiCorpが開発したIaC(Infrastructure as Code)ツールです。 HCL(HashiCorp Configuration Language)でインフラをコードとして定義し、マルチクラウド環境を宣言的に管理できます。 CLIコマンド、HCL構文、リソース定義、ステート管理、モジュール、関数などをチートシートにまとめました。
CLIコマンド
コアワークフロー
| コマンド | 説明 |
|---|---|
| terraform init | ワーキングディレクトリを初期化し、プロバイダをダウンロードします。 |
| terraform init -upgrade | プロバイダ・モジュールを最新バージョンに更新します。 |
| terraform validate | 設定ファイルの構文・論理チェックを行います。 |
| terraform fmt | HCLコードを標準フォーマットに整形します。 |
| terraform fmt --check | フォーマットチェックのみ行います(CI/CD向け)。 |
| terraform plan | 実行計画を表示します(ドライラン)。 |
| terraform plan -out=tfplan | 実行計画をファイルに保存します。 |
| terraform apply | インフラを作成・更新します。 |
| terraform apply -auto-approve | 確認プロンプトなしで適用します。 |
| terraform apply -var="key=value" | 変数を指定して適用します。 |
| terraform apply -target="resource.name" | 特定のリソースのみ適用します。 |
| terraform destroy | 管理下の全インフラを破棄します。 |
| terraform destroy -auto-approve | 確認プロンプトなしで破棄します。 |
検査 & デバッグ
| コマンド | 説明 |
|---|---|
| terraform show | ステートファイルを人間可読形式で表示します。 |
| terraform output | 定義された出力値を一覧表示します。 |
| terraform output -json | 出力値をJSON形式で表示します。 |
| terraform console | 式のテスト・デバッグ用の対話コンソールを起動します。 |
| terraform graph | DOT言語で依存関係グラフを生成します。 |
| terraform providers | 使用しているプロバイダをツリー表示します。 |
| terraform version | Terraformのバージョンを表示します。 |
HCL構文基礎
terraform & provider ブロック
バージョン制約、プロバイダ設定、バックエンド設定の基本です。
入力変数 (variable)
モジュールの入力パラメータを定義します。型、デフォルト値、バリデーションを設定できます。
出力値 & ローカル値
output(外部公開値)とlocals(内部計算値)の定義です。
リソース定義
リソース & データソース
インフラリソースの作成と既存リソースの参照です。
メタ引数 (count / for_each)
リソースの複製に使用するメタ引数です。
count vs for_each 比較
| 特性 | count | for_each |
|---|---|---|
| 入力型 | 数値 | map / set |
| 参照方法 | count.index | each.key, each.value |
| 削除時の挙動 | インデックスずれが発生 | キーベースで安全 |
| 推奨用途 | 同一構成のリソース複製 | 異なる構成のリソース群 |
ステート管理
ステートコマンド
| コマンド | 説明 |
|---|---|
| terraform state list | 管理しているリソースの一覧を表示します。 |
| terraform state show <resource> | 特定リソースの詳細情報を表示します。 |
| terraform state mv <src> <dst> | リソースのアドレスを変更します(リネーム)。 |
| terraform state rm <resource> | ステートからリソースを削除します(実インフラは残る)。 |
| terraform state pull | リモートステートを取得して標準出力に表示します。 |
| terraform state push | ローカルステートをリモートにプッシュします。 |
| terraform import <resource> <id> | 既存のインフラリソースをTerraform管理下にインポートします。 |
| terraform force-unlock <lock_id> | ステートのロックを強制解除します。 |
リモートバックエンド
ステートファイルをリモートストレージで管理する設定です。
import & moved ブロック
コード内でインポートやリソース移動を宣言的に管理します(v1.5+)。
モジュール
モジュールの使用
再利用可能なTerraformコードをモジュールとして呼び出します。
ソースの種類
| ソース種類 | 例 |
|---|---|
| ローカルパス | ./modules/vpc |
| Terraform Registry | hashicorp/consul/aws |
| GitHub | github.com/org/repo |
| S3バケット | s3::https://bucket/module.zip |
バージョン制約
| 演算子 | 意味 |
|---|---|
| = 1.2.3 | 指定バージョンのみ |
| != 1.2.3 | 指定バージョン以外 |
| >= 1.0, < 2.0 | 指定範囲内のバージョン |
| ~> 1.2 | ~> 1.2 → >= 1.2, < 2.0 |
式と関数
式・条件・ループ
条件式、forループ、splat式、dynamicブロックの使い方です。
主要な組み込み関数
| カテゴリ | 主要関数 |
|---|---|
| 文字列 | format, join, split, replace, upper, lower, trimspace |
| 数値 | abs, ceil, floor, max, min, parseint |
| コレクション | length, merge, concat, flatten, keys, values, lookup, contains, distinct, sort, one |
| 型変換 | tostring, tonumber, tobool, tolist, toset, tomap |
| エンコーディング | jsonencode, jsondecode, yamlencode, yamldecode, base64encode, base64decode |
| ファイル | file, fileexists, templatefile, abspath, basename |
| ネットワーク | cidrhost, cidrnetmask, cidrsubnet, cidrsubnets |
ライフサイクル & プロビジョナ
ライフサイクルルール
リソースの作成・更新・削除の動作をカスタマイズする設定です。
プロビジョナ
リソース作成後にコマンドを実行します(非推奨、代替策推奨)。
ワークスペース
ワークスペースコマンド
| コマンド | 説明 |
|---|---|
| terraform workspace list | ワークスペースの一覧を表示します。 |
| terraform workspace show | 現在のワークスペース名を表示します。 |
| terraform workspace new <name> | 新しいワークスペースを作成して切り替えます。 |
| terraform workspace select <name> | 指定したワークスペースに切り替えます。 |
| terraform workspace delete <name> | ワークスペースを削除します。 |
ワークスペースの活用
terraform.workspace で環境を切り替える使用例です。
プロジェクト構成
推奨ディレクトリ構成
Terraformプロジェクトの標準的なファイル構成です。
.gitignore 推奨設定
Terraformプロジェクトでバージョン管理から除外すべきファイルです。
ベストプラクティス
| プラクティス |
|---|
| リモートバックエンドを使用し、暗号化とバージョニングを有効化する |
| .terraform.lock.hcl をGitにコミットする |
| terraform.tfstate は絶対にGitにコミットしない |
| 変数には description, type, validation を設定する |
| モジュールにはバージョン制約を指定する(~> 推奨) |
| terraform plan を常に apply 前に実行する |
| センシティブな値には sensitive = true を使用する |
| count よりも for_each を推奨する(安全な削除) |
| ステートロックを必ず有効化する |
引用・参考リンク
Related Cheatsheets
- Docker-Dockerとはコンテナと呼ばれるOSレベルの仮想化環境を提供するソフトウェアです。近年、コンテナ化したアプリケーションのデプロイ、スケーリング、管理を行うためのコンテナオーケストレーションシステムであるKubernetesの採用事例も増え、ますますコンテナ仮想化技術は注目されています。 Dockerコマンドをチートシートにまとめました。
- GCP(Google Cloud Platform)-Google Cloud Platform(GCP)とは、Googleが提供しているクラウドコンピューティングサービスです。Google検索やYouTubeなどのサービスでも利用されています。GCPが提供するCLIツールのコマンドをチートシートにまとめてみました。
- HTTPステータスコード-HTTPステータスコードは、HTTPリクエストに対するサーバーの応答状態を示す3桁の数値コードです。 1xx〜5xxの各カテゴリと、よく使われるステータスコードをチートシートにまとめました。
- Kubernetes-Kubernetes(K8s)は、コンテナ化されたアプリケーションのデプロイ、スケーリング、管理を自動化するためのオーケストレーションシステムです。 kubectlコマンドやYAMLマニフェストの基本をチートシートにまとめました。
- Nginx-Nginxは高性能なWebサーバー、リバースプロキシ、ロードバランサーです。 軽量で高い同時接続処理能力を持ち、静的ファイル配信やAPI Gatewayとして広く使われています。 基本コマンド、サーバーブロック、リバースプロキシ、SSL、セキュリティ設定などをチートシートにまとめました。
- AWS-AWS(Amazon Web Services)は、世界最大のクラウドプラットフォームです。 コンピューティング、ストレージ、データベース、ネットワーキングなど200以上のサービスを提供しています。 AWS CLIの基本操作、IAM、S3、EC2、Lambda、ECS、RDS、DynamoDB、CloudFormation、CloudWatch、Route 53、SQS/SNSなどをチートシートにまとめました。
Related Goods
WebTerm - Recommended tools
WebTermは、ブラウザでLinuxコマンド・Gitコマンドを安全に実行でき、チュートリアル式で学べるターミナルサンドボックスです。
AIコーディングツールの普及に伴い、CLIの基礎知識を身につける重要性は増しています。実際のターミナルを操作するのに抵抗がある方でも、WebTermはローカル環境を壊す心配がありません。「会員登録不要・無料」で利用でき、学習環境として最適です。

WebTerm
Browser Terminal Sandbox for Learning CLI
開く
All Cheatsheets
エンジニア・プログラマー向けの便利なチートシートを多数まとめています(SP/Tablet/PC対応)
すべてのチートシートを見る


