Установка:
wget https://hashicorp-releases.yandexcloud.net/terraform/1.8.0/terraform_1.8.0_linux_amd64.zipwget
#Зеркало с пакетами https://hashicorp-releases.yandexcloud.net/terraform/1.8.0/
unzip ./terraform*
cp ./terraform /usr/bin/terraform
Установка автозаполнения:
terraform -install-autocomplete
reboot
Обязательный костыль, перенаправление на РУ зеркало registry
vim /root/.terraformrc #Положить файл в директорию к каждому пользователю, которому нужен trraform
provider_installation { network_mirror { url = "https://terraform-mirror.yandexcloud.net/" include = ["registry.terraform.io/*/*"] } direct { exclude = ["registry.terraform.io/*/*"] } }
Установка провайдера
vim ./main.tf #В любой директории
terraform { required_version = "= 1.8.0" required_providers { yandex = { source = "yandex-cloud/yandex" version = "> 0.73" } } } provider "yandex" { token = "..." cloud_id = "..." folder_id = "..." zone = "ru-central1-b" }
token - https://cloud.yandex.ru/docs/iam/concepts/authorization/oauth-token
cloud_id - в https://console.yandex.cloud нажать на cloud...., там токен
folder_id - в https://console.yandex.cloud подкаталог defaul, токен для копирования там
terraform init #Инит самого terraform, выполнять находясь в папке с main.tf, теперь эта папка будет папкой terrafrom
Файл самой инфраструктуры :
vim infrastructure1.tf
#Имена и названия стоит поменять
data "yandex_compute_image" "alt_images" {
family = "basealt-altserver"
}
resource "yandex_compute_instance" "alt1" {
#Создаются 2 машинки с именами alt-1 и alt-2
name = "alt-${count.index+1}"#+1 из-за начала count = 0
count = 2
resources {
core_fraction = 20
cores = 2
memory = 2
}
boot_disk {
initialize_params {
image_id = data.yandex_compute_image.alt_images.id
}
}
network_interface {
subnet_id = yandex_vpc_subnet.subnet_terraform.id
nat = true
ip_address = "192.168.15.${count.index+10}"
}
metadata = {
user-data = "${file("./meta.yml")}"
}
}
resource "yandex_vpc_network" "network_terraform" {
name = "net_terraform"
}
resource "yandex_vpc_subnet" "subnet_terraform" {
name = "sub_terraform"
zone = "ru-central1-b"
network_id = yandex_vpc_network.network_terraform.id
v4_cidr_blocks = ["192.168.15.0/24"]
}
#Вывод белых ip машинок, по отдельности
output "alt1_pub" {
value = yandex_compute_instance.alt1[0].network_interface[0].nat_ip_address
}
output "alt2_pub" {
value = yandex_compute_instance.alt1[1].network_interface[0].nat_ip_address
}
Meta файл для машинок:
#cloud-config
# ^ Обязательный коммент
users:
- name: user1
# groups: wheel
shell: /bin/bash
sudo: ['ALL=(ALL) NOPASSWD:ALL']
ssh-authorized-keys: "ssh-rsa ... user@terracli"
Tips:
terraform plan #Показывает изменения, но не делает ничего
terraform apply #Применяет
#Ответить yes в возникшем диалоговом окне
terraform output #Вывод всех output
terraform output alt_pub #Вывод одного output