AWS提供了一个虚拟私有云(VPC)服务,用于在云中创建一个逻辑上隔离的虚拟网络。在这里,我们可以启动EC2和RDS实例并创建安全组和其他资源。像许多其他任务一样,我们也可以使用Terraform创建一个VPC。
我们将涵盖哪些内容
本指南将介绍如何使用Terraform创建AWS VPC(虚拟私有云)。
你将需要什么
- AWS账户
- 访问互联网
- Terraform的基础知识
使用Terraform创建AWS VPC
现在我们已经在本地机器上安装了Terraform,我们可以继续我们的任务,即使用VPC工作。在这里,我们已经概述了我们案例中的VPC设置。
我们有一个私人子网和一个公共子网,并有相应的路由表。公共子网也有一个连接到它的NAT网关。不同组件的Terraform配置被存储在不同的文件中,如。
- variables.tf。文件中使用的变量的定义
- vpc.tf。用于VPC资源
- gateway.tf。用于网关资源
- subnets.tf。用于定义公共和私有子网
- route-table.tf。用于公共和私人路由表资源
- main.tf
如前所述,Terraform使用几个配置文件来配置资源,每个文件都必须驻留在各自的工作文件夹/目录中。让我们为这个目的创建一个目录。
步骤1.创建一个文件夹,用来存放你的配置文件,然后导航到这个文件夹。
$ mkdir linuxhint-terraform && cd linuxhint-terraform
第二步。让我们创建我们的第一个配置文件,"variables.tf",它将包含关于我们的AWS区域和我们要使用的实例类型的信息。
$ nano variables.tf
现在,把下面的文本放在里面,并保存文件。
variable "aws_region" {
description = "The AWS region to create the VPC in."
default = "us-east-1"
}
variable "vpc-cidr" {
cidr_block = "172.168.0.0/16"
}
variable "pubsubcidr" {
cidr_block = "172.168.0.0/24"
}
variable "prisubcidr" {
cidr_block = "172.168.1.0/24"
}
第3步。创建vpc.tf。
$ nano vpc.tf
现在,把下面的文字放在里面,并保存文件。
resource "aws_vpc" "my-vpc" {
cidr_block = var.vpc-cidr
}
第4步。创建gateway.tf文件并在此定义互联网网关和NAT网关。
$ nano gateway.tf
现在,把下面的文字放在里面,并保存文件。
# Create Internet Gateway resource and attach it to the VPC
resource "aws_internet_gateway" "IGW" {
vpc_id = aws_vpc.my-vpc.id
}
# Create EIP for the IGW
resource "aws_eip" "myEIP" {
vpc = true
}
# Create NAT Gateway resource and attach it to the VPC
resource "aws_nat_gateway" "NAT-GW" {
allocation_id = aws_eip.myEIP.id
subnet_id = aws_subnet.mypublicsubnet.id
}
第5步。为VPC内部的私有和公共子网创建subnets.tf。
$ nano subnets.tf
现在,把下面的文字放在里面,并保存文件。
resource "aws_subnet" "myprivatesubnet" {
vpc_id = aws_vpc.my-vpc.id
cidr_block = var.prisubcidr
}
resource "aws_subnet" "mypublicsubnet" {
vpc_id = aws_vpc.my-vpc.id
cidr_block = var.pubsubcidr
}
第6步。为私有和公共子网创建路由表.tf。
$ nano route-table.tf
现在,把下面的文字放在里面,并保存文件。
# Creating RT for Private Subnet
resource "aws_route_table" "privRT" {
vpc_id = aws_vpc.my-vpc.id
route {
cidr_block = "0.0.0.0/0"
nat_gateway_id = aws_nat_gateway.NAT-GW.id
}
}
# Creating RT for Public Subnet
resource "aws_route_table" "publRT" {
vpc_id = aws_vpc.my-vpc.id
route {
cidr_block = "0.0.0.0/0"
gateway_id = aws_internet_gateway.IGW.id
}
}
#Associating the Public RT with the Public Subnets
resource "aws_route_table_association" "PubRTAss" {
subnet_id = aws_subnet.mypublicsubnet.id
route_table_id = aws_route_table.publRT.id
}
#Associating the Private RT with the Private Subnets
resource "aws_route_table_association" "PriRTAss" {
subnet_id = aws_subnet.myprivatesubnet.id
route_table_id = aws_route_table.privRT.id
第7步。制作一个 "main.tf "文件,该文件将包含我们基础设施的定义。
$ nano main.tf
现在,把下面的配置放在里面。
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 3.27"
}
}
required_version = ">= 0.14.9"
}
provider "aws" {
region = var.aws_region
shared_credentials_file = "/home/User_Name/.aws/credentials"
profile = "profile1"
}
将上述代码中的 "User_Name"修改为你情况下的用户名。让我们看一下前面文件中使用的参数。
- shared_credentials_file。它是包含AWS用户证书的文件的路径。
- 配置文件。它指定了用于与AWS工作的用户配置文件。
- aws_vpc。用于构建VPC的资源。
- cidr_block。为VPC提供一个IPv4 CIDR块。
- aws_internet_gateway。用于为VPC创建一个互联网网关的资源。
- aws_eip。用于生成弹性IP(EIP)的资源。
- aws_nat_gateway。用于为VPC创建一个NAT网关的资源。
- Allocation_id。用于上述生成的EIP的分配ID的属性。
- subnet_id。用于部署NAT网关的子网的子网ID的属性。
- aws_subnet。用于创建VPC子网的资源。
- aws_route_table。用于创建VPC路由表的资源。
- route。包含路由对象列表的参数。
- nat_gateway_id。表示VPC NAT网关的ID的参数。
- gateway_id。表示VPC互联网网关的可选参数。
- aws_route_table_association。用于在路由表(公共或私有)和1)互联网网关和2)虚拟私有网关之间创建关联的资源。
- route_table_id。路由表ID,我们将其与子网关联。
初始化Terraform目录
为了下载和安装我们在配置和其他文件中定义的提供者,我们需要初始化包含该文件的目录。
$ terraform init
构建基础设施
为了应用我们上面计划的变化,运行以下命令。
$ terraform apply
当出现提示时,在终端上输入 "是"。
验证程序
现在,让我们检查一下所需的VPC是否已经创建。前往VPC控制台,并检查可用的VPC。
我们可以看到,我们的VPC已经成功创建。
在你完成这项任务后,删除资源以避免不必要的费用。
$ terraform destroy
输入 "是 "以应用该操作。
总结
在本指南中,我们已经了解了使用Terraform在AWS上创建一个VPC。接下来,你可以尝试使用Terraform配置一个RDS或EC2实例。