Установка 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 содержит один или несколько аргументов, предусмотренных специально для этого ресурса.