LoginSignup
2
1

TerraformでAWSリソースを作成(VPC編)

Last updated at Posted at 2024-05-30

はじめに

Terraformを使ってAWSリソース(VPC、EC2)を作成する手順について、Terraform初学者の自分用のメモを兼ねて記載しておきます。
今回は下記アーキテクチャ図の環境を構築します。

前提

・windows環境であること
・Terraformが端末にインストールされていること
・AWS CLIが端末にインストールされていること
・AWSのアカウント(アクセスキーとシークレットアクセスキー)があること

アーキテクチャ図

Terrafrom用.drawio.png

やること

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のインストール

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1