Введение в модули Terraform
Разберитесь в преимуществах модулей, которые инкапсулируют и повторно используют распространённые шаблоны инфраструктуры, улучшая организацию и сопровождаемость кода.
«Введение в модули Terraform» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.
Что такое модули Terraform?
Модуль Terraform — это автономный пакет конфигураций Terraform. Представьте его как функцию или класс в языках программирования. Он позволяет объединять связанные ресурсы и управлять ими как единым целым.
Модули помогают организовать код инфраструктуры и упростить его сопровождение, особенно в крупных проектах.
Зачем использовать модули Terraform?
Модули дают несколько важных преимуществ для инфраструктуры в виде кода:
- Повторное использование: определите часть инфраструктуры один раз и используйте ее многократно в разных проектах или средах.
- Организация: разделяйте сложные конфигурации на небольшие, управляемые и логически связанные компоненты.
- Согласованность: обеспечивайте стандартный способ развертывания ресурсов каждый раз, уменьшая расхождения конфигураций и количество ошибок.
- Совместная работа: команды могут разрабатывать и совместно использовать модули, ускоряя разработку и поддерживая стандарты.
Структура модуля
Модуль Terraform — это, по сути, каталог, содержащий один или несколько .tf-файлов. Структура может быть различной, но обычно включает:
main.tf: определяет основные ресурсы, создаваемые модулем.variables.tf: объявляет входные переменные, настраивающие поведение модуля.outputs.tf: определяет выходные значения, предоставляемые модулем вызывающим конфигурациям.versions.tf: задает ограничения версий Terraform и провайдера для модуля.
Такая организованная структура помогает поддерживать код в аккуратном и понятном виде.
Код Вашего первого модуля
Определим очень простой модуль, создающий корзину AWS S3. Обычно этот код находится в отдельном каталоге, например modules/my_s3_bucket/main.tf.
Этот полный файл можно запустить как корневой модуль, чтобы увидеть его в действии, но здесь его основная цель — показать внутреннюю структуру модуля.
provider "aws" {
region = "us-east-1" # Example region
}
variable "bucket_name" {
description = "Name for the S3 bucket."
type = string
}
variable "acl_setting" {
description = "ACL for the S3 bucket."
type = string
default = "private"
}
resource "aws_s3_bucket" "example_bucket" {
bucket = var.bucket_name
acl = var.acl_setting
tags = {
Environment = "Dev" # Example tag
}
}
output "bucket_id" {
description = "The ID of the S3 bucket."
value = aws_s3_bucket.example_bucket.id
}
output "bucket_arn" {
description = "The ARN of the S3 bucket."
value = aws_s3_bucket.example_bucket.arn
}Входные данные модуля: переменные
Входные переменные позволяют настраивать поведение модуля без изменения его основного кода. Они определяются в файле variables.tf внутри каталога модуля.
При вызове модуля Вы передаете значения этим переменным, благодаря чему модуль легко повторно использовать в разных сценариях и средах. Представляйте их как аргументы функции.
variable "bucket_name" {
description = "Name for the S3 bucket."
type = string
}
variable "acl_setting" {
description = "ACL for the S3 bucket."
type = string
default = "private"
}Выходные данные модуля: предоставление данных
Выходные значения используются для передачи данных из модуля в вызывающую конфигурацию. Так можно получить важную информацию о ресурсах, созданных модулем.
Выходные значения определяются в файле outputs.tf внутри каталога модуля и могут использоваться другими частями конфигурации Terraform или даже другими модулями.
output "bucket_id" {
description = "The ID of the S3 bucket."
value = aws_s3_bucket.example_bucket.id
}
output "bucket_arn" {
description = "The ARN of the S3 bucket."
value = aws_s3_bucket.example_bucket.arn
}Вызов собственного модуля
Теперь, когда модуль my_s3_bucket определен, вызовем его из корневой конфигурации. Атрибут source указывает, где Terraform может найти модуль.
Для локальных модулей это относительный путь к каталогу модуля. Мы передаем значения входным переменным модуля и можем обращаться к предоставляемым им выходным значениям.
provider "aws" {
region = "us-east-1"
}
module "my_website_bucket" {
source = "./modules/my_s3_bucket" # Path to your local module
bucket_name = "my-unique-website-bucket-12345"
acl_setting = "public-read"
}
output "website_bucket_arn" {
description = "ARN of the website S3 bucket."
value = module.my_website_bucket.bucket_arn
}
output "website_bucket_id" {
description = "ID of the website S3 bucket."
value = module.my_website_bucket.bucket_id
}Разные источники модулей
Модули бывают не только локальными! Terraform может получать модули из разных источников, что дает Вам больше гибкости:
- Локальные пути:
./modules/my_module(как в нашем примере) - Реестр Terraform:
hashicorp/vpc/aws(общедоступные модули) - Репозитории Git:
git::https://example.com/repo.git - Корзины S3:
s3::https://s3-us-west-2.amazonaws.com/example-bucket/module.zip
Реестр Terraform — отличное место для поиска готовых модулей, проверенных сообществом, для распространенных шаблонов инфраструктуры.
Практическая польза модулей
Представьте, что Вы управляете сотнями ресурсов в нескольких средах (разработка, тестирование, рабочая среда). Без модулей у Вас были бы огромные повторяющиеся конфигурационные файлы.
Модули позволяют один раз определить шаблон «веб-сервера» или «базы данных». Затем Вы просто вызываете этот модуль для каждого экземпляра, передавая разные переменные для настроек конкретной среды. Это значительно уменьшает количество ошибок, упрощает обновления и делает инфраструктуру по-настоящему масштабируемой.
Быстрая проверка
Вы узнали о структуре и преимуществах модулей Terraform. Давайте проверим, сможете ли Вы определить одно из ключевых преимуществ.
Итоги и дальнейшие шаги
На этом уроке мы познакомились с модулями Terraform как с мощными инструментами для организации и повторного использования кода инфраструктуры. Вы узнали следующее:
- Модули объединяют ресурсы в повторно используемые единицы.
- Они улучшают организацию кода, согласованность и возможность повторного использования.
- Модули используют
variables.tfдля входных данных иoutputs.tfдля предоставляемых данных. - Вы можете вызывать модули из локальных путей, реестров или репозиториев Git.
Далее мы подробнее рассмотрим создание собственных повторно используемых модулей, а также более сложные шаблоны и лучшие практики.
Часто задаваемые вопросы
Урок «Введение в модули Terraform» бесплатный?
Да — полный текст урока «Введение в модули Terraform» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.
Чему я научусь в уроке «Введение в модули Terraform»?
Разберитесь в преимуществах модулей, которые инкапсулируют и повторно используют распространённые шаблоны инфраструктуры, улучшая организацию и сопровождаемость кода. Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать DevOps Bootcamp?
Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Введение в модули Terraform»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке DevOps Bootcamp?
Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Введение в модули Terraform
- Создание повторно используемых модулей
- Использование рабочих пространств для окружений
- Публикация модулей в реестре