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

Если выполнить для этого кода команду terraformapply, получится следующее:

$ terraform apply

(...)

aws_instance.example: Creating...

aws_instance.example: Still creating... [10s elapsed]

aws_instance.example: Still creating... [20s elapsed]

aws_instance.example: Provisioning with 'remote-exec'...

aws_instance.example (remote-exec): Connecting to remote host via SSH...

aws_instance.example (remote-exec): Connecting to remote host via SSH...

aws_instance.example (remote-exec): Connecting to remote host via SSH...

(... repeats a few more times ...)

aws_instance.example (remote-exec): Connecting to remote host via SSH...

aws_instance.example (remote-exec): Connected!

aws_instance.example (remote-exec): Hello, World from Linux x86_64 x86_64

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

Сравнение средств инициализации ресурсов и пользовательских данных

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

Средство инициализации remote-exec требует открытия доступа к вашим серверам по SSH или WinRM, что усложняет управление (как вы сами могли убедиться, поработав с группами безопасности и SSH-ключами) и ухудшает безопасность по сравнению с пользовательскими данными, которым нужен лишь доступ к API AWS (он требуется в любом случае для использования Terraform).

Вы можете применять скрипты пользовательских данных в сочетании с группами ASG. Благодаря этому все серверы в заданной группе ASG (включая те, что запускаются в результате автомасштабирования или автовосстановления) выполнят скрипт во время своей загрузки. Средства инициализации ресурсов действуют только во время работы Terraform, но не с ASG.

Скрипт пользовательских данных можно видеть в консоли EC2 (выберите сервер и щелкните ActionsInstance SettingsView/Change User Data (ДействияНастройки сервераПросмотреть/изменить пользовательские данные)), а его журнал выполнения можно найти на самом сервере EC2 (обычно в файле /var/log/cloud-init*.log). Обе возможности полезны при отладке, и ни одна из них не доступна для средств инициализации ресурсов.

У средств инициализации ресурсов всего два преимущества.

Максимальный размер скриптов пользовательских данных равен 16 Кбайт, тогда как скрипты инициализации ресурсов могут быть произвольной длины.

Chef, Puppet и Salt автоматически устанавливают, конфигурируют и запускают на сервере соответствующие клиенты. Благодаря этому для настройки серверов проще использовать инструменты управления конфигурацией вместо специализированных скриптов.

Средство инициализации remote-exec не знает, когда именно сервер EC2 завершит загрузку и будет готов принимать соединения, поэтому оно периодически пытается подключиться по SSH, пока у него это не получится или пока не истечет время ожидания. Время ожидания по умолчанию равно пяти минутам, но вы можете его сконфигурировать. Рано или поздно соединение будет установлено и вы получите от сервера ответ Hello, World.

Следует отметить, что по умолчанию средство инициализации действует во время создания ресурсов. Это означает, что оно выполняется вместе с командой terraformapply и только во время начального создания ресурса. Оно не будет срабатывать при всех последующих запусках terraformapply, поэтому его основное применение — выполнение кода первоначальной инициализации. Если в средстве инициализации ресурсов указать when="destroy", оно будет действовать во время их удаления, то есть: а) после выполнения terraformdestroy и б) непосредственно перед удалением ресурса.

Вы можете указать несколько средств инициализации для одного и того же ресурса, и Terraform запустит их по очереди, сверху вниз. Чтобы объяснить Terraform, как обрабатывать ошибки, полученные в результате инициализации, можно использовать аргумент on_failure: если присвоить ему "continue", Terraform проигнорирует ошибку и продолжит создание/удаление ресурса; если присвоить ему "abort", Terraform прервет создание/удаление.

Средства инициализации ресурсов с использованием null_resource

Средства инициализации можно определять только внутри ресурса, но иногда при их выполнении хочется обойтись без привязки к определенному ресурсу. Это можно сделать с помощью сущности под названием null_resource, которая ведет себя как обычный ресурс Terraform, но при этом ничего не создает. Определив средство инициализации для null_resource, вы можете запустить свой скрипт в рамках жизненного цикла Terraform, не привязываясь ни к какому «настоящему» ресурсу:

resource "null_resource" "example" {

  provisioner "local-exec" {

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

  }

}

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

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

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

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

Скотт Беркун

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

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

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

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

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