Terraform за 15 дней (AWS/Yandex cloud). День 1

от автора

Оглавление

  1. День 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 и т.д.)

План следующий:

  1. получить идентификатор облака

  2. получить идентификатор папки

  3. инициировать 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/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *