Читаем Terraform: инфраструктура на уровне кода полностью

У null_resource есть удобный аргумент под названием triggers, который принимает ассоциативный массив с ключами и значениями. При любом изменении значений ресурс null_resource будет создаваться заново, запуская тем самым все средства инициализации, которые в нем определены. Например, если вы хотите выполнять средство инициализации внутри null_resource при каждом запуске команды terraformapply, можете воспользоваться встроенной функцией uuid(). При каждом вызове внутри аргумента triggers она возвращает новый, свежесгенерированный идентификатор UUID:

resource "null_resource" "example" {

  # Используйте UUID, чтобы ресурс null_resource принудительно

  # создавался заново при каждом вызове 'terraform apply'

  triggers = {

    uuid = uuid()

  }

  provisioner "local-exec" {

    command = "echo \"Hello, World from $(uname -smp)\""

  }

}

Теперь при каждом выполнении terraformapply будет запускаться средство инициализации local-exec:

$ terraform apply

(...)

null_resource.example (local-exec): Hello, World from Darwin x86_64 i386

$ terraform apply

null_resource.example (local-exec): Hello, World from Darwin x86_64 i386


Внешний источник данных

Средства инициализации ресурсов обычно являются основным инструментом выполнения скриптов в Terraform, но они не всегда подходят. Иногда нужен скрипт для извлечения данных и предоставления доступа к ним прямо в коде Terraform. Для этого можно использовать источник данных external, который позволяет выполнить внешнюю команду, реализующую определенный протокол.

Этот протокол работает определенным образом.

• Вы можете передавать данные из Terraform во внешнюю программу, используя аргумент query источника данных external. Внешняя программа может читать эти аргументы из стандартного ввода в виде JSON.

• Внешняя программа может передавать данные обратно в Terraform, записывая JSON в стандартный вывод. Остальной код Terraform может извлекать эти данные из JSON с помощью выходного атрибута result, принадлежащего внешнему источнику данных.

Вот пример:

data "external" "echo" {

  program = ["bash", "-c", "cat /dev/stdin"]

  query = {

    foo = "bar"

  }

}

output "echo" {

  value = data.external.echo.result

}

output "echo_foo" {

  value = data.external.echo.result.foo

}

В этом примере источник данных external используется для выполнения bash-скрипта, который возвращает обратно в стандартный вывод любые данные, полученные из стандартного ввода. Таким образом, любое значение, которое мы передадим через аргумент query, должно вернуться без изменений в виде выходного атрибута result. Вот что получится, когда мы выполним terraformapply для этого кода:

$ terraform apply

(...)

Apply complete! Resources: 0 added, 0 changed, 0 destroyed.

Outputs:

echo = {

  "foo" = "bar"

}

echo_foo = bar

Как видите, data.external..result содержит ответ в формате JSON, возвращенный внешней программой, и вы можете перемещаться по нему с помощью синтаксиса вида data.external..result. (например, data.exter­nal.echo.result.foo).

Источник данных external — прекрасный «аварийный люк» на случай, когда вам нужно обращаться к данным в своем коде Terraform и у вас нет такого источника, который бы умел извлекать эти данные. Но не переусердствуйте, используя его и другие «аварийные люки», так как они делают ваш код менее переносимым и более хрупким. Например, источник данных external, который вы только что видели, использует bash. Значит, вы не сможете развернуть этот модуль Terraform из Windows.


Резюме

Итак, вы познакомились со всеми компонентами, необходимыми для создания кода Terraform промышленного уровня. Подытожим. В следующий раз, когда вы начнете работать над новым модулем, выполните такие действия.

1. Пройдитесь по списку задач для подготовки инфраструктуры промышленного уровня, представленному в табл. 6.2, и определите, какие пункты вы будете реа­лизовывать, а какие нет. Сопоставьте полученный результат с табл. 6.1, чтобы озвучить начальству примерные сроки выполнения.

2. Создайте папку examples и сначала напишите демонстрационный код. Выработайте на его основе максимально удобный и аккуратный API для своих модулей. Создайте по одному примеру для каждого важного сценария применения вашего модуля. Добавьте документацию и предусмотрите разумные значения по умолчанию, чтобы ваш пример было как можно легче развертывать.

3. Создайте папку modules и реализуйте придуманный вами API в виде набора небольших, универсальных и компонуемых модулей. Используйте для этого Terraform в сочетании с другими инструментами, такими как Docker, Packer и bash. Не забудьте закрепить версии Terraform и провайдера.

