Создайте виртуальное частное облако (VPC) на AWS с помощью Terraform
На этой странице
- Предварительные условия
- Что мы будем делать
- Запишите файлы конфигурации Terraform для создания VPC с другими зависимыми ресурсами.
- Создайте VPC и другие зависимые ресурсы с помощью файлов конфигурации Terraform.
- Удалите созданное VPC и другие зависимые ресурсы с помощью Terraform.
- Заключение
В этой статье я покажу вам, как создать VPC вместе с подсетями, интернет-шлюзом, шлюзами NAT и таблицами маршрутизации. Мы создадим 1 VPC с 4 подсетями: 2 частными и 2 общедоступными, 2 шлюзами NAT, 1 интернет-шлюзом и 4 таблицами маршрутизации.
Прежде чем продолжить, я предполагаю, что у вас есть базовые знания о Terraform и VPC на AWS. Чтобы узнать о VPC и его создании из консоли AWS, вы можете нажать здесь , а чтобы узнать об основах Terraform, вы можете выполнить поиск \Что такое Terraform и как его установить на экземпляр AWS EC2?
Предпосылки
- Основные сведения о Terraform.
- Terraform установлен в вашей системе.
- Аккаунт AWS (создайте, если у вас его нет).
- access_key и secret_key пользователя AWS IAM. (Нажмите здесь, чтобы узнать, как создать пользователя IAM с ключом доступа и секретным ключом в AWS, )
Что мы будем делать
- Запишите файлы конфигурации Terraform для создания VPC с другими зависимыми ресурсами.
- Создайте VPC и другие зависимые ресурсы с помощью файлов конфигурации Terraform.
- Удалите созданный 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 интернет-шлюзом. Мы также увидели, как созданные ресурсы могут быть уничтожены.