Terraform: инфраструктура на уровне кода | страница 83



  # в конфигурации запуска.

  # https://www.terraform.io/docs/providers/aws/r/launch_configuration.html

  lifecycle {

    create_before_destroy = true

  }

}

Выглядит намного аккуратней, чем встраивание bash-скриптов!

Если развернуть этот кластер с помощью команды terraformapply, подождать, пока серверы не зарегистрируются в ALB, и открыть URL-адрес ALB в браузере, можно увидеть нечто похожее на рис. 3.12.

Ура! Ваш кластер веб-серверов теперь может программно обращаться к адресу и порту базы данных через Terraform. Если вы используете настоящий веб-фреймворк (вроде Ruby on Rails), можете задать адрес и порт в виде переменных среды или записать их в конфигурационный файл, чтобы их могла использовать ваша библиотека для работы с БД (как ActiveRecord).

Рис. 3.12. Кластер веб-серверов может программно обращаться к адресу и порту базы данных


Резюме

Причина, по которой вам следует уделять столько внимания изоляции, блокированию и состоянию, заключается в том, что IaC отличается от обычного программирования. При написании кода для типичного приложения большинство ошибок оказываются относительно несущественными и портят только небольшую его часть. Но когда вы пишете код для управления инфраструктурой, программные ошибки имеют более серьезные последствия, поскольку могут затронуть все ваши приложения вместе со всеми источниками данных, топологией сети и практически всем остальным. Поэтому при работе над IaC советую использовать больше «защитных механизмов», чем при написании обычного кода43.

Применение рекомендуемой структуры файлов и каталогов часто приводит к дублированию кода. Если вы хотите запускать кластер веб-серверов как в тестовой, так и в промышленной среде, как избежать копирования и вставки большого количества фрагментов между stage/services/webserver-cluster и prod/services/webserver-cluster? Ответ: использовать модули Terraform, которым посвящена глава 4.

34 Узнайте больше о гарантиях, которые дает S3, по адресу amzn.to/31ihjAg.

35 Ознакомьтесь с тарифами для S3 по адресу amzn.to/2yTtnw1.

36 Подробнее об именах бакетов S3 можно почитать по адресу bit.ly/2b1s7eh.

37 Ознакомьтесь с тарифами для DynamoDB по адресу amzn.to/2OJiyHp.

38 По адресу bit.ly/2lTsewM представлен яркий пример того, что может случиться, если не изолировать состояние Terraform.

39 Подробнее об этом читайте в документации Terragrunt по адресу bit.ly/2M48S8e.

40 Большинство командных оболочек в Linux/Unix/OS X сохраняют каждую вводимую вами команду в файл истории какого-то рода (например, ~/.bash_history). Но если начать команду с пробела, почти все оболочки не станут ее туда записывать. Имейте в виду, что эта возможность может быть отключена в вашей командной оболочке. Чтобы ее включить, придется присвоить переменной среды HISTCONTROL значение ignoreboth.