Введение в модули Terraform
Разберитесь в преимуществах модулей, которые инкапсулируют и повторно используют распространённые шаблоны инфраструктуры, улучшая организацию и сопровождаемость кода.
«Введение в модули Terraform» — бесплатный урок Terraform Infrastructure as Code на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Terraform Infrastructure as Code, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Terraform Infrastructure as Code содержит 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) и разблокировать остальной курс Terraform Infrastructure as Code, подпишись на CoddyKit PRO. Курс Terraform Infrastructure as Code содержит 4 уроков всего.
Чему я научусь в уроке «Введение в модули Terraform»?
Разберитесь в преимуществах модулей, которые инкапсулируют и повторно используют распространённые шаблоны инфраструктуры, улучшая организацию и сопровождаемость кода. Ты практикуешь Terraform Infrastructure as Code с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Terraform Infrastructure as Code?
Предыдущий опыт не требуется. Terraform Infrastructure as Code на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Введение в модули Terraform»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Terraform Infrastructure as Code?
Да. Каждый урок Terraform Infrastructure as Code включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Введение в модули Terraform
- Создание повторно используемых модулей
- Использование рабочих пространств для окружений
- Публикация модулей в реестре