【Terraform入門】初心者でも迷わない!環境構築から最初のリソース作成までの完全ガイド ~ これをマスターすれば、毎日の作業が劇的に楽になりますよ!
やあ、君!ようこそ、インフラ自動化の世界へ!
これから君が触れることになる「Terraform」、これ、本当にすごいツールなんだ。初めて触れる君でも、これさえ読めば、まるで魔法のようにクラウド環境を自在に操れるようになる。まるで、君の指先一つで、計算機たちが動き出すような感覚。そんな体験を、今日は一緒に味わっていこうじゃないか。
「インフラ構築って、なんか難しそう…」
「コマンドばっかりで、全然覚えられない…」
そんな不安、全部吹き飛ばしてあげるよ。Terraformは、君の「めんどくさい」を「楽しい」に変えてくれる、まさに革命的なツールなんだ。
この記事では、
- Terraformって、そもそも何ができるの?
- どうやってインストールするの?
- AWSアカウントとどう繋げるの?
- 最初の「Hello, World!」として、EC2インスタンスを立ち上げてみよう!
この4つのステップを、画面のキャプチャも交えながら、まるで隣で一緒に作業しているかのように、優しく丁寧に解説していくよ。
さあ、君のインフラ構築の旅を、最高のスタートで始めよう!
1. Terraformって、一体何者なんだ? ~ インフラを「コード」で管理するということ
まず、Terraformが何をするためのツールなのか、その本質を理解しよう。
Terraformは、Infrastructure as Code (IaC) の代表的なツールの一つだよ。
IaCってのは、簡単に言うと、「インフラの構成を、人間が読めるコード(設定ファイル)で定義し、それを自動で構築・管理する」 ってことなんだ。
これまでのインフラ構築って、どんなイメージだったかな?
- AWSのマネジメントコンソールをポチポチクリックして、サーバーを起動する。
- ネットワーク設定をコマンドで入力していく。
- 「あれ、この設定、前にやった時と違うな…」なんて、手作業のズレに悩む。
こんな経験、きっとあるはず。でも、Terraformを使えば、そんな悩みは過去のものになる。
Terraformのすごさは、以下の3点に集約されるよ。
1. 宣言的な記述:
「こういう状態になっていてほしい」という「結果」をコードで書くだけ。Terraformが、その状態にするために「どうすればいいか」を自動で計算してくれるんだ。まるで、料理のレシピを見ながら、シェフが最高の味付けを自動でしてくれるみたいだね。
2. 冪等性 (べきとうせい):
これがTerraformの真髄の一つ。一度実行したコードを、何度実行しても、常に同じ結果になるということ。つまり、一度作ったインフラは、壊れるまで(あるいはコードで削除するまで)ずっと同じ状態を保ってくれる。手作業で「あれ、設定漏れてないかな?」と心配する必要がなくなるんだ。
3. 多様なクラウド・サービスに対応:
AWSだけでなく、Google Cloud Platform (GCP)、Microsoft Azureといった主要なクラウドはもちろん、KubernetesやGitHub、Datadogなど、本当にたくさんのサービスに対応している。まるで、どんな舞台でも活躍できる名優だね。
このTerraformを使いこなせるようになると、
- 構築作業のスピードが格段に上がる
- 設定ミスが激減する
- インフラ構成の変更履歴をコードで管理できる
- チームメンバーとのインフラ構成の共有が容易になる
といった、まさに「劇的に楽になる」体験ができるようになるんだ。
さあ、この素晴らしいツールを、君の手で動かせるようにしていこう!
2. Terraformを君のPCに迎え入れよう ~ インストールと基本設定
まずは、Terraformを動かすための準備から始めよう。
2.1 Terraformのインストール
Terraformのインストールは、とっても簡単。君のOSに合わせて、以下のいずれかの方法でインストールできるよ。
2.1.1 macOSの場合 (Homebrewを使うのが一般的)
ターミナルを開いて、このコマンドを実行するだけ。
brew install terraform
これで、Terraformが君のMacにインストールされる。
インストールされたか確認するには、次のコマンドを打ってみよう。
terraform version
バージョン情報が表示されれば成功だ!
2.1.2 Windowsの場合 (Chocolateyまたは手動インストール)
Windowsを使っているなら、パッケージマネージャーのChocolateyを使うのが楽ちんだ。
choco install terraform
Chocolateyがない場合は、Terraformの公式サイトからバイナリファイルをダウンロードして、PATHを通す方法もあるよ。
公式ドキュメントを参考にしてみてね。([Terraform Download](https://developer.hashicorp.com/terraform/downloads))
インストール後、コマンドプロンプトやPowerShellで `terraform version` と打って、バージョンが表示されるか確認しよう。
2.1.3 Linuxの場合 (ディストリビューションのパッケージマネージャーまたは手動インストール)
Debian/Ubuntu系ならapt、Fedora/CentOS系ならyum/dnfが使える場合が多い。
例えばUbuntuなら、
sudo apt update
sudo apt install terraform
こちらも、`terraform version` で確認してね。
2.2 AWSアカウントの準備と認証情報の設定
TerraformでAWSリソースを操作するには、AWSアカウントが必要になる。まだ持っていない場合は、[AWS公式サイト](https://aws.amazon.com/jp/)から無料で作成できるので、作っておこう。
そして、Terraformが君のAWSアカウントにアクセスするための「鍵」となる認証情報を設定する必要がある。これは、君のPCに「私はこのAWSアカウントを操作しても良いですよ」という権限をTerraformに与えるためのものだ。
一番簡単な方法は、AWS CLI(コマンドラインインターフェース)を使って設定する方法だよ。
1. AWS CLIのインストール:
まだAWS CLIをインストールしていない場合は、各OSに合わせてインストールしてね。
[AWS CLI Installation Guide](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-chap-install.html)
2. 認証情報の初期設定:
インストールしたら、ターミナルで以下のコマンドを実行するんだ。
aws configure
すると、いくつか質問されるはず。
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: ap-northeast-1 # 例: 東京リージョンなら ap-northeast-1
Default output format [None]: json
- AWS Access Key ID と AWS Secret Access Key は、AWS IAM(Identity and Access Management)で、プログラムからアクセスするためのキーペアを作成して取得する必要があるよ。
- 注意: このキーは、パスワードと同じくらい重要! 誰にも知られないように、厳重に管理してね。できれば、必要最低限の権限を持ったIAMユーザーを作成して、そのキーを使うのがベストプラクティスだよ。
- Default region name は、君がよく使うAWSのリージョンを指定しよう。例えば、東京リージョンなら `ap-northeast-1` だ。
- Default output format は、通常 `json` でOK。
これで、君のPCには、TerraformがAWSにアクセスするための「設定ファイル」が作成された。Terraformは、この設定ファイルを使って、自動的に君のAWSアカウントに接続してくれるようになるんだ。
3. いざ、最初のコードを書いてみよう! ~ EC2インスタンスを作成する
いよいよ、Terraformのコードを書いて、実際にAWSリソースを作成してみよう!
今回は、一番ポピュラーな「EC2インスタンス」を一つ、作成してみるよ。EC2インスタンスは、AWS上の仮想サーバーのことだ。
3.1 プロジェクトのディレクトリを作成
まず、Terraformのコードを管理するためのディレクトリ(フォルダ)を作ろう。どこでも良いんだけど、分かりやすいように `terraform-practice` という名前にしてみようか。
mkdir terraform-practice
cd terraform-practice
3.2 Terraformの設定ファイルを作成
このディレクトリの中に、Terraformの設定ファイルを作成する。Terraformの設定ファイルは、通常 `.tf` という拡張子を持つんだ。
今回は `main.tf` という名前で作成してみよう。
touch main.tf
3.3 EC2インスタンスを定義するコードを書く
`main.tf` をテキストエディタで開いて、以下のコードを書き込もう。
Terraformのバージョンを指定します。
必須ではありませんが、将来的な互換性を保つために指定することを推奨します。
terraform {
required_version = “>= 1.0.0” # Terraformのバージョン1.0.0以上を要求します
# 使用するプロバイダー(今回はAWS)とそのバージョンを指定します。
required_providers {
aws = {
source = “hashicorp/aws” # HashiCorpが提供するAWSプロバイダーを使用します
version = “~> 5.0” # バージョン5.x系を使用します
}
}
}
AWSプロバイダーの設定を行います。
ここでリージョンを指定します。
provider “aws” {
region = “ap-northeast-1” # 東京リージョンを指定します。必要に応じて変更してください。
}
EC2インスタンスを作成するためのリソースブロックです。
resource “aws_instance” “my_first_instance” {
# AMI (Amazon Machine Image) IDを指定します。
# これは、OSや初期設定済みのテンプレートのようなものです。
# ここでは、Amazon Linux 2の最新AMIを使用していますが、
# 実際の運用では、AWSのコンソールで最新のAMI IDを確認して指定するのが一般的です。
ami = “ami-0ff8a91507f77f867” # 例: Amazon Linux 2 AMI ID (us-east-1の例。リージョンによって異なります)
# インスタンスタイプを指定します。
# t2.microは無料利用枠で利用できる最も小さいインスタンスタイプです。
instance_type = “t2.micro”
# このインスタンスに付けるタグ(ラベル)を指定します。
# Nameタグは、AWSコンソールでインスタンス名として表示されます。
tags = {
Name = “MyFirstTerraformInstance”
}
}
作成されたEC2インスタンスのIDを、Terraformの実行結果として出力します。
output “instance_id” {
description = “The ID of the created EC2 instance.”
value = aws_instance.my_first_instance.id # 上で定義したインスタンスのIDを取得します
}
コードが少し多いように見えるかもしれないけど、一つずつ見ていけば大丈夫!
- `terraform {}` ブロック: Terraform本体のバージョンや、今回使う「プロバイダー」を指定している部分だよ。プロバイダーっていうのは、TerraformがAWSやGCPみたいな特定のサービスとやり取りするための「通訳さん」みたいなものだ。今回はAWSのプロバイダーを指定しているね。
- `provider “aws” {}` ブロック: どのAWSリージョンでリソースを作るかを指定しているよ。`ap-northeast-1` は東京リージョンだよ。
- `resource “aws_instance” “my_first_instance” {}` ブロック: ここで、実際に何を作るかを定義しているんだ。「`aws_instance`」っていうのは、AWSのEC2インスタンスを作るための「リソースタイプ」。「`my_first_instance`」は、このリソースに付ける君が好きな名前(Terraform内部で使う識別子)だよ。
- `ami`: サーバーのOSイメージだよ。今回はAmazon Linux 2のAMI IDを指定しているけど、これはリージョンによって異なる場合があるから、実際に使うときはAWSコンソールで最新のものを確認するのが丁寧なやり方だ。
- `instance_type`: サーバーのスペック(CPU、メモリなど)を決めるもの。`t2.micro` は無料枠で使える小さいタイプだから、まずはこれで試してみよう。
- `tags`: 作成するリソースに名前を付けたり、分類したりするためのラベルだよ。`Name` タグは、AWSコンソールでインスタンス名として表示されるから分かりやすいね。
- `output “instance_id” {}` ブロック: Terraformでリソースを作成した後、「作成されたインスタンスのIDは何だったっけ?」と後から確認できるように、そのIDを出力してくれる設定だよ。
3.4 Terraformのコマンドを実行してみよう!
さあ、いよいよコードを実行する時が来た!
`main.tf` を保存したら、ターミナルで `terraform-practice` ディレクトリにいることを確認して、以下のコマンドを順番に実行してね。
1. `terraform init`:
まず、このコマンドを実行する。これは、Terraformがプロジェクトを初期化し、必要なプロバイダー(今回の場合はAWSプロバイダー)をダウンロードしてくれるコマンドだよ。
terraform init
実行すると、こんなメッセージが出るはず。
Initializing the backend…
Initializing provider plugins…
- Finding hashicorp/aws versions matching “~> 5.0″…
- Installing hashicorp/aws v5.xx.x…
- Installed hashicorp/aws v5.xx.x (signed by HashiCorp)
Terraform has been successfully initialized!
「Successfully initialized!」と出れば成功だ!
2. `terraform plan`:
次に、このコマンドを実行する。これは、君が書いたコード(`main.tf`)が、実際にどんなリソースを作成・変更・削除するのかを、実行前に確認できるコマンドなんだ。まるで、料理を作る前にレシピ通りに材料が揃っているか確認するようなものだね。
terraform plan
実行すると、TerraformがAWSの状態と君のコードを比較して、差分を計算してくれる。
今回は何もリソースがない状態から作るから、「0 added, 0 changed, 0 destroyed」ではなく、「1 to add」といったメッセージが出て、作成されるリソースの詳細が表示されるはずだよ。
Terraform used the selected providers to generate the plan.
…
Plan: 1 to add, 0 to change, 0 to destroy.
「1 to add」と出ているのが、EC2インスタンスが1つ作成されることを示しているね。
3. `terraform apply`:
いよいよ、実際にリソースを作成するコマンドだ!`plan` で確認した内容で、本当に実行して良いか聞かれるから、慎重に確認しよう。
terraform apply
実行すると、`plan` で表示された内容と同じものが再度表示され、「`Terraform will perform the actions described above.`」と出た後、「`Do you want to proceed?`」と聞かれる。ここで `yes` と入力してEnterキーを押すと、TerraformがAWSに指示を出して、EC2インスタンスを作成してくれるんだ。
…
Plan: 1 to add, 0 to change, 0 to destroy.
Do you want to proceed?
Enter a value: yes
実行が完了すると、最後に `output` で指定したインスタンスIDが表示されるはずだよ。
aws_instance.my_first_instance: Creating…
…
aws_instance.my_first_instance: Still creating… [10s elapsed]
…
aws_instance.my_first_instance: Creation complete after 25s [id=i-0123456789abcdef0]
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
Outputs:
instance_id = “i-0123456789abcdef0”
おめでとう!君はTerraformを使って、初めてAWSリソースを作成することに成功した!
AWSマネジメントコンソールを開いて、EC2の画面を見てごらん。君が名付けた `MyFirstTerraformInstance` という名前のインスタンスが、ちゃんと動いているはずだよ!
3.5 作成したリソースを削除する
せっかく作ったリソースだけど、このままにしておくとAWSの利用料金がかかってしまう可能性がある。
Terraformで作成したリソースは、Terraformで削除するのが基本。以下のコマンドを実行しよう。
terraform destroy
これも `apply` と同様に、何が削除されるかの確認を求められる。`yes` と入力すると、作成したEC2インスタンスが削除されるよ。
…
Destroy complete! Resources: 1 to destroy.
Outputs:
instance_id = “i-0123456789abcdef0”
これで、作成したリソースは綺麗に削除された。AWSコンソールでも、インスタンスがいなくなっていることを確認してみてね。
4. まとめ:君のインフラ構築は、ここから始まる!
どうだったかな? Terraformのインストールから、最初のEC2インスタンス作成、そして削除まで、一連の流れを体験してもらえたと思う。
最初は少し戸惑うかもしれないけれど、この「コードを書いて、`init` → `plan` → `apply`」という流れが、Terraformでのインフラ構築の基本中の基本なんだ。
今日君が学んだことは、
- Terraformはインフラをコードで管理するツールである
- `terraform init` でプロジェクトを初期化し、プロバイダーを準備する
- `terraform plan` で、何が実行されるか事前に確認できる
- `terraform apply` で、実際にインフラを構築・変更する
- `terraform destroy` で、作成したインフラを綺麗に削除できる
ということ。
これからは、
- もっと色々なAWSリソース(S3バケット、VPC、RDSなど)をTerraformで定義してみる
- 複数の`.tf`ファイルに分割して、コードを整理する
- Terraformの「状態ファイル (`.tfstate`)」の役割を理解する
- Terraform Cloudなどのサービスで、チーム開発をスムーズにする
といった、さらに奥深い世界へと君は進んでいける。
Terraformをマスターすれば、君のインフラ構築は、単なる作業から、創造的なプロセスへと変わるはずだ。
「これをマスターすれば、毎日の作業が劇的に楽になりますよ」って言ったけれど、それは本当だ。
この先、君のインフラ管理は、もっと楽しく、もっと効率的になる。
さあ、この素晴らしい旅の、最高のスタートを切れた君に、心からの拍手を送りたい。
もし何か分からないことがあれば、いつでも聞いてくれ。君のインフラ構築の成功を、心から応援しているよ!