最終更新:

Terraformの始め方 — クラウド契約なしでplan・applyを試す


設定を書き、変更案を読み、反映する

① main.tfinput = "ひよこ"?② planで確認1件を追加する予定✓③ applyで反映こんにちは、ひよこ!
今回の対象は組み込みのterraform_data。クラウドのサーバーは作らず、値をstateに記録して操作の流れを試します。
🎚 難易度 ★★☆ 中級者向け
⏱ 学習時間の目安 読むだけ約10分。演習時間は環境によって変わります
📚 前提知識 ターミナルの基本操作(クラウド契約は不要)
✅ このガイドで学べること
  • クラウドなしでinit・plan・applyを試す
  • HCLのresourceとoutputを読む
  • 変更案と表示結果を確認する
  • stateと秘密情報の扱いを説明する
ひよこ ひよこ
インフラをコードで作るって、最初からAWSの契約が必要?
ペンギン先生 ペンギン先生
Terraformは設定ファイルからインフラなどを管理するツールだよ。でも操作の流れはクラウドなしでも試せる。今回はterraform_dataという組み込みリソースで、あいさつの値を管理してみよう。
ひよこ ひよこ
値を管理するだけでも練習になるの?
ペンギン先生 ペンギン先生
設定を書く、変更案を見る、反映する、状態を記録する、という流れを体験できるよ。サーバーはまだ作らない。クラウドではプロバイダーという連携部品を使い、権限や料金も別に確認するんだ。
ひよこ ひよこ
何を書くの?
ペンギン先生 ペンギン先生
新しい練習フォルダにmain.tfを置こう。HCLでresourceに入力値、outputに表示したい結果を書く。本文の例を保存してからinitで初期化するよ。空フォルダのinitだけで何かが作られるわけではないんだ。
ひよこ ひよこ
planを実行したら何が見える?
ペンギン先生 ペンギン先生
今回なら1件を追加する予定が見えるよ。planは変更案を確認する段階で、その作成や変更を実行するのはapply。クラウドのplanでは現在の状態を読むためAPIへアクセスすることもあるよ。
ひよこ ひよこ
applyでは何を確認するの?
ペンギン先生 ペンギン先生
もう一度変更案を読み、今回の練習フォルダと対象でよいか確かめてからyesを入力する。greetingに「こんにちは、ひよこ!」が出れば成功。入力を変えると、次のplanに差分が出るよ。
ひよこ ひよこ
stateっていうファイルができた!
ペンギン先生 ペンギン先生
設定と管理対象の対応や値を記録する台帳だよ。常に現実を監視しているわけではない。今回の小さなローカル演習で使い、実際のインフラやチーム運用では保存先・権限・ロックなどを設計するんだ。
ひよこ ひよこ
パスワードもstateに入る?
ペンギン先生 ペンギン先生
値によっては入るよ。sensitiveで画面上の表示を隠しても、通常はstateやplanには残る。Gitに入れず、保存と共有を管理しよう。対応するephemeralやwrite-onlyの仕組みもあるけれど、適用できる場所には条件があるよ。
ひよこ ひよこ
終わったらdestroyで元に戻せる?
ペンギン先生 ペンギン先生
destroyはその設定とstateで管理する対象を削除する操作。過去の状態へ戻す万能な取り消しではないよ。今回は値のリソースを削除して終了。クラウドへ進むときは削除されるデータや依存先まで確認しよう。

最初のゴール:あいさつが出て、変更案を読める

クラウドのアカウントや認証キーは不要です。Terraform 1.4以降の組み込みリソース terraform_data を使い、外部サービスへの作成やprovisionerの実行を含めない演習にします。

1. Terraformを用意する

公式インストール案内からOSとCPUに合う配布物を入手します。WindowsではZIPを展開し、terraform.exe があるフォルダをPATHへ追加するか、その実行ファイルのパスで呼び出します。macOSのHomebrewなら次の公式tapが使えます。

brew tap hashicorp/tap
brew install hashicorp/tap/terraform
terraform version

Linuxは公式のディストリビューション別手順を使います。いずれも terraform version で版を確認。新しい練習用フォルダを作り、その中で以下を進めます。

2. main.tfを保存する

terraform {
  required_version = ">= 1.4.0"
}

resource "terraform_data" "greeting" {
  input = "ひよこ"
}

output "greeting" {
  value = "こんにちは、${terraform_data.greeting.output}!"
}

resource は管理する対象、input は今回の値、output は取り出す結果です。terraform_data は組み込みプロバイダーを使うので、外部プロバイダーの設定・ダウンロードは必要ありません。

3. 変更案を確認して反映する

terraform init
terraform fmt
terraform validate
terraform plan
terraform apply
terraform output

plan に 1 to add が出ることを確認します。apply の変更案にも目を通して yes を入力すると、結果に greeting = "こんにちは、ひよこ!" が出ます。output でも確認できます。

次に input = "ペンギン" に変え、plan を再実行。通常は同じ対象をその場で更新する ~ と差分が出ます。反映したければ apply し、あいさつの変化を確かめましょう。plan の + は追加、- は削除、~ は更新、-/+ は作り直しです。クラウドでは作り直しがデータや停止時間に影響することもあります。

stateは「対応を記録する台帳」

ローカル演習では terraform.tfstate が生成されます。設定ファイルそのものとは別です。値やリソース情報を保持するので、手作業で書き換えず、Gitに含めません。保存したplanファイルにも機密値が入ることがあります。

練習フォルダに置く .gitignore の例です。

.terraform/
*.tfstate
*.tfstate.*
*.tfplan

保存planに別の名前を使う場合も除外します。外部プロバイダーを使うプロジェクトでは、選んだ版などを記録する .terraform.lock.hcl は通常コミットします。sensitiveは暗号化やstateへの保存禁止ではありません。

チームではリモートバックエンドの暗号化・アクセス制御・同時実行のロックを設計します。S3バックエンドには use_lockfile によるロックがあり、DynamoDB方式は公式で非推奨です。リモートへ置くだけで安全になるわけではありません。

終了と、つまずいたとき

今回の練習フォルダで terraform destroy を実行し、対象を確認して yes を入力すると、管理した値のリソースが削除されます。これは「誤ったapplyを何でも取り消す」命令ではありません。本番で慌ててdestroyや -target を使わず、まず差分・影響範囲・復旧方法を確認します。

  • コマンドが見つからない:PATHと実行ファイルの場所を確認し、ターミナルを開き直す。
  • 対象が表示されない:main.tfを保存したフォルダで実行しているか確認する。
  • 構文エラー:validateの行番号を読む。全角の引用符を使っていないかも確認する。

次はHCLの用語解説で構文を整理し、AWS入門でクラウドの権限と料金を学んでから、外部サービスの作成へ進めます。

参考資料

2026年10月9日確認。

次に学ぶなら