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

• Он рассчитан на 99,999999999%-ную устойчивость и 99,99%-ную доступность. Это означает, что вам не стоит сильно волноваться о потере данных и перебоях в работе34.

• Он поддерживает шифрование, что снижает риск хранения чувствительных данных в файлах состояния. Хотя это лишь частичное решение, так как любой член вашей команды с доступом к бакету S3 сможет просматривать эти файлы в открытом виде, но так данные будут шифроваться при сохранении (Amazon S3 поддерживает шифрование на серверной стороне с помощью AES-256) и передаче (Terraform использует SSL для чтения и записи данных в Amazon S3).

• Он поддерживает блокирование с помощью DynamoDB (подробнее об этом  —чуть позже).

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

• Он недорогой, поэтому большинство сценариев применения Terraform легко вписываются в бесплатный тарифный план35.

Чтобы включить удаленное хранение состояния в Amazon S3, для начала нужно подготовить бакет S3. Создайте файл main.tf в новой папке (это не должна быть папка, в которой вы храните конфигурацию из главы 2) и вверху укажите AWS в качестве провайдера:

provider "aws" {

  region = "us-east-2"

}

Затем создайте бакет S3, используя ресурс aws_s3_bucket:

resource "aws_s3_bucket" "terraform_state" {

  bucket = "terraform-up-and-running-state"

  # Предотвращаем случайное удаление этого бакета S3

  lifecycle {

    prevent_destroy = true

  }

  # Включаем управление версиями, чтобы вы могли просматривать

  # всю историю ваших файлов состояния

  versioning {

    enabled = true

  }

  # Включаем шифрование по умолчанию на стороне сервера

  server_side_encryption_configuration {

    rule {

      apply_server_side_encryption_by_default {

        sse_algorithm = "AES256"

      }

    }

  }

}

Этот код устанавливает четыре аргумента.

•bucket. Это имя бакета S3. Имейте в виду, что имена бакетов должны быть уникальными на глобальном уровне среди всех клиентов AWS. Поэтому вместо "terraform-up-and-running-state" вы должны подобрать свое собственное ­название (так как бакет с этим именем я уже создал36). Запомните его и обратите внимание на то, какой регион AWS вы используете: чуть позже вам понадобятся оба эти фрагмента информации.

• prevent_destroy. Это второй параметр жизненного цикла, с которым вы сталкиваетесь (первым был create_before_destroy в главе 2). Если присвоить ему true, при попытке удаления соответствующего ресурса (например, при выполнении terraformdestroy) Terraform вернет ошибку. Это позволяет предотвратить случайное удаление важных ресурсов, таких как бакет S3 со всем вашим состоянием Terraform. Конечно, если вы действительно хотите его удалить, просто закомментируйте этот параметр.

• versioning. В данном разделе включается управления версиями в бакете S3, в результате чего каждое обновление хранящегося в нем файла будет создавать его новую версию. Это позволяет просматривать старые версии и откатываться к ним в любой момент.

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

Далее нужно создать таблицу DynamoDB, которая будет использоваться для блокирования. DynamoDB — это распределенное хранилище типа «ключ — значение» от Amazon. Оно поддерживает строго согласованное чтение и условную запись — все, что необходимо для распределенной системы блокирования. Более того, оно полностью управляемое, поэтому вам не нужно заниматься никакой дополнительной инфраструктурой, а большинство сценариев применения Terraform легко впишутся в бесплатный тарифный план37.

Чтобы использовать DynamoDB для блокирования в связке с Terraform, нужно создать таблицу с первичным ключом под названием LockID (с аналогичным написанием). Это можно сделать с помощью ресурса aws_dynamodb_table:

resource "aws_dynamodb_table" "terraform_locks" {

  name         = "terraform-up-and-running-locks"

  billing_mode = "PAY_PER_REQUEST"

  hash_key     = "LockID"

  attribute {

    name = "LockID"

    type = "S"

  }

}

Выполните terraforminit, чтобы загрузить код провайдера, а затем terraformapply, чтобы развернуть ресурсы. Примечание: чтобы иметь возможность развертывать этот код, у вашего пользователя IAM должны быть права на создание бакетов S3 и таблиц DynamoDB, как описано в разделе «Подготовка вашей учетной записи в AWS» на с. 60. После завершения развертывания вы получите бакет S3 и таблицу DynamoDB, но ваше состояние Terraform по-прежнему будет храниться локально. Чтобы хранить его в бакете S3 (с шифрованием и блокированием), нужно добавить в свой код раздел backend. Это конфигурация самой системы Terraform, поэтому она находится внутри блока terraform и имеет следующий синтаксис:

terraform {

  backend "" {

     [CONFIG...]

  }

}

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

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

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

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

Скотт Беркун

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

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

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

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

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