ファイルに定義を記述することでインフラ環境を再現・構築できるようにする方法を Infrastructure as Code (IaC) と言います。テキストコードの自動実行なので、手動でのサーバ構築やネットワーク設定に比べて人為的なミスがなく誰でも同じインフラ環境が再現できます。また、テキストファイルなのでインフラのバージョン管理ができることになります。IaC ツールとして代表的なものにAWSのCloudFormationやHashiCorpのTerraformなどがあります。CloudFormationはAWS専用なのに対して、TerraformはAWS、Azure、GCPなど多くのクラウドプラットフォームに対応していますが、今回の記事では後者の Terraform を中心に学習していきます。ここではローカルのWindows環境からTerraformを使用してAWSのインフラを作成していきます。
Terraformのインストール
WindowsにTerraformをインストールする
Chocolateyをインストールする
Windowsのパッケージ管理ツールの Chocolatey を使って Terraformのインストールしていきますので、先にChocolateyのインストールをしておく必要があります。

Terraformをインストールする
以下も同様にPoserShellで次のコマンドを実行してください。
【インストールの実行】
choco install terraform
->スクリプトの実行の確認が表示されるのでここでは「A」を入力します。
Do you want to run the script?([Y]es/[A]ll - yes to all/[N]o/[P]rint): A
【インストールの確認】
terraform -version
terraform -help
Windowsのローカル環境からAWS上にインフラを作成する
TerraformからAWS上にインフラを作成する場合、AWS CLIのインストールとアクセスキーの設定が必要となります。CLIの設定が完了してからTeraformの設定をしていきましょう。
AWS CLIのインストールと設定
以下のインストーラをダウンロードして実行してください。
https://awscli.amazonaws.com/AWSCLIV2.msi
AWS CLIのバージョンが表示されればインストール成功です。
aws --version
次に、AWS CLIのデフォルトプロフィールの設定を行います。
アクセスキーとがシークレットについては「AWS CLIの設定方法」を参考に作成・取得してください。
【デフォルトプロファイル作成のコマンドを実行】
aws configure
->以下のプロンプトが表示されます。
AWS Access Key ID [None]: ********************
AWS Secret Access Key [None]: ****************************************
Default region name [None]: ap-northeast-1
Default output format [None]: json
デフォルトプロファイルの作成を確認します。
aws configure list-profiles
->defaultと表示されれば成功です。
参考URL:https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html
AWS CLI のプロフィールの設定は以下のパスに2ファイル作成されます。(Windows 11)
C:\Users\ユーザ名\aws
config
credentials
Terraformの設定
まずは任意の場所にプロジェクトフォルダを作成します。ここでは tutorial としておきます。そこにmain.tfとvariable.tfの2ファイルを作成します。
以下の例では東京リジョンにAmazon Linux 2023のマシンイメージのEC2インスタンスをt2.microで作成します。
【main.tf】
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.16"
}
}
required_version = ">= 1.2.0"
}
provider "aws" {
region = "ap-northeast-1"
}
resource "aws_instance" "app_server" {
ami = "ami-0599b6e53ca798bb2"
instance_type = "t2.micro"
tags = {
Name = var.instance_name
}
}
この変数ファイルではインスタンス名を定義しています。
【variable.tf】
variable "instance_name" {
description = "EC2 instance name tag value"
type = string
default = "com.example.www"
}
AMIマシンイメージは同じAMIの種類であってもリジョンによって異なるので注意が必要です。
AWSプロバイダのリソースタイプ
リソースブロックはリソースタイプとリソース名を指定します。
リソースタイプはプロバイダ名と実際のリソースタイプを組み合わせたものです。
リソース名は任意の名前を付けることができます。
resource "aws_instance" "app_server"
AWSのリソース名は以下のリンクを参考にして下さい。
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/instance
.tfファイルのフォーマットとバリデーション
以下のコマンドを使用して作成した.tfファイルのフォーマットやバリデーションをしておきましょう。
【.tfファイルのフォーマット】
terraform fmt
【.tfファイルのバリデーション】
terraform validate
ディレクトリの初期化
以下のコマンドでディレクトリの初期化を行います。
terraform init
同フォルダ内に以下の隠しフォルダが作成され、プロバイダプログラムとモジュールがインストールされます。今回の例ではプロバイダはaws となっています。
.terraform
インフラの作成
【実行プランの表示のみ】
terraform plan
【実行プランの表示と意思の確認後にプランの実行】
terraform apply
->プロンプトにyesと入力すると実行される。
インフラの実行処理が終わると以下の「状態ファイル」が同フォルダ内に作成されます。Terraformはこのファイル使ってインフラの更新・削除を行います。このファイルが無くなってしまうとこれらが出来なくなります。削除しないように十分注意しましょう。
terraform.tfstate
インフラ作成の確認
AWSの管理ページからEC2のサービスページに移動してEC2インスタンスが作成されている事を確認しましょう。
または、以下のコマンドを使用して作成されたインスタンスのリストを表示します。
aws ec2 describe-instances \
--query "Reservations[].Instances[].[InstanceId, Tags[?Key=='Name'].Value | [0], State.Name]" \
--output table
インフラの状態の確認
インフラの状態を確認するには以下のコマンドを使用します。
terraform state list
->terraform.tfstateを読み取って現在使用しているリソースのリストを表示
terraform show
->デフォルトで 現在の状態ファイル(terraform.tfstate)を読み取って管理しているリソースの詳細を表示
インフラの更新
変数パラメータを渡してEC2インスタンス名の変更をしてみましょう。
terraform apply -var "instance_name=com.example.ec2"
コマンド実行後に、上記のインフラ作成時同様に変更が反映されたかを確認しましょう。
ここでは変数を使ってインフラの変更をしたので、*.tfファイルが変更されるわけではないことに留意しておきましょう。
インフラの削除
次のコマンドでインフラの削除を行います。
terraform destroy
インフラ削除後の確認も前述同様にしてみましょう。
まとめ
今回の記事では、WindowsにTerraformをインストールしてAWS上にインフラを作成する手順を学習しました。WindowsにTerraformをインストールする際には先にChocolateyをインストールする必要がありましたね。AWSのCLIのインストールと設定も必要でした。Terraformの.tf設定ファイルを書いて作成するリソースを定義しました。ディレクトリの初期化、インフラの作成、更新、削除のコマンドも学びました。terraform.tfstateファイルの管理には気を付けないといけませんでしたね。これから様々なインフラのリソースの作成を試していきましょう。