尝试使用Terraform建立VPC

首先

我开始学习使用Terraform,所以我打算发布我所做的备忘录。
在执行以下三个发布内容后,我正在构建VPC。
※之前我一直使用默认的VPC。
1. 安装Terraform并使用Terraform在AWS上创建EC2实例
2. 使用Terraform配置IAM并通过Session Manager连接到EC2实例
3. 使用Terraform配置安全组并允许EC2实例进行HTTP连接

向Terraform中添加VPC定义。

定义虚拟私有云

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

定义子网

指定一个已定义的VPC来定义子网。

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定义互联网网关。

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

定义路由表

在所定义的虚拟私有云(VPC)中,定义要将通信发送到互联网网关的目的IP地址。

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"
  }
}

将子网和路由表进行关联

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

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

resource "aws_security_group" "test" {
  name = "tf_test"

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

  tags = {
    Name = "tf_test"
  }
}

应用Terraform中定义的VPC和修改的EC2以及安全组的变更。

执行Terraform的计划应用。

执行Terraform的计划应用命令,将资源映射到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。

bannerAds