Начало работы с Terraform
Terraform позволяет быстро создать облачную инфраструктуру в Yandex.Cloud. Состав инфраструктуры определяется с помощью конфигурационных файлов, в которых указываются требуемые облачные ресурсы и их параметры.
Конфигурации для Terraform записываются в файлы в формате .tf
на языке HashiCorp Configuration Language (HCL).
Чтобы установить, настроить Terraform и создать первую конфигурацию:
- Установите Terraform
- Создайте файл конфигурации Terraform
- Настройте провайдер
- Подготовьте план инфраструктуры
- Создайте ресурсы
- Удалите ресурсы
Подготовьте облако к работе
Перед тем, как разворачивать инфраструктуру, нужно зарегистрироваться в Yandex.Cloud и создать платежный аккаунт:
- Перейдите в консоль управления, затем войдите в Yandex.Cloud или зарегистрируйтесь, если вы еще не зарегистрированы.
- На странице биллинга убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе
ACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша виртуальная машина, на странице облака.
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки созданных с помощью Terraform ресурсов входят:
- плата за постоянно запущенные виртуальные машины (см. тарифы Yandex Compute Cloud);
- плата за использование динамических публичных IP-адресов (см. тарифы Yandex Virtual Private Cloud).
Установите Terraform
Скачайте дистрибутив Terraform и установите его по инструкции.
Используйте один из способов:
-
Для установки Terraform с помощью пакетного менеджера Homebrew выполните команду:
$ brew install terraform
-
Для установки вручную скачайте дистрибутив Terraform и установите его по инструкции.
Создайте файл конфигурации Terraform
- Создайте новую директорию с произвольным названием, например
yandex-cloud-terraform
. В ней будут храниться конфигурационные файлы и сохраненные состояния Terraform и инфраструктуры. - Создайте в новой директории конфигурационный файл с расширением
.tf
, например,example.tf
.
Настройте провайдер
-
В начале конфигурационного файла необходимо задать настройки провайдера.
provider "yandex" { token = "<OAuth>" cloud_id = "<идентификатор облака>" folder_id = "<идентификатор каталога>" zone = "ru-central1-a" }
provider
— название провайдера.token
— OAuth-токен для доступа к Yandex.Cloud.cloud_id
— идентификатор облака, в котором Terraform создаст ресурсы.folder_id
— идентификатор каталога, в котором по умолчанию будут создаваться ресурсы.zone
— зона доступности, в которой по умолчанию будут создаваться все облачные ресурсы.
-
Выполните команду
terraform init
в папке с конфигурационным файлом. Эта команда инициализирует провайдеров, указанных в конфигурационных файлах и позволяет работать с ресурсами и источниками данных провайдера.
Подготовьте план инфраструктуры
С помощью Terraform в Yandex.Cloud можно создавать облачные ресурсы всех типов: виртуальные машины, диски, образы и т.д. Подробную информацию о ресурсах, создающихся с помощью Terraform, см. в документации провайдера.
Для создания ресурса необходимо указать набор обязательных и опциональных параметров, определяющих свойства ресурса. Такие описания ресурсов составляют план инфраструктуры.
По плану будут созданы две виртуальные машины: terraform1
и terraform2
, а также облачная сеть network-1
с подсетью subnet-1
.
Имена ресурсов должны соответствовать следующим требованиям:
- Длина — от 3 до 63 символов.
- Может содержать строчные буквы латинского алфавита, цифры и дефисы.
- Первый символ — буква. Последний символ — не дефис.
У машин будут разные количества ядер и объемы памяти: 2 ядра и 2 Гб оперативной памяти у terraform1
и 4 ядра и 4 Гб оперативной памяти у terraform2
. Машины автоматически получат публичные IP-адреса и приватные IP-адреса из диапазона 192.168.10.0/24
в подсети subnet-1
, находящейся в зоне доступности ru-central1-a
и принадлежащей облачной сети network-1
. На виртуальных машинах будет установлена операционная система Ubuntu и размещена публичная часть ключа для доступа к машинам по SSH.
В конфигурации виртуальной машины вам потребуется указать идентификатор образа загрузочного диска. Список доступных публичных образов можно получить командой CLI yc compute image list --folder-id standard-images
.
Для доступа к ВМ через SSH нужно сгенерировать пару SSH-ключей и передать публичную часть ключа на виртуальную машину в параметре ssh-keys
блока metadata
.
Конфигурации ресурсов задаются сразу после конфигурации провайдера:
provider "yandex" {
token = "OAuth_token"
cloud_id = "cloud-id"
folder_id = "folder-id"
zone = "ru-central1-a"
}
resource "yandex_compute_instance" "vm-1" {
name = "terraform1"
resources {
cores = 2
memory = 2
}
boot_disk {
initialize_params {
image_id = "fd87va5cc00gaq2f5qfb"
}
}
network_interface {
subnet_id = yandex_vpc_subnet.subnet-1.id
nat = true
}
metadata = {
ssh-keys = "ubuntu:${file("~/.ssh/id_rsa.pub")}"
}
}
resource "yandex_compute_instance" "vm-2" {
name = "terraform2"
resources {
cores = 4
memory = 4
}
boot_disk {
initialize_params {
image_id = "fd87va5cc00gaq2f5qfb"
}
}
network_interface {
subnet_id = yandex_vpc_subnet.subnet-1.id
nat = true
}
metadata = {
ssh-keys = "ubuntu:${file("~/.ssh/id_rsa.pub")}"
}
}
resource "yandex_vpc_network" "network-1" {
name = "network1"
}
resource "yandex_vpc_subnet" "subnet-1" {
name = "subnet1"
zone = "ru-central1-a"
network_id = yandex_vpc_network.network-1.id
v4_cidr_blocks = ["192.168.10.0/24"]
}
output "internal_ip_address_vm_1" {
value = yandex_compute_instance.vm-1.network_interface.0.ip_address
}
output "internal_ip_address_vm_2" {
value = yandex_compute_instance.vm-2.network_interface.0.ip_address
}
output "external_ip_address_vm_1" {
value = yandex_compute_instance.vm-1.network_interface.0.nat_ip_address
}
output "external_ip_address_vm_2" {
value = yandex_compute_instance.vm-2.network_interface.0.nat_ip_address
}
Создание пользователей
Если вам нужно создать другого пользователя, в блок metadata
вместо параметра ssh-keys
можно передать пользовательские метаданные в параметре user-data
. Для этого:
-
Создайте текстовый файл с метаданными, например:
#cloud-config users: - name: <имя пользователя> groups: sudo shell: /bin/bash sudo: ['ALL=(ALL) NOPASSWD:ALL'] ssh-authorized-keys: - ssh-rsa AAAAB3Nza......OjbSMRX user@example.com - ssh-rsa AAAAB3Nza......Pu00jRN user@desktop
-
Добавьте в конфигурацию параметр
user-data
, указав путь к файлу с метаданными:metadata = { user-data = "${file("<путь к файлу>/meta.txt")}" }
Подробнее о работе с метаданными читайте в разделе Метаданные виртуальной машины.
Создайте ресурсы
После подготовки конфигурации выполните команду terraform plan
. Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет. Это проверочный этап: ресурсы не будут созданы.
Внимание
Все созданные с помощью Terraform ресурсы тарифицируются, внимательно проверьте план.
Если в конфигурации нет ошибок, выполните команду terraform apply
. Terraform запросит подтверждение создания ресурсов: введите в терминал слово yes
и нажмите Enter. После этого в указанном каталоге будут созданы все требуемые ресурсы, а в терминале отобразятся IP-адреса виртуальных машин. Проверить появление ресурсов и их настройки можно в консоли управления.
Удалите ресурсы
Все созданные с помощью Terraform ресурсы можно удалить с помощью команды terraform destroy
. После выполнения команды в терминале отобразится список ресурсов, которые будут удалены. Для подтверждения введите слово yes
и нажмите Enter.