本記事は、AWS経験者がTerraformを初めて使う際の入門ガイドです。
VPCとサブネットをTerraformで構築しながら、Terraformの書き方・使い方を学びます。
目次
- 第1章:前提条件と環境構築(Windows)
- 第2章:IaCとTerraformのメリット/CloudFormationとの違い
- 第3章:Terraformの構成と基本コマンド
- 第4章:Terraformのインストールと設定
- 第5章:TerraformでVPCとサブネットを構築
- 第6章:Terraformでリソースを削除する
- 第7章:まとめと次のステップ
第1章:前提条件と環境構築(Windows)
1-1. 作業対象
- Windows PC
- AWSアカウント(SSO接続可能な状態)
- VSCode
1-2. AWS認証について
TerraformからAWSにアクセスするにはSSOまたはアクセスキーが必要です。
アクセスキーは漏洩リスクが高いため非推奨です。
SSOの設定方法は以下を参考にしました。
https://zenn.dev/ak_yoshimatsu/articles/58ba44fdb3b463
第2章:IaCとTerraformのメリット/CloudFormationとの違い
2-1. IaCとは
Infrastructure as Code(IaC) は、インフラの構成をコードで定義・管理する手法です。
IaCのメリット
- デプロイ自動化、スピード向上
- 設定ミスや漏れの削減
- 同じ環境を複製しやすい(再現性)
- 災害復旧が容易
- コードとしてバージョン管理可能(Git等)
- CI/CDと連携しやすい
- ドキュメントとしても機能する
2-2. CloudFormationとTerraformの違い
比較項目 | CloudFormation | Terraform |
---|---|---|
対応クラウド | AWSのみ | マルチクラウド対応 |
記述形式 | YAML / JSON | HCL(独自の宣言的言語) |
状態管理 | AWS側で管理(スタック) |
terraform.tfstate で自己管理 |
モジュール構成 | ネストスタック | モジュール構成が柔軟 |
スタック管理 | テンプレート単位 | ディレクトリとstate単位 |
TerraformはAWS以外にもGCPやAzureなどに対応し、マルチクラウドに強いのが特徴です。
また、stateファイルを使って構成の状態を追跡できる点も異なります。
第3章:Terraformの構成と基本コマンド
3-1. HCLファイル構成
Terraformの設定ファイルは、HCLという専用の構文で書かれます。
ここでは最低限の2つのブロック(providerとresource)を紹介します。
.
├── main.tf # メイン設定(リソース定義)
├── provider.tf # プロバイダ設定(今回はmain.tfに含める)
3-2. 基本ブロックの説明
providerブロック:AWSとTerraformをつなぐ設定
このprovider
ブロックがないと、Terraformはどのクラウドに接続すべきかを判断できません。 そのため、最初に必ず記述します。
provider "aws" {
region = "ap-northeast-1" # 東京リージョン
profile = "SSO用プロファイル" # ~/.aws/config で定義したプロファイル名
}
パラメータ | 説明 |
---|---|
provider |
利用するクラウドプロバイダ(ここではAWS) |
region |
利用するAWSリージョン(例:東京ならap-northeast-1) |
profile |
認証に使用するプロファイル名(SSOやCLI設定) |
resourceブロック(リソース定義)
Terraformはこの定義をもとに、AWS上に実際のリソースを作成します。
resource "aws_vpc" "example" {
cidr_block = "10.0.0.0/16"
}
3-3. よく使うTerraformコマンド
コマンド | 説明 |
---|---|
terraform init |
初期化。プロバイダをダウンロード |
terraform plan |
実行前の差分確認 |
terraform apply |
実行。リソースを作成・変更 |
terraform destroy |
リソースを削除 |
第4章:Terraformのインストールと設定
4-1. Terraformインストール(Windows)
- 以下からWindows向けzipをダウンロード
https://developer.hashicorp.com/terraform/downloads -
terraform.exe
をC:\Terraform
など任意フォルダに配置 - 環境変数Pathにそのフォルダを追加
-
cmd
で以下を確認:
terraform --version
以下のような出力があれば、Terraformは正常にインストールされています。
Terraform v1.12.2
on windows_amd64
4-2. VSCode拡張機能
- 「HashiCorp Terraform」をインストール(コード補完と構文チェックに便利)
第5章:TerraformでVPCとサブネットを構築
以下の構成図のように、Terraformでコード化し、実際にAWS上に構築していきます。
構成概要:
- VPC:10.0.0.0/16
- Public Subnet 1:10.0.1.0/24(インターネット公開あり)
- Private Subnet 1:10.0.0.0/24(内部用途)
5-1. フォルダとファイル作成
まず、Terraformプロジェクト用のフォルダを作成し、その中に .tf
ファイルを用意します。
例:C:\Terraform\test
その中で以下の手順で main.tf
ファイルを作成します。
- フォルダ内で右クリック → 「新規作成」 → 「テキスト ドキュメント」
- ファイル名を
main.tf
に変更(拡張子まで変更) - 作成した
main.tf
を Visual Studio Code で開く
5-2. Terraformコードを書く(main.tf)
作成した main.tf
に以下のコードを記述します。
ここでは、VPCと2つのサブネット(パブリック/プライベート)を定義しています。
provider "aws" {
region = "ap-northeast-1"
profile = "SSO用プロファイル"
}
resource "aws_vpc" "test_vpc" {
cidr_block = "10.0.0.0/16"
enable_dns_support = true
enable_dns_hostnames = true
tags = {
Name = "test-vpc"
}
}
resource "aws_subnet" "private_subnet" {
vpc_id = aws_vpc.test_vpc.id
cidr_block = "10.0.0.0/24"
availability_zone = "ap-northeast-1a"
tags = {
Name = "private-subnet"
}
}
resource "aws_subnet" "public_subnet" {
vpc_id = aws_vpc.test_vpc.id
cidr_block = "10.0.1.0/24"
availability_zone = "ap-northeast-1a"
map_public_ip_on_launch = true
tags = {
Name = "public-subnet"
}
}
補足説明:
- providerブロック:どのクラウド(リージョン、プロファイル)を使うか指定
- aws_vpc:10.0.0.0/16 のVPCを作成。DNS関連も有効化
-
aws_subnet(2種):それぞれ別のCIDRで、VPC内にサブネットを作成
- Publicサブネットには
map_public_ip_on_launch = true
を付け、パブリックIPを自動付与
- Publicサブネットには
5-3. 実行手順
事前準備:SSO認証しておく
TerraformでAWSにアクセスするには、あらかじめAWS CLIでSSOログインを済ませておく必要があります。
aws sso login --profile <SSO用プロファイル>
コマンド実行手順
コードを書いたら、コマンドプロンプト(cmd)で作業ディレクトリに移動し、Terraformの各コマンドを実行します。
cd C:\Terraform\test
初期化(init)
terraform init
- プロバイダー情報(AWS用プラグイン)をダウンロード
-
.terraform/
フォルダが作成される
実行計画の確認(plan)
terraform plan
- 何が作成・変更・削除されるかを事前に確認できます
適用(apply)
terraform apply
-
最後に
yes
と入力すると、リソースの作成が始まります(y
は不可) -
数十秒で完了し、VPC/サブネットが作成されます
実行時の表示例 :
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
成功メッセージ例:
Apply complete! Resources: 3 added, 0 changed, 0 destroyed.
作成結果の確認
AWSマネジメントコンソールから以下を確認します:
- VPC →
test-vpc
- サブネット →
private-subnet
,public-subnet
リソースID(例:vpc-xxxxxxx
)は apply
時の出力ログにも表示されるので、それをコピーして検索
以上で、Terraformを使ったVPC+2サブネット構成の作成が完了です。
第6章:Terraformでリソースを削除する
Terraformでは、作成したリソースを削除する方法が複数あります。
ここでは、 初心者にも安全でわかりやすい方法(コメントアウト方式) で削除を行う手順を解説します。
6-1. 削除方法①:リソースをコメントアウトしてapplyする
main.tf
から削除したいリソースのブロックを コメントアウト(#
) して、再度 terraform apply
を実行します。
手順:
-
main.tf
を開く - 対象のリソースブロックをすべて
#
でコメントアウト
例:
# resource "aws_vpc" "test_vpc" {
# cidr_block = "10.0.0.0/16"
# enable_dns_support = true
# enable_dns_hostnames = true
# tags = {
# Name = "test-vpc"
# }
# }
# resource "aws_subnet" "private_subnet" {
# vpc_id = aws_vpc.test_vpc.id
# cidr_block = "10.0.0.0/24"
# availability_zone = "ap-northeast-1a"
# tags = {
# Name = "private-subnet"
# }
# }
# resource "aws_subnet" "public_subnet" {
# vpc_id = aws_vpc.test_vpc.id
# cidr_block = "10.0.1.0/24"
# availability_zone = "ap-northeast-1a"
# map_public_ip_on_launch = true
# tags = {
# Name = "public-subnet"
# }
# }
※ 対象ブロックを選択して
Ctrl + /
で一括コメントアウト可能
6-2. 差分を確認して削除(plan → apply)
以下の手順で、削除対象の差分を確認 → 実行します。
terraform plan
出力例(一部):
Plan: 0 to add, 0 to change, 3 to destroy.
選択したリソースがwill be destroyed
となっていれば、リソースは削除対象になっています。
terraform apply
-
yes
と入力して削除を実行します
6-3. マネジメントコンソールで削除確認
Terraformで削除されたリソースは、AWSマネジメントコンソールからも消えていることを確認します。
- VPC一覧 →
test-vpc
が消えていればOK - サブネット一覧から
private-subnet
,public-subnet
も削除されているはずです
6-4. 削除方法②(補足):terraform destroy コマンド
もう1つの削除方法として、コマンド一発で管理対象のすべてのリソースを削除する方法もあります。
terraform destroy
- plan → apply を自動的に実行
-
.tf
ファイルの内容に関係なく、stateファイルに基づく全リソースを削除
ただしこの方法は、意図しない削除が発生するリスクがあるため、慣れるまでは「コメントアウト → apply」方式を推奨します。
補足:stateファイルに注意
Terraformは .tf
ファイルだけでなく、リソースの管理状態を .tfstate
ファイルに保持しています。
たとえ .tf
を消しても、stateに残っていれば「存在している」と判断されてしまいます。
そのため、削除後も terraform plan
で差分がゼロになることを確認しておきましょう。
以上で、Terraformでのリソース削除手順は完了です。
第7章:まとめと次のステップ
今回のまとめ
- Terraformのインストールから初期構成まで体験
- VPC・サブネットをHCLで定義し、構築・削除の流れを理解
- CloudFormationとの思想・管理方式の違いを把握
次のステップ(簡単に紹介)
Terraformは本格運用に向けて、次のような機能もあります。
項目 | 説明例 |
---|---|
variable |
パラメータ化により、値の外部設定が可能に |
output |
作成したリソースの情報(例:VPC IDなど)を出力できる |
module |
よく使う構成を再利用可能な部品として切り出せる |
data |
既存リソースの情報を取得し、依存先として利用できる |
特に module
を使うと、「VPCを作る共通部品」「EC2を立てる共通パターン」などを再利用できるようになります。
参考URL・公式ドキュメント
- Terraform公式ドキュメント(AWS Provider)
- Terraform CLIコマンド一覧
- Terraform公式チュートリアル(Getting Started)
- AWS公式ドキュメント:AWS CLIのSSO設定
- AWS公式:Terraform を使用した VPC の作成
補足:記事内で紹介したSSOプロファイルの設定方法やアクセスキー非推奨の理由などは、上記のリンクから詳細を確認できます。