mirror of
https://github.com/Dannecron/netology-devops.git
synced 2025-12-25 15:22:37 +03:00
homework 15.2: fix part 2 of task 1
This commit is contained in:
@@ -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" {
|
||||
```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: |
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
...
|
||||
</html>
|
||||
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@<public-ips.external> ubuntu@<lamp-ips.internalLamp>
|
||||
curl http://localhost/index2.html
|
||||
```
|
||||
|
||||
```text
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
...
|
||||
</html>
|
||||
```
|
||||
|
||||
|
||||
> 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
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
---
|
||||
#cloud-config
|
||||
write_files:
|
||||
- content: |
|
||||
<!DOCTYPE html>
|
||||
@@ -18,6 +18,8 @@ write_files:
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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}"
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user