Использование внешних данных и шаблонов
Загружайте динамические значения в Terraform с помощью источника внешних данных и формируйте конфигурационные файлы функцией templatefile.
«Использование внешних данных и шаблонов» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.
За пределами встроенных источников данных
Вы уже запрашивали данные AWS с помощью источников данных. Иногда нужные данные находятся за пределами любого провайдера — например, это может быть результат сценария оболочки или внутреннего API. Источник данных external и функции template решают эту задачу.
Источник данных external
Источник данных external запускает программу и считывает JSON из её стандартного вывода. Это запасной вариант для логики, которую Terraform не может выразить встроенными средствами.
data "external" "git_sha" {
program = ["bash", "./scripts/git_sha.sh"]
}Контракт программы
Внешняя программа получает объект JSON через стандартный ввод и должна вывести в стандартный вывод плоский объект JSON со строковыми значениями. Всё остальное считается ошибкой.
#!/bin/bash
echo '{"sha": "abc123"}'Чтение внешних результатов
Получить возвращённые значения можно через карту result. Все значения являются строками, поэтому при необходимости преобразуйте их в другой тип.
resource "aws_instance" "app" {
ami = "ami-0abcd1234"
instance_type = "t3.micro"
tags = {
GitSha = data.external.git_sha.result.sha
}
}Когда следует избегать external
Источник external запускается при каждом планировании и нарушает воспроизводимость, если сценарий недетерминирован. Если существует настоящий источник данных провайдера, предпочитайте его; используйте external только для действительно отсутствующих возможностей.
Формирование файлов с помощью templatefile
Функция templatefile читает шаблон, подставляет переменные и возвращает строку. Она отлично подходит для пользовательских данных cloud-init и файлов конфигурации.
resource "aws_instance" "web" {
ami = "ami-0abcd1234"
instance_type = "t3.micro"
user_data = templatefile("init.tftpl", {
hostname = "web-01"
})
}Синтаксис шаблонов
Внутри файла .tftpl вставляйте значения с помощью синтаксиса долларовых скобок. Terraform подставит переданные переменные.
#!/bin/bash
hostnamectl set-hostname ${hostname}
echo 'Provisioned by Terraform'Циклы в шаблонах
Шаблоны поддерживают директивы для итерации. Директива for формирует повторяющиеся строки, что удобно для создания списков узлов.
%{ for ip in ips ~}
server ${ip}:8080
%{ endfor ~}Встроенные шаблоны с templatestring
Для коротких фрагментов можно не создавать файл и использовать templatestring (или устаревшую функцию format), чтобы напрямую создавать динамические строки в конфигурации.
locals {
greeting = templatestring("Hello, $${name}!", { name = "Ops" })
}Объединение двух возможностей
Распространённый шаблон: источник external получает динамическое значение, а затем templatefile вставляет его в конфигурацию, сформированную как пользовательские данные.
user_data = templatefile("app.tftpl", {
version = data.external.git_sha.result.sha
})Сохранение идемпотентности рендеринга
Поскольку изменение user_data приводит к замене экземпляра, сохраняйте входные данные шаблона неизменными. Если передавать постоянно меняющееся значение, например отметку времени, экземпляры будут создаваться заново при каждом применении.
Быстрая проверка
Проверьте, насколько хорошо Вы понимаете внешний источник данных.
Итоги: динамические входные данные и шаблоны
Вы расширили возможности Terraform по работе с данными:
- Источник
externalзапускает сценарии, возвращающие JSON. templatefileформирует файлы конфигурации и пользовательских данных.- Директивы шаблонов поддерживают циклы и интерполяцию.
- Сохраняйте входные данные неизменными, чтобы избежать нежелательных замен.
Часто задаваемые вопросы
Урок «Использование внешних данных и шаблонов» бесплатный?
Да — полный текст урока «Использование внешних данных и шаблонов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.
Чему я научусь в уроке «Использование внешних данных и шаблонов»?
Загружайте динамические значения в Terraform с помощью источника внешних данных и формируйте конфигурационные файлы функцией templatefile. Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать DevOps Bootcamp?
Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Использование внешних данных и шаблонов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке DevOps Bootcamp?
Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Запрос данных с помощью источников данных
- Провижионеры local и remote exec
- Ресурсы Null и триггеры
- Использование внешних данных и шаблонов