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

33 Чтобы не усложнять эти примеры, мы запускаем серверы EC2 и ALB в одной подсети. В промышленных условиях их почти наверняка следовало бы разместить в разных подсетях: серверы EC2 в закрытой (чтобы они не были доступны непосредственно из Интернета), а ALB — в открытой (чтобы пользователи могли обращаться к нему напрямую).

3. Как управлять состоянием Terraform

В главе 2, используя Terraform для создания и обновления ресурсов, вы могли заметить, что при каждом выполнении команд terraformplan и terraformapply этой системе удавалось находить созданные ранее ресурсы и обновлять их соответствующим образом. Но откуда ей было известно о том, какие из них находятся под ее управлением? В вашей учетной записи AWS может находиться любая инфраструктура, развернутая с помощью различных механизмов (отчасти вручную, отчасти через Terraform, отчасти с помощью утилиты командной строки). Так как же Terraform определяет свои ресурсы?

В этой главе вы узнаете, как Terraform отслеживает состояние вашей инфраструктуры и каким образом это влияет на структуру файлов и каталогов, изоляцию и блокирование в проекте Terraform. Вот ключевые темы, по которым мы пройдемся.

• Что собой представляет состояние Terraform.

• Общее хранилище для файлов состояния.

• Ограничения внутренних хранилищ Terraform.

• Изоляция файлов состояния.

• Изоляция с помощью рабочих областей.

• Изоляция с помощью описания структуры файлов.

• Источник данных terraform_remote_state.

Примеры кода

Напоминаю: все примеры кода для этой книги можно найти по адресу github.com/brikis98/terraform-up-and-running-code.

Что собой представляет состояние Terraform

При каждом своем запуске система Terraform записывает информацию о созданной ею инфраструктуре в свой файл состояния. По умолчанию, если запуск происходит в /foo/bar, Terraform создает файл /foo/bar/terraform.tfstate. Этот файл имеет нестандартный формат JSON и связывает ресурсы Terraform в ваших конфигурационных файлах с их представлением в реальном мире. Представьте, к примеру, что у Terraform следующая конфигурация:

resource "aws_instance" "example" {

  ami           = "ami-0c55b159cbfafe1f0"

  instance_type = "t2.micro"

}

Ниже показан небольшой фрагмент файла terraform.tfstate (урезанный, чтобы его было легче читать), который будет создан после выполнения terraformapply:

{

  "version": 4,

  "terraform_version": "0.12.0",

  "serial": 1,

  "lineage": "1f2087f9-4b3c-1b66-65db-8b78faafc6fb",

  "outputs": {},

  "resources": [

    {

      "mode": "managed",

      "type": "aws_instance",

      "name": "example",

      "provider": "provider.aws",

      "instances": [

        {

          "schema_version": 1,

          "attributes": {

            "ami": "ami-0c55b159cbfafe1f0",

            "availability_zone": "us-east-2c",

            "id": "i-00d689a0acc43af0f",

            "instance_state": "running",

            "instance_type": "t2.micro",

            "(...)": "(truncated)"

          }

        }

      ]

    }

  ]

}

Благодаря формату JSON Terraform знает, что ресурс типа aws_instance с именем example соответствует серверу EC2 с идентификатором i-00d689a0acc43af0f в вашей учетной записи AWS. При каждом запуске Terraform может запросить у AWS текущее состояние этого сервера и сравнить его с вашей конфигурацией, чтобы определить, какие изменения следует внести. Иными словами, вывод команды plan — это расхождение между кодом на вашем компьютере и инфраструктурой, развернутой в реальном мире (согласно идентификаторам в файле состояния).

Файл состояния является приватным API

Файл состояния — это приватный API, который меняется с каждым новым выпуском и предназначен сугубо для внутреннего использования в Terraform. Вы никогда не должны редактировать его вручную или считывать его напрямую.

Если вам по какой-то причине нужно модифицировать файл состояния (что должно быть редкостью), используйте команды terraform import или terraform state (примеры работы с ними показаны в главе 5).

Если вы используете Terraform в личном проекте, можно спокойно хранить файл terraform.tfstate локально на своем компьютере. Но если вы ведете командную разработку реального продукта, может возникнуть несколько проблем.

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

• Блокирование файлов состояния. Разделение данных сразу же создает новую проблему: блокирование. Если два члена команды запускают Terraform одновременно, может возникнуть состояние гонки, так как обновление файлов состояния происходит параллельно со стороны двух разных процессов. Без блокирования это может привести к конфликтам, потере данных и повреждению файлов состояния.

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

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

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

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

Скотт Беркун

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

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

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

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

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