Terraform – это программный инструментарий, предназначенный для организации инфраструктуры, включая ее создание и дальнейшее управление в облаке. Главное его достоинство заключается в автоматизации всех процессов, связанных с развертыванием инфраструктуры.
Внутренние IP-адреса предназначены для организации взаимодействия людей в одной сети. Они используются для идентификации пользователей, вошедших в сеть, а также для предоставления им определенных прав для работы.
В настоящей инструкции мы расскажем как с помощью Terraform можно организовать внутренние IP-адреса, а также в последствии управлять ими. Эта инструкция подойдет для провайдеров, у которых пользователь может самостоятельно выбирать IP-адреса. Отметим, что в Timeweb Cloud такой возможности пока нет.
Данную главу мы посвятим основным преимуществам использования Terraform для управления внутренними IP-адресами. Ниже будут перечислены главные из них:
Как мы уже говорили ранее, главное преимущество использования рассматриваемого инструментария – это автоматизация всех процессов, связанных с развертыванием инфраструктуры. Вам всего лишь нужно описать желаемое состояние системы, а Terraform все возьмет на себя, в том числе и организацию внутренних IP-адресов.
HashiCorp и сообщество разработчиков активно разрабатывают и поддерживают Terraform. Поэтому при выходе новой версии, вам достаточно будет обновиться и вы получите весь новый функционал инструмента, а также перенесете уже существующую конфигурацию на новую версию.
Вам достаточно один раз написать полную конфигурацию, после чего вы можете использовать ее в любом из проектов, при необходимости корректируя ее.
Чтобы использовать Terraform для управления внутренними IP-адресами, вам нужно выполнить следующие шаги:
Создание новых ресурсов в Terraform приходится на провайдера. Провайдеры — это плагины, которые позволяют Terraform управлять ресурсами в конкретной среде.
Синтаксис кода:
provider "Имя_провайдера" {
project = "Имя_проекта>"
region = "<Регион>"
}
resource "Название_ресурса" "Имя_подсети" {
name = "Имя_подсети"
ip_cidr_range = "Диапазон_IP_адресов"
network = "Имя_сети"
}
resource "Название_ресурса_для_внутреннего_IP" "Имя_внутреннего_IP_адреса" {
name = "Имя_внутреннего_IP_адреса"
subnetwork = Название_ресурса.Имя_подсети.self_link
}
Теперь рассмотрим код выше по порядку:
Здесь мы указываем имя провайдера, имя проекта и регион. Все это необходимо для создания будущих ресурсов.
Следующий фрагмент отвечает за создание подсети, которая впоследствии будет использоваться для назначения ресурсов. Здесь пользователь указывает имя этой подсети, диапазон IP-адресов и имя сети, в которой будет создана подсеть.
Последний фрагмент – это и есть создание внутреннего IP-адреса. Он будет назначен в той подсети, которую вы организовали в прошлом фрагменте.
Внутренний IP-адрес будет находиться в диапазоне, также указанном в прошлом фрагменте. Ему обязательно указываем имя в соответствующем поле.
Также, мы используем ссылку на атрибуты self_link
(URI созданного ресурса) для ранее созданной подсети.
Вы можете запустить инструментарий с помощью следующих команд:
terraform (init/plan/apply)
Ниже приведем обозначения, для каждой команды
terraform init
– инициализирует инструментарий и загружает все необходимые плагины; terraform plan
– показывает, какие ресурсы будут созданы;terraform apply
– создает ресурсы.
На этом шаге создание ресурсов закончено. Дальше мы опишем дополнительные шаги для управления ресурсами.
Все изменения, которые пользователь будет вносить в конфигурацию, будут автоматически применяться.
Первый модуль с которым вы столкнулись – это главная конфигурация. По другому его называют «корневым» модулем.
Модули позволяют пользователю организовывать контейнеры для нескольких ресурсов одновременно. Все они будут использоваться вместе. Также, пользователь может вызывать модули несколько раз, что позволяет упаковывать конфигурации ресурсов и повторно использовать их.
Главный модуль может вызывать другие дочерние модули.
Если вы планируете создавать большое количество внутренних IP-адресов, вы можете использовать модули для повторного использования вашего кода.
Переменные позволяют настраивать аспекты модулей в Terraform, не изменяя исходный код модуля. Эта функциональность позволяет совместно использовать модули в различных конфигурациях Terraform, делая ваш модуль составным и многоразовым.
Главный модуль будет содержать только ссылки на переменные. А все содержимое переменных будет находиться в другом модуле, который вы можете отредактировать при необходимости. Рекомендуется создавать модуль с названием variables.tf
для удобства.
Ниже приведем пример использования переменных при создании внутренних IP-адресов:
provider "имя_провайдера" {
project = var.project_id
region = var.region
}
module "internal_ip_address" {
source = "./modules/internal-ip-address"
subnetwork_name = var.subnetwork_name
ip_cidr_range = var.ip_cidr_range
network_name = var.network_name
ip_address_name = var.ip_address_name
}
variable "project_id" {
type = string
description = "Идентификатор проекта."
}
variable "region" {
type = string
description = "Регион сервера"
}
variable "subnetwork_name" {
type = string
description = "Имя подсети"
}
variable "ip_cidr_range" {
type = string
description = "Диапазон IP-адресов для подсети"
}
variable "network_name" {
type = string
description = "Имя сети."
}
variable "ip_address_name" {
type = string
description = "Имя внутреннего IP-адреса"
}
Также необходимо создать файл, содержащий объявление переменных.
terraform plan
. Как мы уже говорили раньше, данная команда выводит полный список всех будущих изменений для их проверки и корректировки. Только после этого вносите изменения командой terraform apply
.Кроме того, вы можете использовать инструменты для проверки безопасности вашего кода, такие как tfsec
и Checkov
. Они могут помочь обнаружить потенциальные уязвимости в вашей конфигурации.
В данной инструкции мы подробно описали процесс создания и управления внутренними IP-адресами в Terraform, а также привели дополнительные советы по улучшению вашей конфигурации.