2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Terraformを使用してVPC、Subnet、Internet Gateway、Route Tableを構築した

Last updated at Posted at 2024-10-19

概要

Terraformについて理解が深まってきた為、今回はTerraformを使用して表題の構築を行いました。
備忘録も含めて、今回の構築手順を載せます。

前提条件

  • Terraformをインストールしている
  • aws provider関連の構築が完了している

Terraformのvarsion

terraform --version

# Terraformのvarsion
Terraform v1.7.5

# providerのvarsion
on darwin_amd64
+ provider registry.terraform.io/hashicorp/aws 5.70.0

※ Terraformの導入方法やアップデート情報を下記を参照して下さい。

各リソースの構築

VPC(Amazon Virtual Private Cloud)

  • VPCは、クラウド上に作られる専用のネットワーク空間
  • 要約すると自分背用の自由にサーバーやネットワーク機器を配置出来る空間
vpc.tf
resource "aws_vpc" "test_vpc" {
  cidr_block = "10.0.0.0/16"

  assign_generated_ipv6_cidr_block     = false
  enable_dns_hostnames                 = true
  enable_dns_support                   = true
  enable_network_address_usage_metrics = false
  instance_tenancy                     = "default"

  tags = {
   Name = "test-vpc" # 任意の名前
  }
}
メソッド 説明
assign_generated_ipv6_cidr_block VPCに自動生成されたIPv6CIDRブロック(IPアドレス範囲)を割り当てるかどうかを制御
enable_dns_hostnames IPアドレスの代わりにDNS名(例: ec2-***-****-***-1.compute-1.amazonaws.com)を使用したアクセスの可否を制御する
enable_dns_hostnames VPC内のIPアドレス使用状況を監視するメトリクスの有効化を管理
instance_tenancy EC2インスタンスが共有ハードウェアで実行されるか、専用ハードウェアで実行されるかを決める。特殊な用途でない限り"default"で良い

参考資料

Subnet(サブネット)

  • VPC内で作成される小さなネットワークの一部であり、EC2やECS等のリソースを配置する為の論理的な区画
  • 各サブネットは特定のアベイラビリティゾーン(AZ) に属し、VPCのIPアドレス範囲内で定義される

  • 今回構築する各サブネットの利用範囲を下記に記載
    (ネットワークアドレスとブロードキャストアドレスは除外している)
サブネット名 CIDRブロック ネットワークアドレス 利用可能範囲
test-subunet-public-a 10.0.1.0/24 10.0.1.0 10.0.1.1 ~ 10.0.1.254
test-subunet-public-c 10.0.2.0/24 10.0.2.0 10.0.2.1 ~ 10.0.2.254
test-subunet-public-d 10.0.3.0/24 10.0.3.0 10.0.3.1 ~ 10.0.3.254
test-subunet-private-a 10.0.10.0/24 10.0.10.0 10.0.10.1 ~ 10.0.10.254
test-subunet-private-c 10.0.20.0/24 10.0.20.1 10.0.20.1 ~ 10.0.20.254
test-subunet-private-d 10.0.30.0/24 10.0.30.1 10.0.30.1 ~ 10.0.30.254
  • ブロードキャストアドレス : 同じサブネット内の全てのデバイスに対して、一斉メッセージを送る為の特別なIPアドレス
  • ネットワークアドレス : 今回の場合は、そのサブネット全体を指す識別アドレス

  • Terrformを使用したsubnetの構築を下記に記載
# パブリック
resource "aws_subnet" "public_subnet_a" {
  cidr_block        = "10.0.1.0/24"
  vpc_id            = aws_vpc.test_vpc.id
  availability_zone = "ap-northeast-1a"

  tags = {
    Name = "test-subunet-public-a"
  }
}

resource "aws_subnet" "public_subnet_c" {
  cidr_block        = "10.0.2.0/24"
  vpc_id            = aws_vpc.test_vpc.id
  availability_zone = "ap-northeast-1c"

  tags = {
    Name = "test-subunet-public-c" # 任意の名前
  }
}

resource "aws_subnet" "test_public_subnet_d" {
  cidr_block        = "10.0.3.0/24"
  vpc_id            = aws_vpc.test_vpc.id
  availability_zone = "ap-northeast-1d"

  tags = {
    Name = "test-subunet-public-d" # 任意の名前
  }
}


# プライベート
resource "aws_subnet" "test_private_subnet_a" {
  cidr_block        = "10.0.10.0/24"
  vpc_id            = aws_vpc.test_vpc.id
  availability_zone = "ap-northeast-1a"

  tags = {
    Name = "test-subunet-private-a" # 任意の名前
  }
}

resource "aws_subnet" "test_private_subnet_c" {
  cidr_block        = "10.0.20.0/24"
  vpc_id            = aws_vpc.test_vpc.id
  availability_zone = "ap-northeast-1c"

  tags = {
    Name = "test-subunet-private-c" # 任意の名前
  }
}

resource "aws_subnet" "test_private_subnet_d" {
  cidr_block        = "10.0.30.0/24"
  vpc_id            = aws_vpc.test_vpc.id
  availability_zone = "ap-northeast-1}d"

  tags = {
    Name = "test-subunet-private-d" # 任意の名前
  }
}

参考資料

Internet Gateway

  • VPC内のリソース(例: EC2やECS等)をインターネットと接続する為のゲートウェイ
resource "aws_internet_gateway" "test_igw" {
  vpc_id = aws_vpc.test_vpc.id

  tags = {
    Name  = "test-igw"
  }
}

参考資料

Route Table

  • VPC内のネットワークトラフィックがどこに送られるかを管理・制御する機能
  • 今回は、パブリックサブネットにルートテーブルを設定し、インターネットゲートウェイを通してインターネットと通信出来る様に構築している
resource "aws_route_table" "test_public_route_table" {
  vpc_id = aws_vpc.test_vpc.id
  
  tags = {
    Name = "test-route-table"
  }
}

# ルートの設定
# Internet Gatewayへの経路情報を追加
resource "aws_route" "test_public_route_table" {
  route_table_id         = aws_route_table.test_public_route_table.id
  gateway_id             = aws_internet_gateway.test_igw.id
  destination_cidr_block = "0.0.0.0/0"
}

# サブネットの関連付け
# Public Subnet aと紐付け
resource "aws_route_table_association" "test_public_a" {
  route_table_id = aws_route_table.test_public_route_table.id
  subnet_id      = aws_subnet.test_public_subnet_a.id
}

# Public Subnet cと紐付け
resource "aws_route_table_association" "test_public_c" {
  route_table_id = aws_route_table.test_public_route_table.id
  subnet_id      = aws_subnet.test_public_subnet_c.id
}

# Public Subnet dと紐付け
resource "aws_route_table_association" "test_public_d" {
  route_table_id = aws_route_table.test_public_route_table.id
  subnet_id      = aws_subnet.test_public_subnet_d.id
}

著者の作成したコード

参考資料

まとめ

今回は、Terraformを使用して基本的なネットワークを構築しました。基本的な事が分かっていなかったので、今回学べて良かったです。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?