はじめに
Terraformを使ってAWSリソース(VPC、EC2)を作成する手順について、Terraform初学者の自分用のメモを兼ねて記載しておきます。
今回は下記アーキテクチャ図の環境を構築します。
前提
・windows環境であること
・Terraformが端末にインストールされていること
・AWS CLIが端末にインストールされていること
・AWSのアカウント(アクセスキーとシークレットアクセスキー)があること
アーキテクチャ図
やること
1.tfファイルの作成
2.AWS Configの設定
3.Terraformでリソースの作成
4.AWSリソースの確認
1.tfファイルの作成
Terraformでは「.tf」というファイルを使ってインフラ構築を行います。
全てを1つのファイルで構築することも可能ですが、本記事では以下のようにファイルに分けて構築を行います。※tfファイルの名前は自由に設定可能です、
①main.tf :プロバイダを設定するファイル
②variables.tf :変数を設定するファイル
③vpc.tf :作成するリソースを定義するファイル
各ファイルを以下のように設定していきます。
①main.tf
プロバイダとしてAWSを指定します。
リージョンはap-northeast-1:アジアパシフィック (東京)とします。
# ---------------------------
# プロバイダ設定
# ---------------------------
# AWS
provider "aws" {
region = "ap-northeast-1"
}
②variables.tf
ここではvpc.tfでのAZ作成時にこのtfファイルを参照します。
# ---------------------------
# 変数設定
# ---------------------------
variable "az_a" {
default = "ap-northeast-1a"
}
③vpc.tf :リソースを定義するファイル
ここではパブリックサブネットが1、プライベートサブネットが1のVPCを作成します。
またTerraformで作成するリソースには「terraform_test」とネーミング付けすることとします。
このtfファイルでは、VPCとサブネット(パブリック/プライベート)、パブリックサブネット用にルートテーブル、インターネットゲートウェイを定義しています。
# ---------------------------
# VPC
# ---------------------------
resource "aws_vpc" "test_vpc" {
cidr_block = "192.168.0.0/16"
tags = {
Name = "terraform_test_vpc"
}
}
# ---------------------------
# Subnet
# ---------------------------
# パブリックサブネットの作成
resource "aws_subnet" "test_public_subnet1a_sn" {
vpc_id = aws_vpc.test_vpc.id
cidr_block = "192.168.1.0/24"
availability_zone = "ap-northeast-1a"
tags = {
Name = "terraform_test_public_subnet1a_sn"
}
}
# プライベートサブネットの作成
resource "aws_subnet" "test_private_subnet10d_sn" {
vpc_id = aws_vpc.test_vpc.id
cidr_block = "192.168.10.0/24"
availability_zone = "ap-northeast-1a"
tags = {
Name = "terraform_test_private_subnet10d_sn"
}
}
# ---------------------------
# Internet Gateway
# ---------------------------
resource "aws_internet_gateway" "test_igw" {
vpc_id = aws_vpc.test_vpc.id
tags = {
Name = "terraform_test_igw"
}
}
# ---------------------------
# Route table
# ---------------------------
# Route table作成
resource "aws_route_table" "test_route_table" {
vpc_id = aws_vpc.test_vpc.id
route {
cidr_block = "0.0.0.0/0"
gateway_id = aws_internet_gateway.test_igw.id
}
tags = {
Name = "terraform_test_route_table"
}
}
# SubnetとRoute tableの関連付け
resource "aws_route_table_association" "test_route_table_associate" {
subnet_id = aws_subnet.test_public_subnet1a_sn.id
route_table_id = aws_route_table.test_route_table.id
}
2.AWS Configureの設定
AWS環境へのアクセス時の認証設定を行います。
コマンドプロンプトで「aws configure」と入力します。
設定個所は4つです。
aws configure
AWS Access Key ID [********************]:
AWS Secret Access Key [********************]:
Default region name [ap-northeast-1]:
Default output format [json]:
・Access Key
AWSアカウントのアクセスキーを入力します。
・Secret Access Key
上記アカウントのシークレットアクセスキーを入力します。
・Default region name
デフォルトのリージョンを設定します。ここでは東京(ap-north-east-1)としています。
・Default output format
出力結果の形式を選択します。デフォルトは"json"です。
3.Terraformでリソースの作成
以下の手順を行うことでTerraformでAWSのリソースを作成します。
ここでは「コマンドプロンプト」を使って操作します。
tfファイルがあるディレクトリに移動して、以下のコマンドを入力していきます。
①ワークスペースの初期化
terraform init
「Terraform has been successfully initialized!」が表示されればOKです。
②tfファイルの構文チェック
terraform validate
「Success!」が表示されればOKです。
※構文にエラーがあればエラー個所が表示されます。
③実行計画を作成
terraform plan
作成されるリソースを確認することができます。
④リソースを作成
terraform apply
Enter a valueと出てくるので「yes」と入力するとAWSリソースが作成されます。
Enter a value: yes
4.AWSリソースの確認
作成したリソースを確認
terraform show
AWSのマネジメントコンソールでも正しく作成できているか確認します。
今回はパブリックとプライベートのサブネットが1つづつのVPCが作成できていれば完了となります。
また、以下はterraformでのAWSリソースの削除方法になります。
削除対象のリソースを確認
terraform plan -destroy
作成したリソースを削除
terraform destroy
作成したリソースを確認
terraform show
Terraformで作成したリソースが消えていれば完了です。
まとめ
terraformを使うと、マネジメントコンソールよりも手軽にAWSリソースを作成できると思いました。
次回はterraformを使ったEC2の作成の記事を作成したいと思います。
参考資料
・Terrafromのインストール
・AWS CLIのインストール