Выбрать главу

Установка Terraform

Вы можете загрузить Terraform на домашней странице проекта по адресу https://www.terraform.io. Щелкните на ссылке для загрузки, выберите подходящий пакет для своей операционной системы, сохраните ZIP-архив и распакуйте его в папку, в которую хотите установить Terraform. Архив содержит единственный двоичный файл под названием terraform, который следует добавить в переменную среды PATH. Как вариант, попробуйте поискать Terraform в диспетчере пакетов своей ОС; например, в OS X можно выполнить brewinstallterraform.

Чтобы убедиться, что все работает, запустите команду terraform. Вы должны увидеть инструкции по применению:

$ terraform

Usage: terraform [-version] [-help] <command> [args]

Common commands:

    apply              Builds or changes infrastructure

    console            Interactive console for Terraform interpolations

    destroy            Destroy Terraform-managed infrastructure

    env                Workspace management

    fmt                Rewrites config files to canonical format

    (...)

Чтобы система Terraform могла вносить изменения в вашу учетную запись AWS, нужно прописать в переменных среды AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY учетные данные для пользователя IAM, которого вы создали ранее. Например, вот как это можно сделать в терминале Unix/Linux/macOS:

$ export AWS_ACCESS_KEY_ID=(your access key id)

$ export AWS_SECRET_ACCESS_KEY=(your secret access key)

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

Способы аутентификации

Помимо переменных среды, Terraform поддерживает те же механизмы аутентификации, что и все утилиты командной строки и SDK для AWS. Таким образом, вы сможете использовать файл $HOME/.aws/credentials, который автоматически генерируется, если запустить AWS CLI с командой configure, или роли IAM, которые можно назначить почти любому ресурсу в AWS. Подробнее об этом — в статье A Comprehensive Guide to Authenticating to AWS on the Command Line по адресу http://bit.ly/2M11muR.

Развертывание одного сервера

Код Terraform пишется на языке конфигурации HashiCorp (HashiCorp Configuration Language, или HCL) и хранится в файлах с расширением .tf28. Это декларативный язык, поэтому ваша задача — описать нужную вам инфраструктуру, а Terraform разберется с тем, как ее создать. Terraform умеет создавать инфраструктуру на разнообразных платформах (или провайдерах в терминологии проекта), включая AWS, Azure, Google Cloud, DigitalOcean и многие другие.

Код Terraform можно писать в практически любом текстовом редакторе. Если поискать, можно найти подсветку синтаксиса Terraform для большинства редакторов (обратите внимание, что вам, возможно, нужно искать по слову HCL, а не Terraform), включая vim, emacs, Sublime Text, Atom, Visual Studio Code и IntelliJ (у последнего даже есть поддержка рефакторинга, поиска вхождений и перехода к объявлению).

Первым делом при использовании Terraform обычно следует выбрать провайдера (одного или несколько), с которым вы хотите работать. Создайте пустую папку и поместите в нее файл с именем main.tf и следующим содержанием:

provider "aws" {

  region = "us-east-2"

}

Это говорит Terraform о том, что в качестве провайдера вы собираетесь использовать AWS и хотите развертывать свою инфраструктуру в регионе us-east-2. Вычислительные центры AWS разбросаны по всему миру и сгруппированы по регионам. Регионы AWS — это отдельные географические области, такие как us-east-2 (Огайо), eu-west-1 (Ирландия) и ap-southeast-2 (Сидней). Внутри каждой области находится несколько изолированных вычислительных центров, известных как зоны доступности: например, us-east-2a, us-east-2b и т. д.

Каждый тип провайдеров поддерживает создание разного вида ресурсов, таких как серверы, базы данных и балансировщики нагрузки. Обобщенный синтаксис создания ресурса в Terraform выглядит так:

resource "<PROVIDER>_<TYPE>" "<NAME>" {

   [CONFIG ...]

}

PROVIDER — имя провайдера (предположим, aws), TYPE — тип ресурса, создаваемого в этом провайдере (вроде instance), NAME — идентификатор, с помощью которого вы хотите ссылаться на ресурс в коде Terraform (скажем, my_instance), а CONFIG содержит один или несколько аргументов, предусмотренных специально для этого ресурса.