Pull to refresh

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

Reading time4 min
Views24K

Оглавление

  1. День 1: Введение

  2. День 2: Поднимаем сервера

  3. День 3: Data source и outputs

Ссылки

Некоторые ссылки требует 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 все начинается с 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. Буду рад помочь!

Tags:
Hubs:
Total votes 15: ↑9 and ↓6+6
Comments4

Articles