Поиск по сайту:

Создайте виртуальное частное облако (VPC) на AWS с помощью Terraform


На этой странице

  1. Предварительные условия
  2. Что мы будем делать
  3. Запишите файлы конфигурации Terraform для создания VPC с другими зависимыми ресурсами.
  4. Создайте VPC и другие зависимые ресурсы с помощью файлов конфигурации Terraform.
  5. Удалите созданное VPC и другие зависимые ресурсы с помощью Terraform.
  6. Заключение

В этой статье я покажу вам, как создать VPC вместе с подсетями, интернет-шлюзом, шлюзами NAT и таблицами маршрутизации. Мы создадим 1 VPC с 4 подсетями: 2 частными и 2 общедоступными, 2 шлюзами NAT, 1 интернет-шлюзом и 4 таблицами маршрутизации.

Прежде чем продолжить, я предполагаю, что у вас есть базовые знания о Terraform и VPC на AWS. Чтобы узнать о VPC и его создании из консоли AWS, вы можете нажать здесь , а чтобы узнать об основах Terraform, вы можете выполнить поиск \Что такое Terraform и как его установить на экземпляр AWS EC2?

Предпосылки

  1. Основные сведения о Terraform.
  2. Terraform установлен в вашей системе.
  3. Аккаунт AWS (создайте, если у вас его нет).
  4. access_key и secret_key пользователя AWS IAM. (Нажмите здесь, чтобы узнать, как создать пользователя IAM с ключом доступа и секретным ключом в AWS, )

Что мы будем делать

  1. Запишите файлы конфигурации Terraform для создания VPC с другими зависимыми ресурсами.
  2. Создайте VPC и другие зависимые ресурсы с помощью файлов конфигурации Terraform.
  3. Удалите созданный VPC и другие зависимые ресурсы с помощью Terraform.

Напишите файлы конфигурации Terraform для создания VPC с другими зависимыми ресурсами.

Создайте специальный каталог, в котором вы сможете создавать файлы конфигурации terraform.

Используйте следующую команду, чтобы создать каталог и изменить на него текущий рабочий каталог.

mkdir terraform
cd terraform/

Я использую \vim\ в качестве редактора для записи в файлы. Вы можете использовать редактор по своему выбору и скопировать и вставить следующие конфигурации для создания переменных.tf, terraform.tfvars и main.tf.

Создайте main.tf, который отвечает за создание VPC на AWS с зависимыми ресурсами. Этот файл main.tf будет считывать значения переменных из переменных.tf и terraform.tfvars.

vim main.tf
provider "aws" {
      region     = "${var.region}"
      access_key = "${var.access_key}"
      secret_key = "${var.secret_key}"
}


# VPC resources: This will create 1 VPC with 4 Subnets, 1 Internet Gateway, 4 Route Tables. 

resource "aws_vpc" "default" {
  cidr_block           = var.cidr_block
  enable_dns_support   = true
  enable_dns_hostnames = true
}

resource "aws_internet_gateway" "default" {
  vpc_id = aws_vpc.default.id
}

resource "aws_route_table" "private" {
  count = length(var.private_subnet_cidr_blocks)

  vpc_id = aws_vpc.default.id
}

resource "aws_route" "private" {
  count = length(var.private_subnet_cidr_blocks)

  route_table_id         = aws_route_table.private[count.index].id
  destination_cidr_block = "0.0.0.0/0"
  nat_gateway_id         = aws_nat_gateway.default[count.index].id
}

resource "aws_route_table" "public" {
  vpc_id = aws_vpc.default.id
}

resource "aws_route" "public" {
  route_table_id         = aws_route_table.public.id
  destination_cidr_block = "0.0.0.0/0"
  gateway_id             = aws_internet_gateway.default.id
}

resource "aws_subnet" "private" {
  count = length(var.private_subnet_cidr_blocks)

  vpc_id            = aws_vpc.default.id
  cidr_block        = var.private_subnet_cidr_blocks[count.index]
  availability_zone = var.availability_zones[count.index]
}

resource "aws_subnet" "public" {
  count = length(var.public_subnet_cidr_blocks)

  vpc_id                  = aws_vpc.default.id
  cidr_block              = var.public_subnet_cidr_blocks[count.index]
  availability_zone       = var.availability_zones[count.index]
  map_public_ip_on_launch = true
}

resource "aws_route_table_association" "private" {
  count = length(var.private_subnet_cidr_blocks)

  subnet_id      = aws_subnet.private[count.index].id
  route_table_id = aws_route_table.private[count.index].id
}

resource "aws_route_table_association" "public" {
  count = length(var.public_subnet_cidr_blocks)

  subnet_id      = aws_subnet.public[count.index].id
  route_table_id = aws_route_table.public.id
}


# NAT resources: This will create 2 NAT gateways in 2 Public Subnets for 2 different Private Subnets.

resource "aws_eip" "nat" {
  count = length(var.public_subnet_cidr_blocks)

  vpc = true
}

resource "aws_nat_gateway" "default" {
  depends_on = ["aws_internet_gateway.default"]

  count = length(var.public_subnet_cidr_blocks)

  allocation_id = aws_eip.nat[count.index].id
  subnet_id     = aws_subnet.public[count.index].id
}
 

Создайте файл variable.tf, содержащий объявление и определение переменных.

vim variables.tf
variable "access_key" {
     description = "Access key to AWS console"
     
}
variable "secret_key" {
     description = "Secret key to AWS console"
     
}

variable "region" {
  default     = "eu-west-3"
  type        = string
  description = "Region of the VPC"
}


variable "cidr_block" {
  default     = "10.0.0.0/16"
  type        = string
  description = "CIDR block for the VPC"
}

variable "public_subnet_cidr_blocks" {
  default     = ["10.0.0.0/24", "10.0.2.0/24"]
  type        = list
  description = "List of public subnet CIDR blocks"
}

variable "private_subnet_cidr_blocks" {
  default     = ["10.0.1.0/24", "10.0.3.0/24"]
  type        = list
  description = "List of private subnet CIDR blocks"
}

variable "availability_zones" {
  default     = ["eu-west-3a", "eu-west-3b"]
  type        = list
  description = "List of availability zones"
}
 

Создайте terraform.tfvars, который содержит определение переменных access_key и secret_key, определенных в приведенном выше файле. Мы сохранили объявление этих двух переменных в файле terraform.tfvars.

Следующие ключи необходимо изменить на ключи вашего пользователя IAM.

vim terraform.tfvars
access_key = "AKIAQ6GAIA5XIHHM2GJM"
secret_key = "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"

Теперь у вас должно быть 3 файла, а именно, variable.tf, terraform.tfvars и main.tf.

Создайте VPC и другие зависимые ресурсы, используя файлы конфигурации Terraform.

Прежде чем выполнять следующие команды, убедитесь, что вы настроили действительный ключ доступа и секретный ключ.

Первая используемая команда — terraform init. Эта команда загружает и устанавливает плагины для провайдеров, используемых в конфигурации. В нашем случае это AWS.

terraform init

Вторая используемая команда — terraform plan. Эта команда используется для просмотра изменений, которые произойдут в инфраструктуре.

terraform plan

Команда terraform apply создаст ресурсы на AWS, указанные в файле main.tf. Вам будет предложено внести свой вклад для создания ресурсов.

terraform apply

Когда вы выполните приведенную выше команду, вы увидите, что в выходных данных было добавлено 20 новых ресурсов и 0 удалено.

Вы можете перейти в консоль AWS VPC, чтобы проверить, создано ли VPC вместе с подсетями, таблицами маршрутизации, шлюзами NAT и интернет-шлюзом.

Удалите созданный VPC и другие зависимые ресурсы с помощью Terraform.

Если вам больше не нужны ресурсы, которые вы создали с помощью конфигурации, указанной в файле main.tf, вы можете использовать команду \terraform destroy\, чтобы удалить все эти ресурсы.

terraform destroy

Когда вы выполняете приведенную выше команду, вы можете увидеть, что 20 созданных ресурсов были уничтожены в выходных данных. Вы можете убедиться в этом, посетив AWS на панели инструментов VPC.

Заключение

В этой статье мы рассмотрели шаги по созданию VPC с 4 подсетями, 4 таблицами маршрутизации, 2 шлюзами NAT и 1 интернет-шлюзом. Мы также увидели, как созданные ресурсы могут быть уничтожены.