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

This configuration does not support Terraform version 0.11.11. To proceed, either choose another supported Terraform version or update the root module's version constraint. Version constraints are normally set for good reason, so updating the constraint may lead to other errors or unexpected behavior.

Для кода промышленного уровня рекомендую еще строже закреплять версию:

terraform {

  # Требуем исключительно версию Terraform 0.12.0

  required_version = "= 0.12.0"

}

Это вызвано тем, что даже переход на новые «заплаточные» версии (скажем, 0.12.0 —> 0.12.1) может создать проблемы. Иногда они содержат ошибки, а иногда у них ломается обратная совместимость (хотя в наши дни это случается реже). Но еще более серьезной проблемой является то, что файл состояния, измененный более новой версией Terraform, уже нельзя использовать в старых версиях. Представьте, к примеру, что весь ваш код развернут с помощью Terraform 0.12.0, и тут вдруг разработчик, у которого установлена версия 0.12.1, применяет к некоторым из ваших модулей команду terraformapply. В результате файлы состояния этих модулей больше не совместимы с 0.12.0, поэтому вы вынуждены обновить все свои компьютеры для разработки и CI-серверы на 0.12.1!

Ситуация, скорее всего, улучшится, когда Terraform достигнет версии 1.0.0 и на­чнет соблюдать обратную совместимость, но, пока этого не произошло, я советую привязываться к определенной версии этой системы. Это позволит избежать незапланированных обновлений. Вы сможете обновляться тогда, когда будете готовы, и делать это сразу для всех своих компьютеров и CI-серверов.

Рекомендую также закреплять версии всех ваших провайдеров:

provider "aws" {

  region = "us-east-2"

  # Разрешаем использовать любую версию провайдера AWS вида 2.x

  version = "~> 2.0"

}

Этот пример привязывает код провайдера AWS к версиям вида 2.x (синтаксис ~>2.0 эквивалентен >=2.0,<3.0). И снова, чтобы избежать случайного внесения обратно несовместимых изменений, необходимо закрепить мажорную версию. Закрепление конкретной версии зависит от провайдера. Предположим, провайдер AWS часто обновляется и имеет хорошую поддержку обратной совместимости, поэтому будет разумно закрепить только его мажорную версию и позволить автоматическое обновление заплаток, чтобы получить удобный доступ к новым возможностям. Однако все провайдеры разные, поэтому обращайте внимание на то, насколько хорошо они справляются с поддержкой обратной совместимости, и закрепляйте номера версий соответствующим образом.


Модули, готовые к повторному использованию

Следующим шагом после написания и тестирования модулей будет их выпуск. Как вы уже видели в разделе «Управление версиями» на с. 53, для этого подходят теги Git в сочетании с семантическим версионированием:

$ git tag -a "v0.0.5" -m "Create new hello-world-app module"

$ git push --follow-tags

Например, чтобы развернуть в тестовом окружении версию v0.0.5 вашего модуля hello-world-app, в файле live/stage/services/hello-world-app/main.tf следует прописать такой код:

provider "aws" {

  region = "us-east-2"

  # Разрешаем использовать любую версию провайдера AWS вида 2.x

  version = "~> 2.0"

}

module "hello_world_app" {

  # TODO: подставить сюда URL и версию вашего собственного модуля!!

  source = "git@github.com:foo/modules.git//services/hello-world-app?ref=v0.0.5"

  server_text            = "New server text"

  environment            = "stage"

  db_remote_state_bucket = "(YOUR_BUCKET_NAME)"

  db_remote_state_key    = "stage/data-stores/mysql/terraform.tfstate"

  instance_type      = "t2.micro"

  min_size           = 2

  max_size           = 2

  enable_autoscaling = false

}

Далее укажем доменное имя ALB в виде выходного параметра в файле live/stage/services/hello-world-app/outputs.tf:

output "alb_dns_name" {

  value       = module.hello_world_app.alb_dns_name

  description = "The domain name of the load balancer"

}

Теперь вы можете развернуть свой модуль с поддержкой версионирования, выполнив команды terraforminit и terraformapply:

$ terraform apply

(...)

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

Outputs:

alb_dns_name = hello-world-stage-477699288.us-east-2.elb.amazonaws.com

Если все работает хорошо, можете развернуть эту же версию (и, следовательно, этот же код) в других средах, включая промышленную. Если у вас когда-нибудь возникнет проблема, вы сможете откатиться назад, развернув более старую версию.

Еще одним способом выпуска модулей является их публикация в реестре Terraform. Публичный реестр модулей Terraform находится по адресу registry.terraform.io и содержит сотни универсальных, открытых и поддерживаемых сообществом модулей для AWS, Google Cloud, Azure и многих других провайдеров. Для публикации в нем своих модулей необходимо соблюсти несколько требований53.

• Модуль должен находиться в репозитории GitHub.

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

Все книги серии Бестселлеры 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