homework 15.2: fix part 2 of task 1

This commit is contained in:
2023-02-08 11:13:27 +07:00
parent 11c7275b96
commit e197b5e0ff
5 changed files with 113 additions and 21 deletions

View File

@@ -31,7 +31,7 @@
* Назначить сервисному аккаунту роль `editor` * Назначить сервисному аккаунту роль `editor`
```terraform ```terraform
resource "yandex_resourcemanager_folder_iam_member" "os-editor" { resource "yandex_resourcemanager_folder_iam_member" "os-storage-editor" {
folder_id = var.yandex_folder_id folder_id = var.yandex_folder_id
role = "storage.editor" role = "storage.editor"
member = "serviceAccount:${yandex_iam_service_account.os-service-account.id}" member = "serviceAccount:${yandex_iam_service_account.os-service-account.id}"
@@ -111,7 +111,7 @@ resource "yandex_storage_object" "cute-cat-picture" {
} }
``` ```
* Для создания виртуальных маши необходимо, чтобы сервисному аккаунту была назначена роль `editor`: * Для создания виртуальных машин необходимо, чтобы сервисному аккаунту была назначена роль `editor`:
```terraform ```terraform
resource "yandex_resourcemanager_folder_iam_member" "os-global-editor" { resource "yandex_resourcemanager_folder_iam_member" "os-global-editor" {
@@ -128,16 +128,16 @@ resource "yandex_resourcemanager_folder_iam_member" "os-global-editor" {
Таким образом, для начала необходимо создать файл конфигурации [cloud-config.yaml](./terraform/cloud-config.yaml) с содержимым: Таким образом, для начала необходимо создать файл конфигурации [cloud-config.yaml](./terraform/cloud-config.yaml) с содержимым:
```yaml ```yaml
--- #cloud-config
write_files: write_files:
- content: | - content: |
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
... ...
</html> </html>
path: "/var/www/html/index.html" path: "/var/www/html/index2.html"
owner: ubuntu:www-data owner: root:root
permissions: '0774' permissions: 0o664
``` ```
Здесь в content расположено содержимое html-файла, которое будет показано при запросе к web-серверу. Здесь в content расположено содержимое html-файла, которое будет показано при запросе к web-серверу.
@@ -151,8 +151,6 @@ metadata = {
} }
``` ```
// TODO `[PERMISSION_DENIED] Permission denied to folder b1gktcsaacdrp521naiv, folder b1gktcsaacdrp521naiv`
> - Настроить проверку состояния ВМ. > - Настроить проверку состояния ВМ.
Для настройки проверки состояния ВМ необходимо в конфигурацию группы добавить объект `healthcheck`: Для настройки проверки состояния ВМ необходимо в конфигурацию группы добавить объект `healthcheck`:
@@ -171,11 +169,52 @@ health_check {
} }
``` ```
Для проверки будет использована практика из [предыдущего домашнего задания](/src/homework/15-cloud-providers/15.1),
когда для подключения к машинам, которые не имеют выделенного внешнего ip-адреса используется дополнительная виртуальная машина,
доступная из-вне.
Таким образом, необходимо выполнить команды и убедиться, что html-файл был создан и доступен:
```shell
ssh -J ubuntu@<public-ips.external> ubuntu@<lamp-ips.internalLamp>
curl http://localhost/index2.html
```
```text
<!DOCTYPE html>
<html lang="en">
...
</html>
```
> 3. Подключить группу к сетевому балансировщику: > 3. Подключить группу к сетевому балансировщику:
> - Создать сетевой балансировщик; > - Создать сетевой балансировщик;
// todo // 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 // todo

View File

@@ -1,4 +1,4 @@
--- #cloud-config
write_files: write_files:
- content: | - content: |
<!DOCTYPE html> <!DOCTYPE html>
@@ -18,6 +18,8 @@ write_files:
</div> </div>
</body> </body>
</html> </html>
path: "/var/www/html/index.html" path: "/var/www/html/index2.html"
owner: ubuntu:www-data owner: root:root
permissions: '0774' permissions: 0o664
runcmd:
- mkdir /run/mydir

View File

@@ -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 = { 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

@@ -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 folder_id = var.yandex_folder_id
role = "storage.editor" role = "storage.editor"
member = "serviceAccount:${yandex_iam_service_account.os-service-account.id}" member = "serviceAccount:${yandex_iam_service_account.os-service-account.id}"

View File

@@ -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
}
}