2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWS×Terraform】入門|(Windows向け)

Last updated at Posted at 2025-07-31

本記事は、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)

  1. 以下からWindows向けzipをダウンロード
    https://developer.hashicorp.com/terraform/downloads
  2. terraform.exeC:\Terraform など任意フォルダに配置
  3. 環境変数Pathにそのフォルダを追加
  4. cmdで以下を確認:
terraform --version

以下のような出力があれば、Terraformは正常にインストールされています。

Terraform v1.12.2
on windows_amd64

4-2. VSCode拡張機能

  • 「HashiCorp Terraform」をインストール(コード補完と構文チェックに便利)

第5章:TerraformでVPCとサブネットを構築

以下の構成図のように、Terraformでコード化し、実際にAWS上に構築していきます。

空白のボード のコピー (2).jpeg

構成概要:

  • 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 ファイルを作成します。

  1. フォルダ内で右クリック → 「新規作成」 → 「テキスト ドキュメント」
  2. ファイル名を main.tf に変更(拡張子まで変更)
  3. 作成した 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を自動付与

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 時の出力ログにも表示されるので、それをコピーして検索

image.png


以上で、Terraformを使ったVPC+2サブネット構成の作成が完了です。


第6章:Terraformでリソースを削除する

Terraformでは、作成したリソースを削除する方法が複数あります。
ここでは、 初心者にも安全でわかりやすい方法(コメントアウト方式) で削除を行う手順を解説します。


6-1. 削除方法①:リソースをコメントアウトしてapplyする

main.tf から削除したいリソースのブロックを コメントアウト(# して、再度 terraform apply を実行します。

手順:

  1. main.tf を開く
  2. 対象のリソースブロックをすべて # でコメントアウト
    例:
# 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 も削除されているはずです

image.png


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・公式ドキュメント


補足:記事内で紹介したSSOプロファイルの設定方法やアクセスキー非推奨の理由などは、上記のリンクから詳細を確認できます。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?