107 lines
2 KiB
HCL
107 lines
2 KiB
HCL
terraform {
|
|
required_providers {
|
|
yandex = {
|
|
source = "yandex-cloud/yandex"
|
|
}
|
|
ansible = {
|
|
source = "ansible/ansible"
|
|
}
|
|
}
|
|
}
|
|
|
|
provider "yandex" {
|
|
zone = "ru-central1-b"
|
|
}
|
|
|
|
resource "yandex_compute_instance" "vm" {
|
|
count = 2
|
|
|
|
name = "vm${count.index}"
|
|
platform_id = "standard-v1"
|
|
boot_disk {
|
|
initialize_params {
|
|
image_id = "fd87j6d92jlrbjqbl32q" # ubuntu 22.04
|
|
size = 8
|
|
}
|
|
}
|
|
|
|
network_interface {
|
|
subnet_id = yandex_vpc_subnet.subnet1.id
|
|
nat = true
|
|
}
|
|
|
|
resources {
|
|
core_fraction = 5
|
|
cores = 2
|
|
memory = 2
|
|
}
|
|
|
|
metadata = {
|
|
user-data = yamlencode({
|
|
users = [{
|
|
name = "andrei"
|
|
shell = "/bin/bash"
|
|
sudo = "ALL=(ALL) NOPASSWD:ALL"
|
|
ssh-authorized-keys = [
|
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEt0hgwAMTEZNNQXn91s2dEj1R+jRR16qYQNZxZiAzD/ andrei@debian"
|
|
]
|
|
}]
|
|
})
|
|
}
|
|
}
|
|
|
|
resource "yandex_vpc_network" "network1" {
|
|
name = "network1"
|
|
}
|
|
|
|
resource "yandex_vpc_subnet" "subnet1" {
|
|
name = "subnet1"
|
|
v4_cidr_blocks = [ "172.24.8.0/24" ]
|
|
network_id = yandex_vpc_network.network1.id
|
|
}
|
|
|
|
resource "yandex_lb_target_group" "group1" {
|
|
name = "group1"
|
|
|
|
dynamic "target" {
|
|
for_each = yandex_compute_instance.vm
|
|
content {
|
|
subnet_id = yandex_vpc_subnet.subnet1.id
|
|
address = target.value.network_interface.0.ip_address
|
|
}
|
|
}
|
|
}
|
|
|
|
resource "yandex_lb_network_load_balancer" "balancer1" {
|
|
name = "balancer1"
|
|
deletion_protection = "false"
|
|
listener {
|
|
name = "my-lb1"
|
|
port = 80
|
|
external_address_spec {
|
|
ip_version = "ipv4"
|
|
}
|
|
}
|
|
|
|
attached_target_group {
|
|
target_group_id = yandex_lb_target_group.group1.id
|
|
healthcheck {
|
|
name = "http"
|
|
http_options {
|
|
port = 80
|
|
path = "/"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
resource "ansible_host" "vm" {
|
|
count = length(yandex_compute_instance.vm)
|
|
|
|
name = "vm${count.index}"
|
|
groups = ["nginx"]
|
|
variables = {
|
|
ansible_host = yandex_compute_instance.vm[count.index].network_interface.0.nat_ip_address
|
|
}
|
|
}
|
|
#cloud-config
|