如何使用Terraform创建AWS和VPC(附代码)

886 阅读2分钟

AWS提供了一个虚拟私有云(VPC)服务,用于在云中创建一个逻辑上隔离的虚拟网络。在这里,我们可以启动EC2和RDS实例并创建安全组和其他资源。像许多其他任务一样,我们也可以使用Terraform创建一个VPC。

我们将涵盖哪些内容

本指南将介绍如何使用Terraform创建AWS VPC(虚拟私有云)。

你将需要什么

  1. AWS账户
  2. 访问互联网
  3. Terraform的基础知识

使用Terraform创建AWS VPC

现在我们已经在本地机器上安装了Terraform,我们可以继续我们的任务,即使用VPC工作。在这里,我们已经概述了我们案例中的VPC设置。

我们有一个私人子网和一个公共子网,并有相应的路由表。公共子网也有一个连接到它的NAT网关。不同组件的Terraform配置被存储在不同的文件中,如。

  1. variables.tf。文件中使用的变量的定义
  2. vpc.tf。用于VPC资源
  3. gateway.tf。用于网关资源
  4. subnets.tf。用于定义公共和私有子网
  5. route-table.tf。用于公共和私人路由表资源
  6. 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实例。