diff --git a/src/homework/15-cloud-providers/15.2/readme.md b/src/homework/15-cloud-providers/15.2/readme.md index 486eb1f..3113752 100644 --- a/src/homework/15-cloud-providers/15.2/readme.md +++ b/src/homework/15-cloud-providers/15.2/readme.md @@ -31,7 +31,7 @@ * Назначить сервисному аккаунту роль `editor` ```terraform - resource "yandex_resourcemanager_folder_iam_member" "os-editor" { + resource "yandex_resourcemanager_folder_iam_member" "os-storage-editor" { folder_id = var.yandex_folder_id role = "storage.editor" member = "serviceAccount:${yandex_iam_service_account.os-service-account.id}" @@ -111,15 +111,15 @@ resource "yandex_storage_object" "cute-cat-picture" { } ``` -* Для создания виртуальных маши необходимо, чтобы сервисному аккаунту была назначена роль `editor`: +* Для создания виртуальных машин необходимо, чтобы сервисному аккаунту была назначена роль `editor`: -```terraform -resource "yandex_resourcemanager_folder_iam_member" "os-global-editor" { - folder_id = var.yandex_folder_id - role = "editor" - member = "serviceAccount:${yandex_iam_service_account.os-service-account.id}" -} -``` + ```terraform + resource "yandex_resourcemanager_folder_iam_member" "os-global-editor" { + folder_id = var.yandex_folder_id + role = "editor" + member = "serviceAccount:${yandex_iam_service_account.os-service-account.id}" + } + ``` > - Для создания стартовой веб-страницы рекомендуется использовать раздел `user_data` в [meta_data](https://cloud.yandex.ru/docs/compute/concepts/vm-metadata); > - Разместить в стартовой веб-странице шаблонной ВМ ссылку на картинку из bucket; @@ -128,16 +128,16 @@ resource "yandex_resourcemanager_folder_iam_member" "os-global-editor" { Таким образом, для начала необходимо создать файл конфигурации [cloud-config.yaml](./terraform/cloud-config.yaml) с содержимым: ```yaml ---- +#cloud-config write_files: - content: | ... - path: "/var/www/html/index.html" - owner: ubuntu:www-data - permissions: '0774' + path: "/var/www/html/index2.html" + owner: root:root + permissions: 0o664 ``` Здесь в content расположено содержимое html-файла, которое будет показано при запросе к web-серверу. @@ -151,8 +151,6 @@ metadata = { } ``` -// TODO `[PERMISSION_DENIED] Permission denied to folder b1gktcsaacdrp521naiv, folder b1gktcsaacdrp521naiv` - > - Настроить проверку состояния ВМ. Для настройки проверки состояния ВМ необходимо в конфигурацию группы добавить объект `healthcheck`: @@ -171,11 +169,52 @@ health_check { } ``` +Для проверки будет использована практика из [предыдущего домашнего задания](/src/homework/15-cloud-providers/15.1), +когда для подключения к машинам, которые не имеют выделенного внешнего ip-адреса используется дополнительная виртуальная машина, +доступная из-вне. + +Таким образом, необходимо выполнить команды и убедиться, что html-файл был создан и доступен: + +```shell +ssh -J ubuntu@ ubuntu@ +curl http://localhost/index2.html +``` + +```text + + +... + +``` + + > 3. Подключить группу к сетевому балансировщику: > - Создать сетевой балансировщик; // todo +```terraform +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" + } + } + } +} +``` + > - Проверить работоспособность, удалив одну или несколько ВМ. // todo diff --git a/src/homework/15-cloud-providers/15.2/terraform/cloud-config.yaml b/src/homework/15-cloud-providers/15.2/terraform/cloud-config.yaml index 678b063..e156014 100644 --- a/src/homework/15-cloud-providers/15.2/terraform/cloud-config.yaml +++ b/src/homework/15-cloud-providers/15.2/terraform/cloud-config.yaml @@ -1,4 +1,4 @@ ---- +#cloud-config write_files: - content: | @@ -18,6 +18,8 @@ write_files: - path: "/var/www/html/index.html" - owner: ubuntu:www-data - permissions: '0774' + path: "/var/www/html/index2.html" + owner: root:root + permissions: 0o664 +runcmd: + - mkdir /run/mydir diff --git a/src/homework/15-cloud-providers/15.2/terraform/lamp.tf b/src/homework/15-cloud-providers/15.2/terraform/lamp.tf index a66f9cf..55c4723 100644 --- a/src/homework/15-cloud-providers/15.2/terraform/lamp.tf +++ b/src/homework/15-cloud-providers/15.2/terraform/lamp.tf @@ -66,7 +66,27 @@ resource "yandex_compute_instance_group" "os-lamp-group" { } } -output "ips" { +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" { value = { internalLamp = yandex_compute_instance_group.os-lamp-group.instances.*.network_interface.0.ip_address } diff --git a/src/homework/15-cloud-providers/15.2/terraform/object_storage.tf b/src/homework/15-cloud-providers/15.2/terraform/object_storage.tf index 5dcef58..ea18fff 100644 --- a/src/homework/15-cloud-providers/15.2/terraform/object_storage.tf +++ b/src/homework/15-cloud-providers/15.2/terraform/object_storage.tf @@ -1,5 +1,5 @@ // Назначение роли сервисному аккаунту -resource "yandex_resourcemanager_folder_iam_member" "os-editor" { +resource "yandex_resourcemanager_folder_iam_member" "os-storage-editor" { folder_id = var.yandex_folder_id role = "storage.editor" member = "serviceAccount:${yandex_iam_service_account.os-service-account.id}" diff --git a/src/homework/15-cloud-providers/15.2/terraform/public_instance.tf b/src/homework/15-cloud-providers/15.2/terraform/public_instance.tf new file mode 100644 index 0000000..a6a0097 --- /dev/null +++ b/src/homework/15-cloud-providers/15.2/terraform/public_instance.tf @@ -0,0 +1,31 @@ +resource "yandex_compute_instance" "os-public-instance" { + name = "public-instance" + + resources { + cores = 2 + memory = 2 + } + + boot_disk { + initialize_params { + image_id = "fd8kdq6d0p8sij7h5qe3" # ubuntu-20-04-lts-v20220822 + size = "10" + } + } + + network_interface { + subnet_id = yandex_vpc_subnet.os-subnet.id + nat = true + } + + metadata = { + ssh-keys = "ubuntu:${file("~/.ssh/id_rsa.pub")}" + } +} + +output "public-ips" { + value = { + external = yandex_compute_instance.os-public-instance.network_interface.0.nat_ip_address + internal = yandex_compute_instance.os-public-instance.network_interface.0.ip_address + } +}