TerraformでEC2を構築してみた

記事タイトルとURLをコピーする

概要

MacでTerraform を使用して、バージョン管理ツール tfenv を導入しつつ、AWS にEC2インスタンスを新規デプロイするまでの初期設定・構築手順をまとめました。

Terraformとは?

Terraform(テラフォーム)は、HashiCorp社が開発したオープンソースのインフラストラクチャ・アズ・コード(IaC)ツールです。

tfenvとは?

tfenv は Terraform のバージョン管理を行うツールです。 Terraform はアップデートが早く、プロジェクトごとに要求されるバージョンが異なることがよくあります。tfenv を使うことで、ディレクトリごとに使用するバージョンを簡単に切り替えることができます。

利用イメージ

プロジェクトA (terraform 1.13.5)
プロジェクトB (terraform 1.7.5)
プロジェクトC (terraform 0.13.7)

このように複数の環境を行き来する場合でも、コマンド一つでバージョンをスイッチできます。

詳細については、以下の公式リポジトリを参照してください。

https://github.com/tfutils/tfenv

tfenv インストール手順

Homebrew を使用して tfenv をインストールします。

% brew install tfenv

インストール確認

以下のようにバージョンが表示されればインストール完了です。

% tfenv --version
tfenv 3.0.0

Terraformインストール手順

まず、インストール可能な Terraform のバージョン一覧を確認します。

% tfenv list-remote
1.15.0-alpha20251119
1.14.0
1.14.0-rc2
1.14.0-rc1
1.14.0-beta3
1.14.0-beta2
1.14.0-beta1
1.14.0-alpha20250911
1.14.0-alpha20250903
1.14.0-alpha20250827
1.14.0-alpha20250813
1.14.0-alpha20250806
1.14.0-alpha20250724
1.14.0-alpha20250716
1.13.5
... (略) ...

今回は例として 1.13.5 をインストールします。(※ご自身の環境に合わせて最新の安定板などを選択してください)

% tfenv install 1.13.5
Installing Terraform v1.13.5
...
Installation of terraform v1.13.5 successful.

インストールしただけではまだ使用できません。use コマンドで使用するバージョンを有効化(固定)します。

% tfenv use 1.13.5
Switching default version to v1.13.5

最後に Terraform 自体のバージョンを確認します。

% terraform -v
Terraform v1.13.5
on darwin_arm64

これで Terraform コマンドが使えるようになりました。

AWS 認証情報の設定

Terraform が AWS を操作するための認証情報を設定します。 セキュリティの観点から、AWS CLI の aws configure コマンドを使用して設定することを推奨します。

(※AWS CLIが未インストールの場合は brew install awscli で入れてください)

% aws configure
AWS Access Key ID [None]: xxxxxxxxxxxxxxxxxx
AWS Secret Access Key [None]: xxxxxxxxxxxxxxxxxx
Default region name [None]: ap-northeast-1
Default output format [None]: json

Region: 東京リージョンの ap-northeast-1 を指定します。

Terraform コードの作成

作業用ディレクトリを作成し、設定ファイルを記述していきます。

% mkdir terraform-demo
% cd terraform-demo
% touch main.tf provider.tf

Terraform では .tf 拡張子のファイルがすべて読み込まれますが、役割ごとにファイルを分けるのが一般的です。

provider.tf

プロバイダー(AWSを使うという宣言)やリージョン情報を記載します。

provider "aws" {
  region = "ap-northeast-1"
}

main.tf

実際に構築するリソースを定義します。 注意: ami や subnet_id は環境によって異なります。ご自身のAWSコンソールで確認した値に書き換えてください。

resource "aws_instance" "main" {
  # Amazon Linux 2023 などのAMI IDを指定
  ami           = "ami-0a6fd4c92fc6ed7d5" 
  instance_type = "t2.micro"
  
  # 構築先のサブネットIDを指定
  subnet_id     = "subnet-00b3a6495c495ede2"

  tags = {
    Name = "terraform-test-ec2"
  }
}

補足: .gitignoreについて Gitで管理する場合は、.gitignore ファイルを作成し、.terraform ディレクトリや *.tfstate ファイルを除外設定することをお忘れなく!

現在のディレクトリ構成

コマンドラインで tree コマンドを実行し、ファイルが正しく作成されているか確認します。 以下のように2つのファイルができていると思います。

% tree
.
├── main.tf
└── provider.tf

1 directory, 2 files

リソースのデプロイ

ここから実際にコマンドを実行していきます。

terraform init

プロジェクトの初期化を行います。必要なプラグインなどがダウンロードされます。

% terraform init

Initializing the backend...
Initializing provider plugins...
...
Terraform has been successfully initialized!

Terraform has been successfully initialized! と表示されれば成功です。

terraform plan

実行計画(ドライラン)を確認します。実際に何が作成されるかをプレビューできます。

% 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.main will be created
  + resource "aws_instance" "main" {
      + ami                          = "ami-0a6fd4c92fc6ed7d5"
      + instance_type                = "t2.micro"
      + subnet_id                    = "subnet-00b3a6495c495ede2"
      ... (中略) ...
    }

Plan: 1 to add, 0 to change, 0 to destroy.

最後にある Plan: 1 to add が重要です。「1つのリソースを追加する」という意味です。エラーが出なければ次に進みます。

terraform apply

実際にリソースを作成します。

% 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 と入力して Enter を押すと、構築が始まります。

aws_instance.main: Creating...
aws_instance.main: Still creating... [10s elapsed]
aws_instance.main: Creation complete after 32s [id=i-0f31630855e67214c]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

AWSマネジメントコンソールを確認すると、EC2インスタンスが起動しているはずです!

リソースの削除 (お片付け)

検証が終わったら、課金を防ぐためにリソースを削除しておきましょう。

% terraform destroy

確認プロンプトで yes を入力すると、作成したEC2が削除されます。

まとめ

今回は Mac + tfenv 環境で Terraform を使い、AWS EC2 を構築するまでの基本的な流れを紹介しました。 今後は main.tf を書き換えるだけで、サーバーのスペック変更や台数の増減もコマンド一つで管理できるようになります。