В данной статье посмотрим и разберем, как создать простейшие ресурсы в облаке AWS (Amazon Web Services) с помощью замечательного инструмента IaaS, под названием Terraform. Для того, чтобы можно было повторить то, о чем пойдет речь в статье необходим действующий аккаунт AWS и рабочая машина (виртуальный сервер) с установленным Terraform, и текстовым редактором Atom + плагин для Terraform.
Первоначальная настройка данных инструментов разбиралась в предыдущих статьях. Описание в статье пойдет под операционную систему CentOS. Вы можете для тренировки использовать на свой вкус любую.
Для начала создадим папку под наш новый проект, можно непосредственно в домашней директории.
sudo mkdir terraform
Создадим первый файл нашего терраформ кода. Можно создать непосредственно в редакторе, через меню или в командной строке sudo touch myterr.tf
. Принципиальной разницы, как будет создан файл нет. Если создали через командную строку открываем, как обычный файл в редакторе.
Далее схема работы следующая: пишем код в файле, сохраняем, производим управляющие команды в командной строке для выполнения или проверки данного кода, уничтожения, модификации элементов или объектов в облаке.
Как в начале статьи было сказано, нам необходим аккаунт AWS, чтобы терраформ взаимодействовал с облачной инфраструктурой, а более конкретно нам нужно создать пользователя и получить access key и secret key, для доступа к облаку. Это необходимо для аунтификации Terraform в AWS облаке.
Заходим в AWS консоль и выбираем сервис IAM. Заходим во вкладку пользователи и создаем новую учетную запись. Вводим имя пользователя в пустое поле. Нужно поставить Programmatic Фccess. Далее нажимаем Создать пользователя и попадаем на закладку назначения прав. Тут необходимо присоеденить уже созданный по умолчанию в AWS набор прав администратора. Далее переходим к страничке назначения Tag, тут по желанию вашему, если хотите то можете добавить тэги. Нажимаем кнопку создать пользователя.

Финальное окно будет выглядеть следующим образом.
Получаем те данные, которые нам необходимы для Terraform.
Очень важно - Secret key показывается только один раз!

Теперь в принципе все готово для создания первого ресурса в AWS.
Начинаем с объявления с каким облаком мы работаем.
provider “aws” { }
Тем самым мы обозначили с каким облачным провайдером мы будем работать. В данном коде в отличии от YAML, количество пробелов не важно. Далее прописываем access key и secret key. В каком регионе будут использоваться ресурсы. Регион мы укажем eu-central-1 – это ЦОД расположенный в Европе во Франфуркте. Старайтесь регион указывать, поближе к себе, чтобы до ресурсов была минимальная задержка прохождения пакетов.
provider “aws” { access_key = “тут ключ доступа” secret key = “тут секретный ключ” region = “eu-central-1” }
При нажатии Ctrl+S, мы сохраняем и видим, что плагин аккуратно выправляет для удобства написанный код.
Теперь можно сделать первый ресурс. Например, инстанс в Амазон. Добавляем ниже:
resource “aws_instance” “my_название” { ami = “” instance_type = “” }
Для поднятия ресурса необходимо указать 2 минимальные вещи. Это ami – image id и instance_type. Теперь необходимо пойти в указанный регион, открыть EC2 и посмотреть ami интересующего инстанса.

В принципе все готово для запуска первого инстанса. Код Terraform будет выглядеть следующим образом:
provider “aws” { access_key = “тут ключ доступа” secret key = “тут секретный ключ” region = “eu-central-1” } resource “aws_instance” “TestUbuntu” { ami = “ami-0767046d1677be5a0” instance_type = “t2.micro” }
Запускаем консоль и переходим в директорию, где находится у нас Terraform.
Далее есть небольшой нюанс запуска, чтобы в коде не светить свои access_key и secret_key, эти данные можно убрать, экспортировав в переменные. Делается это следующим образом. С помощью команды export
.
export AWS_ACCESS_KEY_ID=ключ export AWS_SECRET_ACCESS_KEY=ключ
И можно убирать эти 2 строчки из кода.
Теперь запускаем Terraform. Первая команда, которую необходимо сделать это команда terraform init
, данная команда пройдется по всем tf
файлам, она увидит провайдера и скачает дополнительные файлы, необходимые для запуска в том числе и бинарники. Сам Terraform – это такая оболочка, которая подкачивает все, что ей необходимо.

Следующая команда, которая понадобится это terraform plan
, данная команда позволяет посмотреть, что Terraform будет делать. Т.е нечто вроде Whatif
. Данная команда очень важна т.к в крупных проектах, позволяет заранее посмотреть, что будет если мы запустим файл терраформа. Вывод ее большой, кусочек представлен на картинке.

Можно увидеть, что добавится. Достаточно удобно. Как мы видим, при команде на deploy
, Terraform добавит в амазон 1 instance
, т.е 1 виртуальную машину из указанного шаблона, указанного типа и размера.
Непосредственно для deploy
, необходимо ввести команду terraform apply
, прочитать что Terraform будет делать и явным образом, командой yes
подтвердить.
После подтверждения видим следующую картину. Со стороны консоли.

Со стороны амазона спустя полминуты.

Как мы видим сервер создался и проходит инициализацию.
