- Домашнее задание выполните в Google Docs и отправьте на проверку ссылку на ваш документ в личном кабинете.
- В названии файла укажите номер лекции и фамилию студента. Пример названия: 7.3. Подъём инфраструктуры в Yandex Cloud — Александр Александров.
- Перед отправкой проверьте, что доступ для просмотра открыт всем, у кого есть ссылка. Если нужно прикрепить дополнительные ссылки, добавьте их в свой Google Docs.
Вы можете прислать решение в виде ссылки на ваш репозийторий в GitHub, для этого воспользуйтесь шаблоном для домашнего задания.
Перед началом работы над дипломным заданием изучите Инструкция по экономии облачных ресурсов.
Выполните действия, приложите скриншот скриптов, скриншот выполненного проекта.
От заказчика получено задание: при помощи Terraform и Ansible собрать виртуальную инфраструктуру и развернуть на ней веб-ресурс.
В инфраструктуре нужна одна машина с ПО ОС Linux, двумя ядрами и двумя гигабайтами оперативной памяти.
Требуется установить nginx, залить при помощи Ansible конфигурационные файлы nginx и веб-ресурса.
Секретный токен от yandex cloud должен вводится в консоли при каждом запуске terraform.
Для выполнения этого задания нужно сгенирировать SSH-ключ командой ssh-keygen. Добавить в конфигурацию Terraform ключ в поле:
metadata = {
user-data = "${file("./meta.txt")}"
}
В файле meta прописать:
users:
- name: user
groups: sudo
shell: /bin/bash
sudo: ['ALL=(ALL) NOPASSWD:ALL']
ssh-authorized-keys:
- ssh-rsa xxx
Где xxx — это ключ из файла /home/"name_ user"/.ssh/id_rsa.pub. Примерная конфигурация Terraform:
terraform {
required_providers {
yandex = {
source = "yandex-cloud/yandex"
}
}
}
variable "yandex_cloud_token" {
type = string
description = "Данная переменная потребует ввести секретный токен в консоли при запуске terraform plan/apply"
}
provider "yandex" {
token = var.yandex_cloud_token #секретные данные должны быть в сохранности!! Никогда не выкладывайте токен в публичный доступ.
cloud_id = "xxx"
folder_id = "xxx"
zone = "ru-central1-a"
}
resource "yandex_compute_instance" "vm-1" {
name = "terraform1"
resources {
cores = 2
memory = 2
}
boot_disk {
initialize_params {
image_id = "fd87kbts7j40q5b9rpjr"
}
}
network_interface {
subnet_id = yandex_vpc_subnet.subnet-1.id
nat = true
}
metadata = {
user-data = "${file("./meta.txt")}"
}
}
resource "yandex_vpc_network" "network-1" {
name = "network1"
}
resource "yandex_vpc_subnet" "subnet-1" {
name = "subnet1"
zone = "ru-central1-b"
network_id = yandex_vpc_network.network-1.id
v4_cidr_blocks = ["192.168.10.0/24"]
}
output "internal_ip_address_vm_1" {
value = yandex_compute_instance.vm-1.network_interface.0.ip_address
}
output "external_ip_address_vm_1" {
value = yandex_compute_instance.vm-1.network_interface.0.nat_ip_address
}
В конфигурации Ansible указать:
- внешний IP-адрес машины, полученный из output external_ ip_ address_ vm_1, в файле hosts;
- доступ в файле plabook *yml поля hosts.
- hosts: 138.68.85.196
remote_user: user
tasks:
- service:
name: nginx
state: started
become: yes
become_method: sudo
Провести тестирование и приложить скриншоты развернутых в облаке ВМ, успешно отработавшего ansible playbook.
Их выполнение необязательное и не влияет на получение зачёта по домашнему заданию. Можете их решить, если хотите глубже и/или шире разобраться в материале.
Выполните действия, приложите скриншот скриптов, скриншот выполненного проекта.
- Перестроить инфраструктуру и добавить в неё вторую виртуальную машину.
- Установить на вторую виртуальную машину базу данных.
- Выполнить проверку состояния запущенных служб через Ansible.
Изучите инструкцию yandex для terraform. Добейтесь работы паплайна с безопасной передачей токена от облака в terraform через переменные окружения. Для этого:
- Настройте профиль для yc tools по инструкции.
- Удалите из кода строчку "token = var.yandex_cloud_token". Terraform будет считывать значение ENV переменной YC_TOKEN.
- Выполните команду export YC_TOKEN=$(yc iam create-token) и в том же shell запустите terraform.
- Для того чтобы вам не нужно было каждый раз выполнять export - добавьте данную команду в самый конец файла ~/.bashrc
Дополнительные материалы: