Оглавление
-
День 1: Введение
Ссылки
Некоторые ссылки требует 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 все начинается с availability-zone, в которой уже располагаются основные ресурсы.
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.lock.hcl.
Пока остановимся на этом, в следующей главе создадим что-нибудь в наших облаках.
Любые вопросы пишите на почту v.valentinvolkov@gmail.com. Буду рад помочь!
ссылка на оригинал статьи https://habr.com/ru/post/684964/
Добавить комментарий