4. Создайте папку test и напишите автоматические тесты для каждого примера.

Теперь пришло время обсудить написание автоматических тестов для инфраструктурного кода, чем мы и займемся в главе 7.

48 Хофштадтер Д. Гедель, Эшер, Бах: эта бесконечная гирлянда. — Самара: Бахрах-М, 2001.

Перейти на страницу:

Все книги серии Бестселлеры O'Reilly

Искусство управления IT-проектами
Искусство управления IT-проектами

В отличие от множества трудов, посвященных руководству проектами и командами, в этой книге не проповедуются никакие новые учения и не превозносятся великие теории. Скотт Беркун считает залогом успеха практику и разнообразие подходов. В книге описываются основные сложности и проблемные ситуации, возникающие в работе менеджера проекта, даны рекомендации по выходу из них.Издание предназначено не только для лидеров команд и менеджеров высшего звена, но и для программистов, тестеров и других исполнителей конкретных проектных заданий. Также оно будет полезно студентам, изучающим бизнес-менеджмент, проектирование изделий или программную инженерию.Текст нового издания значительно переработан автором с целью добиться большей ясности, кроме того, книга дополнена новым приложением и более чем 120 практическими упражнениями.

Скотт Беркун

Деловая литература
iOS. Приемы программирования
iOS. Приемы программирования

Книга, которую вы держите в руках, представляет собой новый, полностью переписанный сборник приемов программирования по работе с iOS. Он поможет вам справиться с наболевшими проблемами, с которыми приходится сталкиваться при разработке приложений для iPhone, iPad и iPod Touch. Вы быстро освоите всю информацию, необходимую для начала работы с iOS 7 SDK, в частности познакомитесь с решениями для добавления в ваши приложения реалистичной физики или движений — в этом вам помогут API UIKit Dynamics.Вы изучите новые многочисленные способы хранения и защиты данных, отправки и получения уведомлений, улучшения и анимации графики, управления файлами и каталогами, а также рассмотрите многие другие темы. При описании каждого приема программирования приводятся образцы кода, которые вы можете смело использовать.

Вандад Нахавандипур

Программирование, программы, базы данных / Программирование / Книги по IT

Похожие книги

Старший брат следит за тобой. Как защитить себя в цифровом мире
Старший брат следит за тобой. Как защитить себя в цифровом мире

В эпоху тотальной цифровизации сложно представить свою жизнь без интернета и умных устройств. Но даже люди, осторожно ведущие себя в реальном мире, часто недостаточно внимательно относятся к своей цифровой безопасности. Между тем с последствиями такой беспечности можно столкнуться в любой момент: злоумышленник может перехватить управление автомобилем, а телевизор – записывать разговоры зрителей, с помощью игрушек преступники могут похищать детей, а к видеокамерам можно подключиться и шпионить за владельцами. Существуют и государственные проекты наподобие «Умного города», подразумевающие повсеместное внедрение видеокамер и технологий распознавания лиц.Все это не значит, что нужно стремиться к цифровому затворничеству и панически избегать гаджетов, но необходимо изучить и соблюдать элементарные правила безопасности. Михаил Райтман в своей книге рассказывает, как максимально снизить вероятность утечки персональных данных, осложнив задачу потенциальным злоумышленникам.

Михаил Анатольевич Райтман

Зарубежная компьютерная, околокомпьютерная литература
Восстановление данных на 100%
Восстановление данных на 100%

В книге изложены методы восстановления данных с различных носителей информации – жестких дисков, массивов RAID, CD, DVD, карт флэш-памяти, карт фотоаппаратов и мобильных телефонов. Ремонт поврежденного оборудования рассматривается в издании только как один из аспектов всего процесса извлечения данных. Основная тема – извлечение данных, поврежденных из-за физических или логических нарушений в работе компьютерной системы либо неверных действий пользователя. В книге рассматривается восстановление случайно удаленных файлов, извлечение ценной информации с поломанных жестких дисков; описываются программы и методика восстановления данных с поврежденных массивов RAID, что критически важно для работы корпоративных компьютерных систем.Книга не требует специальной подготовки читателя: простые пошаговые процедуры восстановления данных предваряются описанием принципов их хранения на различных носителях.

Петр Андреевич Ташков

Зарубежная компьютерная, околокомпьютерная литература / Прочая компьютерная литература / Книги по IT