Выполнение домашнего задания по теме "7.2. Облачные провайдеры и синтаксис Terraform".
Q/A
Задание 1
Вариант с Yandex.Cloud. Регистрация в ЯО и знакомство с основами.
- Подробная инструкция на русском языке содержится здесь.
- Обратите внимание на период бесплатного использования после регистрации аккаунта.
- Используйте раздел "Подготовьте облако к работе" для регистрации аккаунта. Далее раздел "Настройте провайдер" для подготовки базового терраформ конфига.
- Воспользуйтесь инструкцией на сайте терраформа, что бы не указывать авторизационный токен в коде, а терраформ провайдер брал его из переменных окружений.
Установка и настройка yc, а также подключение к yandex.cloud подробно разобраны в домашнем задании 5.4.
Для хранения секретов будет использоваться файл .env, который должен быть инициализирован перед работой из примера .env.example.
Задание 2
Создание yandex_compute_instance через терраформ.
- В каталоге
terraformвашего основного репозитория, который был создан в начале курсе, создайте файлmain.tfиversions.tf.- Зарегистрируйте провайдер для yandex.cloud. Подробную инструкцию можно найти здесь.
- Внимание! В гит репозиторий нельзя пушить ваши личные ключи доступа к аккаунту. Поэтому в предыдущем задании мы указывали их в виде переменных окружения.
- В файле
main.tfвоспользуйтесь блокомdata "aws_amiдля поиска ami образа последнего Ubuntu.- В файле
main.tfсоздайте ресурс yandex_compute_image.- Если вы выполнили первый пункт, то добейтесь того, что бы команда
terraform planвыполнялась без ошибок.В качестве результата задания предоставьте:
- Ответ на вопрос: при помощи какого инструмента (из разобранных на прошлом занятии) можно создать свой образ ami?
- Ссылку на репозиторий с исходной конфигурацией терраформа.
Для регистрации провайдера yandex.cloud необходимо создать файл main.tf со следующим содержанием:
terraform {
required_providers {
yandex = {
source = "yandex-cloud/yandex"
}
}
required_version = ">= 0.13"
}
provider "yandex" {
token = "auth_token_here"
cloud_id = "cloud_id_here"
folder_id = "folder_id_here"
zone = "ru-central1-a"
}
Здесь конфигурация провайдера будет произведена из переменных окружений, поэтому значения в самом файле не будут реальными.
Следующим шагом необходимо инициализировать конфигурацию:
cd ./terraform \
&& env $(cat .env) terraform init
Для создания yandex_compute_image в main.tf необходимо добавить:
resource "yandex_vpc_network" "network-1" {
name = "network1"
}
resource "yandex_vpc_subnet" "subnet-1" {
name = "subnet1"
zone = "ru-central1-a"
network_id = yandex_vpc_network.network-1.id
v4_cidr_blocks = ["192.168.10.0/24"]
}
resource "yandex_compute_instance" "vm-1" {
name = "test-vm-1"
resources {
cores = 2
memory = 2
}
boot_disk {
initialize_params {
image_id = "fd81hgrcv6lsnkremf32" # ubuntu-20-04-lts-v20210908
}
}
network_interface {
subnet_id = yandex_vpc_subnet.subnet-1.id
nat = true
}
metadata = {
ssh-keys = "ubuntu:${file("~/.ssh/id_rsa.pub")}"
}
}
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
}
Здесь:
resource "yandex_vpc_network" "network-1"- создание сети, необходимой для соединения ВМ с внешними и внутренними ресурсами.resource "yandex_vpc_subnet" "subnet-1"- создание подсети внутри базовой сети с уже определёнными параметрами и пулом ip-адресов.resource "yandex_compute_instance" "vm-1"- создание виртуальной машиныinitialize_params { image_id = "fd81hgrcv6lsnkremf32" }идентификатор образа операционной системы. Идентификатор можно получить в выводе командыyc compute image list --folder-id standard-images, которая выводит список всех доступных базовых образов операционных систем.
output "internal_ip_address_vm_1"иoutput "external_ip_address_vm_1"- сохранение данных из объекта виртуальной машины для дальнейшего вывода.
Затем, необходимо выполнить следующую команду, чтобы проверить работоспособность конфигурации:
cd ./terraform \
&& env $(cat .env) terraform plan
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# yandex_compute_instance.vm-1 will be created
+ resource "yandex_compute_instance" "vm-1" {
<...>
Ответы
- При помощи какого инструмента (из разобранных на прошлом занятии) можно создать свой образ ami
Для создания своего образа операционной системы для виртуальной машины можно воспользоваться инструментом packer.