はじめに
業務ではterraformでAWSを管理してますがプライベートで使ったことないので、イチから使ってみようの回です。もともとオンプレやさんだったのでWrindowsでの操作となります。そろそろMacbook買おうかな、、
事前準備(インストール・AWS設定)
TerraformでAWSにインフラストラクチャを構築するために必要な事前準備を行います。
terraform
Macの場合は以下でインストール
$ brew tap hashicorp/tap
$ brew install hashicorp/tap/terraform
Windowsの場合はパッケージをダウンロード
-
Terraformの公式サイト(https://developer.hashicorp.com/terraform/install) からバイナリをダウンロードします。私はWindows11を使用しているのでAMD64をダウンロードしました。

-
ダウンロード後、zipを解凍して
terraform.exeが入っていることを確認します。 -
terraform.exeをショートカットで使用するので、保存が効く適当な場所に移動させます。 -
コントロールパネル>システム>システムの詳細設定>環境変数>システム環境変数>Path を開きます。
-
すべてOKでプロパティを閉じます。
-
Powershellを開き、以下のコマンドで結果が返ってくればOKです。
> terraform version Terraform v1.12.2 on windows_amd64
Microsoft Visual Studio Code
Microsoftの公式ページ(https://azure.microsoft.com/ja-jp/products/visual-studio-code)からVisual Studio Codeをインストールします。
VSCodeに拡張機能として「Github Copilot」「HashiCorp Terraform」「Japanese Language Pack for VS Code」をインストールしました。
AWS CLI
AWSの公式ページ(https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html)を参考にAWS CLIをインストールします。
Windowsの場合
Powershellを開き、以下のコマンドでAWS CLIをインストールします。
> msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi
インストールが完了したことを以下のコマンドで確認します。
> aws --version
aws-cli/2.27.49 Python/3.13.4 Windows/11 exe/AMD64
AWSアカウント アクセスキー設定
AWSコンソールにログインし、認証情報を取得します。すでにIAMユーザとしてAdministratorユーザを作成していたので今回はそのユーザを使用します。
AWSコンソール>IAM>ユーザー>(対象のユーザ)>アクセスキーを作成画面にて、ユースケース「コマンドラインインターフェイス(CLI)」選択し、アクセスキーを作成します。

アクセスキーを取得画面で「csvファイルをダウンロード」します。シークレットアクセスキーは画面が移った時点で確認できなくなってしまうので、注意が必要です。

インフラストラクチャ作成
Terraform Configuration作成
インフラストラクチャを構成するためのTerraformファイル、ファイル群のことをConfigurationといいます。以下ではTerraform Configurationを作成していきます。
terraformでAWS上にインフラストラクチャを構築する上で、terraformコードを管理するためのディレクトリが必要です。どこでもいいので、terraform用のディレクトリを作成します。
> mkdir VSCode\trial
VSCodeを開き、作成したディレクトリに以下の2ファイルを追加します。
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
# version = "~> 5.92" # コメントアウトしている場合は
}
}
required_version = ">= 1.2"
}
provider "aws" {
region = "ap-northeast-1"
}
resource "aws_instance" "trial" {
ami = "ami-03598bf9d15814511" # Amazon Linux 2023 AMI
instance_type = "t2.micro"
}
AWSアカウントアクセスキー適用
VSCodeにてターミナル画面の右上の下半分塗りつぶしされているマークを押下し、ターミナルを開きます。

