LoginSignup
1

TerraformでVPCを構築してみる

Last updated at Posted at 2023-05-29

はじめに

Terraformの勉強を始めたので備忘録を兼ねて行ったことを投稿しようと思います。
以下の3つの投稿内容を実施した上でVPCの構築を行なっています。
※今まではデフォルトのVPCを使っていました
TerraformをインストールしてTerraformでAWS上にEC2作ってみる
TerraformでIAMを設定してEC2にセッションマネージャー経由で接続してみる
Terraformでセキュリティグループを設定してEC2にhttp接続する

TerraformにVPCの定義を追加

VPCを定義する

vpc.tf
resource "aws_vpc" "test_vpc"{
  cidr_block           = "10.0.0.0/16"
  enable_dns_hostnames = true
  tags = {
    Name = "tf_test"
  }
}

サブネットを定義する

定義したVPCを指定してサブネットを定義します。

vpc.tf
resource "aws_subnet" "test_subnet_a" {
  vpc_id            = aws_vpc.test_vpc.id
  cidr_block        = "10.0.1.0/24"
  availability_zone = "ap-northeast-1a"
  map_public_ip_on_launch = true
  tags = {
    Name = "tf_test"
  }
}

後ほどhttp接続確認のため、map_public_ip_on_launch = trueにしてパブリックIPが自動的に付与されるようにしています。

インターネットゲートウェイを定義する

定義したVPCを指定してインターネットゲートウェイを定義します。

vpc.tf
resource "aws_internet_gateway" "test_igw" {
  vpc_id = aws_vpc.test_vpc.id
  tags = {
    Name = "tf_test"
  }
}

ルートテーブルを定義する

定義したVPC内でどのIPアドレス宛の通信をインターネットゲートウェイへ向けるか定義します。

vpc.tf
resource "aws_route_table" "test_rt" {
  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 = "tf_test"
  }
}

サブネットとルートテーブルを関連付け

vpc.tf
resource "aws_route_table_association" "test_rt_associate" {
  subnet_id      = aws_subnet.test_subnet_a.id
  route_table_id = aws_route_table.test_rt.id
}

デフォルトVPCで起動することを前提にしていたリソースを今回定義したVPCに変更する

EC2を構築するサブネット指定する

以下で作成していたec2.tfにEC2を構築するサブネットを指定します
https://qiita.com/kakita-yzrh/items/6bdc11f2882c67a949ad#ec2%E3%81%AB%E5%AE%9A%E7%BE%A9%E3%81%97%E3%81%9F%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%82%92%E8%A8%AD%E5%AE%9A

ec2.tf
resource "aws_instance" "test" {
  ami           = "ami-0404778e217f54308"
  instance_type = "t3.micro"

  iam_instance_profile = aws_iam_instance_profile.test.name

  # 以下を追加
  subnet_id = aws_subnet.test_subnet_a.id

  vpc_security_group_ids = [
    aws_security_group.test.id
  ]

  tags = {
    Name = "tf_test"
  }
}

セキュリティグループのVPC指定

以下で作成していたsecuritygroup.tfにVPCを指定します。
https://qiita.com/kakita-yzrh/items/6bdc11f2882c67a949ad#http%E6%8E%A5%E7%B6%9A%E7%94%A8%E3%81%AE%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%82%92%E5%AE%9A%E7%BE%A9

securitygroup.tf
resource "aws_security_group" "test" {
  name = "tf_test"

  # 以下を追加
  vpc_id = aws_vpc.test_vpc.id

  tags = {
    Name = "tf_test"
  }
}

Terraformで定義したVPCと変更したEC2とセキュリティグループを反映

Terraformのplan applyを実行

terraformのplan applyを実行して、AWS上にリソースを反映します。

terraform plan
terraform apply

http接続を行う

以下の時と同じ方法でVPCとサブネットが変わった後も接続できるか確認します。
https://qiita.com/kakita-yzrh/items/6bdc11f2882c67a949ad#http%E6%8E%A5%E7%B6%9A%E3%82%92%E8%A1%8C%E3%81%86

作成したリソースの削除

terraformのdestroyを実行して、AWS上のリソースを削除します。

terraform destroy

さいごに

今回はTerraformでVPCの作成と作成したVPCにEC2インスタンスの構築を行いました。
次回は作成したVPCとEC2を使ってALBの作成を行いたいと思います。

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
What you can do with signing up
1