homework 15.2: complete all tasks

This commit is contained in:
2023-02-09 10:28:02 +07:00
parent e197b5e0ff
commit 819768cb44
3 changed files with 107 additions and 25 deletions

View File

@@ -121,6 +121,15 @@ resource "yandex_storage_object" "cute-cat-picture" {
} }
``` ```
* Для корректной работы создания/удаления необходимо явно добавить зависимость группы от ролей сервисного аккаунта:
```terraform
depends_on = [
yandex_resourcemanager_folder_iam_member.os-global-editor,
yandex_resourcemanager_folder_iam_member.os-vpc-user
]
```
> - Для создания стартовой веб-страницы рекомендуется использовать раздел `user_data` в [meta_data](https://cloud.yandex.ru/docs/compute/concepts/vm-metadata); > - Для создания стартовой веб-страницы рекомендуется использовать раздел `user_data` в [meta_data](https://cloud.yandex.ru/docs/compute/concepts/vm-metadata);
> - Разместить в стартовой веб-странице шаблонной ВМ ссылку на картинку из bucket; > - Разместить в стартовой веб-странице шаблонной ВМ ссылку на картинку из bucket;
@@ -169,7 +178,7 @@ health_check {
} }
``` ```
Для проверки будет использована практика из [предыдущего домашнего задания](/src/homework/15-cloud-providers/15.1), Для промежуточной проверки успешности развёртывания сервисов будет использована практика из [предыдущего домашнего задания](/src/homework/15-cloud-providers/15.1),
когда для подключения к машинам, которые не имеют выделенного внешнего ip-адреса используется дополнительная виртуальная машина, когда для подключения к машинам, которые не имеют выделенного внешнего ip-адреса используется дополнительная виртуальная машина,
доступная из-вне. доступная из-вне.
@@ -187,11 +196,34 @@ curl http://localhost/index2.html
</html> </html>
``` ```
> 3. Подключить группу к сетевому балансировщику: > 3. Подключить группу к сетевому балансировщику:
> - Создать сетевой балансировщик; > - Создать сетевой балансировщик;
// todo Для начала необходимо дополнительно сгруппировать виртуальные машины в сетевую группу:
```terraform
resource "yandex_lb_target_group" "os-lamp-balancer-group" {
name = "os-lamp-balancer-group"
region_id = "ru-central1"
target {
subnet_id = yandex_vpc_subnet.os-subnet.id
address = yandex_compute_instance_group.os-lamp-group.instances[0].network_interface[0].ip_address
}
target {
subnet_id = yandex_vpc_subnet.os-subnet.id
address = yandex_compute_instance_group.os-lamp-group.instances[1].network_interface[0].ip_address
}
target {
subnet_id = yandex_vpc_subnet.os-subnet.id
address = yandex_compute_instance_group.os-lamp-group.instances[2].network_interface[0].ip_address
}
}
```
Затем уже есть возможность создать сам сетевой балансировщик:
```terraform ```terraform
resource "yandex_lb_network_load_balancer" "os-lamp-balancer" { resource "yandex_lb_network_load_balancer" "os-lamp-balancer" {
@@ -200,10 +232,13 @@ resource "yandex_lb_network_load_balancer" "os-lamp-balancer" {
listener { listener {
name = "os-lamp-balancer-listener" name = "os-lamp-balancer-listener"
port = 80 port = 80
external_address_spec {
ip_version = "ipv4"
}
} }
attached_target_group { attached_target_group {
target_group_id = yandex_compute_instance_group.os-lamp-group.id target_group_id = yandex_lb_target_group.os-lamp-balancer-group.id
healthcheck { healthcheck {
name = "os-lamp-balancer-healthcheck" name = "os-lamp-balancer-healthcheck"
http_options { http_options {
@@ -215,6 +250,19 @@ resource "yandex_lb_network_load_balancer" "os-lamp-balancer" {
} }
``` ```
После успешного применения конфигурации можно сделать запрос на адрес из вывода `balancer-ips.external` или открыть страницу в браузере.
```shell
curl http://<balancer-ips.external>/index2.html
```
```text
<!DOCTYPE html>
<html lang="en">
...
</html>
```
> - Проверить работоспособность, удалив одну или несколько ВМ. > - Проверить работоспособность, удалив одну или несколько ВМ.
// todo Удаление лучше произвести вручную из web-интерфейса. После удаления машины балансер останется работать и успешно возвращать ответы.

View File

@@ -14,6 +14,12 @@ resource "yandex_resourcemanager_folder_iam_member" "os-global-editor" {
resource "yandex_compute_instance_group" "os-lamp-group" { resource "yandex_compute_instance_group" "os-lamp-group" {
name = "os-lamp-group" name = "os-lamp-group"
service_account_id = yandex_iam_service_account.os-service-account.id service_account_id = yandex_iam_service_account.os-service-account.id
depends_on = [
yandex_resourcemanager_folder_iam_member.os-global-editor,
yandex_resourcemanager_folder_iam_member.os-vpc-user
]
deletion_protection = false deletion_protection = false
allocation_policy { allocation_policy {
@@ -66,26 +72,6 @@ resource "yandex_compute_instance_group" "os-lamp-group" {
} }
} }
resource "yandex_lb_network_load_balancer" "os-lamp-balancer" {
name = "os-lamp-balancer"
listener {
name = "os-lamp-balancer-listener"
port = 80
}
attached_target_group {
target_group_id = yandex_compute_instance_group.os-lamp-group.id
healthcheck {
name = "os-lamp-balancer-healthcheck"
http_options {
port = 80
path = "/index2.html"
}
}
}
}
output "lamp-ips" { output "lamp-ips" {
value = { value = {
internalLamp = yandex_compute_instance_group.os-lamp-group.instances.*.network_interface.0.ip_address internalLamp = yandex_compute_instance_group.os-lamp-group.instances.*.network_interface.0.ip_address

View File

@@ -0,0 +1,48 @@
resource "yandex_lb_target_group" "os-lamp-balancer-group" {
name = "os-lamp-balancer-group"
region_id = "ru-central1"
target {
subnet_id = yandex_vpc_subnet.os-subnet.id
address = yandex_compute_instance_group.os-lamp-group.instances[0].network_interface[0].ip_address
}
target {
subnet_id = yandex_vpc_subnet.os-subnet.id
address = yandex_compute_instance_group.os-lamp-group.instances[1].network_interface[0].ip_address
}
target {
subnet_id = yandex_vpc_subnet.os-subnet.id
address = yandex_compute_instance_group.os-lamp-group.instances[2].network_interface[0].ip_address
}
}
resource "yandex_lb_network_load_balancer" "os-lamp-balancer" {
name = "os-lamp-balancer"
listener {
name = "os-lamp-balancer-listener"
port = 80
external_address_spec {
ip_version = "ipv4"
}
}
attached_target_group {
target_group_id = yandex_lb_target_group.os-lamp-balancer-group.id
healthcheck {
name = "os-lamp-balancer-healthcheck"
http_options {
port = 80
path = "/index2.html"
}
}
}
}
output "balancer-ips" {
value = {
external = [for listener in yandex_lb_network_load_balancer.os-lamp-balancer.listener: listener.external_address_spec.*.address].0[0]
}
}