cdコマンドでファイルを追加したディレクトリに移動します。
cd (作成したディレクトリ)
先ほど取得したAWSアカウントのアクセスキーに書き換え、以下の形でコマンドを実施します。
set AWS_ACCESS_KEY_ID=AKIA23WHT7AJFS7OO4OZ
set AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
上記コマンドが効かない場合は、以下コマンドでアクセスキーを設定。
$env:AWS_ACCESS_KEY_ID = "AKIA23WHT7AJFS7OO4OZ"
$env:AWS_SECRET_ACCESS_KEY = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
アクセスキーが設定されたことを確認。
Write-Host "AWS_ACCESS_KEY_ID: $env:AWS_ACCESS_KEY_ID"
Write-Host "AWS_SECRET_ACCESS_KEY: $env:AWS_SECRET_ACCESS_KEY"
Terraformワークスペースを初期化
以下のコマンドで適用のための最初の準備をします。terraform initコマンドは主に3つの機能を果たします。
- プロバイダのダウンロードと初期化 (Provider Installation)
- バックエンドの初期化 (Backend Initialization)
- モジュールのダウンロード (Module Installation)
> terraform init
Initializing the backend...
Initializing provider plugins...
- Finding latest version of hashicorp/aws...
- Installing hashicorp/aws v6.2.0...
- Installed hashicorp/aws v6.2.0 (signed by HashiCorp)
Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.
Terraform has been successfully initialized!
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
二回目以降に実施する場合は、以下を実施します。
> terraform init -upgrade
Terraform Configuration整形
terraform fmtコマンドでtfファイルのフォーマットを自動的に整えてくれます。見た目が綺麗になるのでぜひ実施しましょう。
> terraform fmt
main.tf
providers.tf
修正箇所の確認のみ行いたい場合は、以下のコマンドを実行します。
> terraform fmt -check
terraform validateコマンドで構成ファイルに問題がないか確認します。
> terraform validate
Success! The configuration is valid.
AWSリソースを作成
terraform planコマンドで作成されるAWSリソースの構成を確認します。
> terraform plan
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following
symbols:
+ create
Terraform will perform the following actions:
# aws_instance.trial will be created
+ resource "aws_instance" "trial" {
+ ami = "ami-03598bf9d15814511"
・・・
省略
・・・
+ instance_type = "t2.micro"
+ ipv6_address_count = (known after apply)
+ ipv6_addresses = (known after apply)
・・・
省略
・・・
}
Plan: 1 to add, 0 to change, 0 to destroy.
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run
"terraform apply" now.
terraform applyコマンドで実際に適用します。
最初にterraform planと同じようにどのような構成で作成されるか表示されるので、問題がないことを確認します。
構成内容に問題ないことを確認した後Enter a value:にyesと回答します。
> terraform apply
・・・
省略
・・・
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
その後リソースの適用が開始します。※完了まで時間がかかることがあります
aws_instance.trial: Creating...
aws_instance.trial: Still creating... [00m10s elapsed]
aws_instance.trial: Still creating... [00m20s elapsed]
aws_instance.trial: Creation complete after 22s [id=i-0fbf0a07b451b8d63]
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
Apply completeと出力されたら、AWSコンソール画面でインスタンスが実際に作成されていることが確認できました!

インフラストラクチャ変更
作成したリソースで変更、追加、修正が可能です。修正後はterraform applyで適用が可能です。
以下を適用した場合、インスタンスタイプが変更されます。
修正方法
resource "aws_instance" "trial" {
ami = "ami-03598bf9d15814511" # Amazon Linux 2023 AMI
- instance_type = "t2.micro"
+ instance_type = "t3.medium"
}
インフラストラクチャ削除
検証で作成したAWSリソースは、コストが掛かるので最後削除することを忘れないようにしましょう。
terraform destroyでリソースを削除することができます。
> terraform destroy
出力結果から作成したリソースが削除されることを確認して、yesで削除します。
Enter a value: yes
aws_instance.trial: Destroying... [id=i-0fbf0a07b451b8d63]
aws_instance.trial: Still destroying... [id=i-0fbf0a07b451b8d63, 00m10s elapsed]
aws_instance.trial: Still destroying... [id=i-0fbf0a07b451b8d63, 00m20s elapsed]
aws_instance.trial: Still destroying... [id=i-0fbf0a07b451b8d63, 00m30s elapsed]
aws_instance.trial: Destruction complete after 30s
Destroy complete! Resources: 1 destroyed.
Destroy complete!と出力されれば削除は完了です。
Appendix
terraformのベストプラクティス(簡易版)
Terraform Configuration 構成ファイル
- main.tf
- outputs.tf
- providers.tf
- terraform.tf
- variables.tf
- locals.tf
- override.tf
- backend.tf
参考
