Оглавление
Ссылки
Некоторые ссылки требует VPN
День 1
Введение
Я постараюсь добавить все необходимые ссылки на документации и доп. источники, так что вы сможете дополнить необходимые знания, но данный курс (если это можно так назвать) скорее рассчитан на тех, кто в общем знаком с облачными технологиями. Это не пособие по terraform. Цель - помочь новичкам в данном вопросе начать изучать IaC и облака в целом. Некий quick start.
Мы от простого к сложному, поднимем небольшую инфраструктуру на aws и Яндекс (актуальность последнего я думаю объяснять не нужно). Так что по итогу вы сможете сказать: “Я изучал terraform от простого к сложному”.
Примеры в основном будут с использованием CLI aws и Яндекса: я не считаю это обязательным условием, “без которого вы не можете называть себя программистом”, но лучше к этому привыкать сразу. Если визуальная информация для вас предпочтительна, следите за всем в браузере, параллельно вводу команд
Если вы совсем новичок в теме “интернет”, вот ЛУЧШИЙ ВИДЕО КУРС по “сетям” который я видел на просторах этого самого интернета (отправьте копейку автору обязательно!)
Я не буду показывать как завести аккаунт в aws или Яндекс… Также, установите соответсвующий плагин “terraform” в ваш редактор.
В aws дают бесплатно поиграть с t3.micro, в Яндекс дают небольшую сумму на пару месяце. Если у вас уже использован бесплатный тариф, то забросьте 300 руб. 0 коп. на счет, этого более чем хватит.
Установка
Установить понадобится сам terraform и CLI’ы aws и Яндекс (в документациях описаны процессы установки на разные системы)
Для аутентификации в aws нам понадобится access_key и secret_key;
а для Яндекс - OAuth-токен
Синтаксис terraform
Основная задача языка Terraform — объявление ресурсов, представляющих объекты инфраструктуры, предоставляемые провайдером. Синтаксис языка Terraform состоит всего из нескольких основных элементов:
# на примере aws
resource "aws_vpc" "main" {
cidr_block = var.base_cidr_block
}
<BLOCK TYPE> "<BLOCK LABEL>" "<BLOCK LABEL>" {
Block body
<IDENTIFIER> = <EXPRESSION> # параметры
}
BLOCK TYPE - resource: что мы объявляем, в данном случае ресурс (могут быть переменные, провайдеры и т.д.)
BLOCK LABEL - aws_vpc: название ресурса, в данном случае этот ресурс VPC (приставка в начале соответсвует провайдеру н.п. “aws”)
BLOCK LABEL - main: имя конкретного объекта; это имя нужно terraform для идентификации, н.п. конкретной VPS (не имеет отношения к имени VPS в aws)
IDENTIFIER = EXPRESSION - ключ = значение: параметры объекта
В целом можно это обозначить так:
Нам нужно что? - ресурс.
Какой? - “aws_vpc”.
Как назовем? - “main”
Как мы настроим наш main vps? - cidr_block будет иметь значение переменной base_cidr_block (”var.base_cidr_block” обращение к переменной)
Основные понятия
Понятия у большинства облачных провайдеров похожие (в том числе у Яндекс и aws):
Еще раз ЛУЧШИЙ ВИДЕО КУРС по сетям
Провайдеры
Провайдер это инструмент, который превращает наши terraform файлы (.tf кстати) в инструкции для конкретного облачного сервиса. Таким образом мы получаем универсальный terraform и специальные “провайдеры”, например для aws или Яндекс.
Инициация terraform
Для инициализации провайдера может понадобится VPN. Все значения id подставляйте свои.
Яндекс
В Яндекс у вас есть “облака”, в которых есть “папки”, в которых находятся основные ресурсы (VPC, VM и т.д.)
План следующий:
получить идентификатор облака
получить идентификатор папки
инициировать terraform с провайдером яндекса
mkdir yandex ; \
cd yandex ; \
touch main.tf
yc resource-manager cloud list
+----------------------+----------------------+----------------------+
| ID | NAME | ORGANIZATION ID |
+----------------------+----------------------+----------------------+
| b1gos1rh49bip4rnmrmg | test-cloud | bpfcu8j6clum010u5r72 |
+----------------------+----------------------+----------------------+
yc resource-manager --cloud-id b1gos1rh49bip4rnmrmg folder list
+----------------------+---------+--------+--------+
| ID | NAME | LABELS | STATUS |
+----------------------+---------+--------+--------+
| b1gjju43i1pr11i5c4ic | default | | ACTIVE |
+----------------------+---------+--------+--------+
yandex/main.tf
terraform {
required_providers {
yandex = {
source = "yandex-cloud/yandex"
}
}
}
provider "yandex" {
token = "AQA...C0A" # OAuth-токен яндекса
# не обязательный параметр (берется облако по умолчанию),
# хотя в документации написано иначе
cloud_id = "b1gos1rh49bip4rnmrmg"
folder_id = "b1gjju43i1pr11i5c4ic"
zone = "ru-central1-a"
}
aws
В aws все начинается с region, в которой уже располагаются основные ресурсы.
mkdir aws ; \
cd aws ; \
touch main.tf
aws/main.tf
provider "aws" {
access_key = "AK..."
secret_key = "2X..."
region = "eu-north-1"
}
Инитиализация
В директории aws или yandex:
terraform init
Эта команда скачает провайдер в папку: далее terraform будет работать с локальным файлами в папке .terraform
, и создаст .terraform.lock.hcl.
Пока остановимся на этом, в следующей главе создадим что-нибудь в наших облаках.
Любые вопросы пишите на почту v.valentinvolkov@gmail.com. Буду рад помочь!