Развёртывание ресурсов с помощью Packer и Terraform
Кратко:
Развёртывание ресурсов с помощью Packer и Terraform
- С помощью Packer создайте образ виртуальной машины с ОС Ubuntu 22.04 и установленным веб-сервером NGINX.
- С помощью Terraform создайте:
- сеть с именем
from-terraform-network
, - подсеть с именем
from-terraform-subnet
в зоне доступностиru-central1-a
, и присвоить этой подсети диапазон адресов (CIDR) 10.2.0.0/16, - расположенную в этой подсети виртуальную машину с именем
from-terraform-vm
(два ядра vCPU, 2ГБ RAM, платформа Intel Broadwell) и присвоить ВМ публичный адрес; -
кластер управляемой базы данных PostgresSQL с именем
test-vm
(классs1.micro
, платформа Intel Icelake, SSD диск объёмом 10ГБ).Для создания виртуальной машины используйте образ, созданный на предыдущем шаге.
- сеть с именем
- Когда ресурсы будут созданы, запустите следующую команду для проверки задания:
гдеdocker run --rm cr.yandex/sol/edu-checker validate vm --token <TOKEN> --folder-id <FOLDER_ID>
<TOKEN>
— ваш IAM-токен, а<FOLDER_ID>
— идентификатор каталога, в котором вы работаете. - Если проверка пройдена успешно, то скопируйте ключ, вставьте его в поле ниже и нажмите кнопку Проверить.
Приступим к выполнению:
- Создадим образ виртуальной машины
- Создадим сервисный аккаунт на папку в облаке с достаточными правами (admin - самые большие привелегии для учебы)
- Установим CLI и проведем его инициализацию для работы через сервисный аккаунт
- Установим Terraform и настроим профиль CLI для выполнения операций от имени сервисного аккаунта
Обновление sudo apt update Установка unzip sudo apt install wget unzip Перейти в папку cd ~ Скачать terraform wget https://releases.hashicorp.com/terraform/0.x.x/terraform_0.x.x_linux_amd64.zip Распаковка unzip terraform_0.x.x_linux_amd64.zip Перемещение sudo mv terraform /usr/local/bin/ Активация chmod +x /usr/local/bin/terraform Проверка terraform -v
- Настроим провайдер
cat >> .terraformrc provider_installation { network_mirror { url = "https://terraform-mirror.yandexcloud.net/" include = ["registry.terraform.io/*/*"] } direct { exclude = ["registry.terraform.io/*/*"] } }
Файл
.terraformrc
должен располагаться в корне домашней папки пользователя, например,/home/user/
или/User/user/
. - Создайте фаил my-config.tf
cat >> my-config.tf Следующего содержания: terraform { required_providers { yandex = { source = "yandex-cloud/yandex" } } required_version = ">= 0.13" } provider "yandex" { token = "y1_Ag................................................................OA" cloud_id = "j......................................8" folder_id = "h.....................................6" zone = "ru-central1-a" } variable "image-id" { type = string } resource "yandex_compute_instance" "vm-1" { name = "from-terraform-vm" platform_id = "standard-v1" zone = "ru-central1-a" resources { cores = 2 memory = 2 } boot_disk { initialize_params { image_id = var.image-id } } network_interface { subnet_id = yandex_vpc_subnet.subnet-1.id nat = true } metadata = { ssh-keys = "ubuntu:${file("~/.ssh/id_ed25519.pub")}" } } resource "yandex_vpc_network" "network-1" { name = "from-terraform-network" } resource "yandex_vpc_subnet" "subnet-1" { name = "from-terraform-subnet" zone = "ru-central1-a" network_id = yandex_vpc_network.network-1.id v4_cidr_blocks = ["10.2.0.0/16"] } 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 } // Create a new MDB PostgreSQL Cluster. resource "yandex_mdb_postgresql_cluster" "my_cluster" { name = "test-vm" environment = "PRESTABLE" network_id = yandex_vpc_network.network-1.id config { version = 15 resources { resource_preset_id = "s1.micro" disk_type_id = "network-ssd" disk_size = 10 } postgresql_config = { max_connections = 395 enable_parallel_hash = true autovacuum_vacuum_scale_factor = 0.34 default_transaction_isolation = "TRANSACTION_ISOLATION_READ_COMMITTED" shared_preload_libraries = "SHARED_PRELOAD_LIBRARIES_AUTO_EXPLAIN,SHARED_PRELOAD_LIBRARIES_PG_HINT_PLAN" } } maintenance_window { type = "WEEKLY" day = "SAT" hour = 12 } host { zone = "ru-central1-a" subnet_id = yandex_vpc_subnet.subnet-1.id } } resource "yandex_mdb_postgresql_database" "my_db" { cluster_id = yandex_mdb_postgresql_cluster.my_cluster.id name = "db1" owner = yandex_mdb_postgresql_user.my_user.name lc_collate = "en_US.UTF-8" lc_type = "en_US.UTF-8" extension { name = "uuid-ossp" } extension { name = "xml2" } } resource "yandex_mdb_postgresql_user" "my_user" { cluster_id = yandex_mdb_postgresql_cluster.my_cluster.id name = "user1" password = "user1user1" }
- Создайте фаил my-variables.tfvars
cat >> my-variables.tfvars Следующего содержания указывающего на созданный образ диска parkerom: image-id = "f...................................k"
- Проведите инициализацию terraform
terraform init
- Проверьте спецификацию:
terraform plan -var-file=my-variables.tfvars
- Выполните спецификацию
-
terraform apply -var-file=my-variables.tfvars
- Запросите ключ
yc iam create-token
- Проверьте работу
docker run --rm cr.yandex/sol/edu-checker validate vm \ --token t1.3...............................................................nh \ --folder-id gg................................t6 PASS resource.yandex_vpc_network.network-1 PASS resource.yandex_vpc_subnet.subnet-1.name PASS resource.yandex_vpc_subnet.subnet-1.zone PASS resource.yandex_vpc_subnet.subnet-1.v4_cidr_blocks PASS name PASS zone PASS resources.core PASS resources.memory PASS network_interface.nat PASS server PASS resource.yandex_yandex_mdb_postgresql_cluster.test-vm PASS resource.yandex_yandex_mdb_postgresql_cluster.test-vm PASS resource.yandex_yandex_mdb_postgresql_cluster.test-vm +--------------------------------------------------------------------------------------------------+ | ACCEPTED | +--------------------------------------------------------------------------------------------------+ | Пожалуйста, скопируйте полученный ключ и отнесите его в блок с код-ревью в уроке. | | Итогом проверки ключа станет успешно принятое задание и возможность перейти к следующему модулю. | +--------------------------------------------------------------------------------------------------+ | TOKEN | +--------------------------------------------------------------------------------------------------+
- Категория: Cloud Services Engineer
- Просмотров: 47
Добавление данных в ClickHouse
Кратко:
- Создание кластера ClickHouse с конфигурациями burstable, b3-c1-m4, 10 ГБ сетевого хранилища.
- Загрузка данных о погоде в Москве и Санкт-Петербурге с рабочей станции.
- Создание таблицы weather с полями LocalDateTime, LocalDate, Month, Day, TempC, Pressure, RelHumidity, WindSpeed10MinAvg, VisibilityKm, City.
- Загрузка данных из файла в БД.
- Запуск команды docker для проверки задания: docker run --rm cr.yandex/sol/edu-checker validate clickhouse.
- Ввод параметров: <TOKEN>, <CLUSTER_HOST>, <DB_NAME>, <DB_USERNAME>, <DB_PASSWORD>.
- Если проверка прошла успешно, скопировать ключ проверки и нажать кнопку Проверить.
-
-
Добавление данных в ClickHouse
- Создайте кластер управляемой базы данных ClickHouse следующей конфигурации: тип хоста
burstable
, классb3-c1-m4
и стандартное сетевое хранилище размером 10 ГБ. - Сохраните на своей рабочей станции этот файл. Это уже известный вам датасет с данными о погоде в Москве и Санкт-Петербурге.
- Создайте в БД таблицу с именем
weather
, в которой есть следующие поля (в скобках указан тип данных): LocalDateTime (DateTime), LocalDate (Date), Month (Int8), Day (Int8), TempC (Float32), Pressure (Float32), RelHumidity (Int32), WindSpeed10MinAvg (Int32), VisibilityKm (Float32), City (String). - Загрузите данные из файла в БД.
- Для проверки задания запустите команду :
docker run --rm cr.yandex/sol/edu-checker validate clickhouse --token <TOKEN> --host <CLUSTER_HOST> --database <DB_NAME> --username <DB_USERNAME> --password <DB_PASSWORD>
где<TOKEN>
— ваш IAM-токен,<CLUSTER_HOST>
— идентификатор хоста кластера,<DB_NAME>
— имя созданной БД,<DB_USERNAME>
— имя пользователя БД,<DB_PASSWORD>
— пароль пользователя. - Если проверка пройдена успешно, то скопируйте ключ проверки, вставьте его в поле ниже и нажмите кнопку Проверить.
- Создайте кластер управляемой базы данных ClickHouse следующей конфигурации: тип хоста
-
К ClickHouse можно подключаться только с машины находящейся в том же кластере следовательно и проверку можно запускать только с неё для этого:
Создать машину и подключиться к ней по ssh:
ssh -l admin 88.165.156.65
Установить Docker на Ubuntu 24.04
sudo apt update
sudo apt upgrade
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt install docker-ce docker-ce-cli containerd.io
sudo docker run hello-world
sudo usermod -aG docker ${USER}
Перезапустить оболочку
id -nG
Подключиться к clickhouse
Установите сертификат:
sudo mkdir --parents /usr/local/share/ca-certificates/Yandex && \
sudo wget "https://storage.yandexcloud.net/cloud-certs/RootCA.pem" \
--output-document /usr/local/share/ca-certificates/Yandex/RootCA.crt && \
sudo wget "https://storage.yandexcloud.net/cloud-certs/IntermediateCA.pem" \
--output-document /usr/local/share/ca-certificates/Yandex/IntermediateCA.crt && \
sudo chmod 655 \
/usr/local/share/ca-certificates/Yandex/RootCA.crt \
/usr/local/share/ca-certificates/Yandex/IntermediateCA.crt && \
sudo update-ca-certificates
Подключите DEB-репозиторий ClickHouse:
sudo apt update && sudo apt install --yes apt-transport-https ca-certificates dirmngr && \
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 8919F6BD2B48D754 && \
echo "deb https://packages.clickhouse.com/deb stable main" | sudo tee \
/etc/apt/sources.list.d/clickhouse.list
Установите зависимости:
sudo apt update && sudo apt install --yes clickhouse-client
Загрузите файл конфигурации для clickhouse-client:
mkdir --parents ~/.clickhouse-client && \
wget "https://storage.yandexcloud.net/doc-files/clickhouse-client.conf.example" \
--output-document ~/.clickhouse-client/config.xml
Подключитесь к базе данных:
clickhouse-client --host rc1d-pt95llo56vdfpe56.mdb.yandexcloud.net \
--secure \
--user <username> \
--database <databasename> \
--port 9440 \
--ask-password
Для проверки успешности подключения выполните запрос:
SELECT version();
Перенесите скачанный файл на сетевую машину:
scp /home/administrator/weather_data.tsv Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript. :/home/admin/
Получите IAM токен:
yc iam create-token
С сетевой машины заполните таблицу в ClickHouse:
cat /home/admin/weather_data.tsv | clickhouse-client \
--host rc1d-pt94llo55vqfge89.mdb.yandexcloud.net \
--secure \
--user admin \
--database db1 \
--port 9440 \
-q "INSERT INTO db1.weather FORMAT TabSeparated" \
--ask-password
На сетевой машине запустите проверку:
sudo docker run --rm cr.yandex/sol/edu-checker validate clickhouse \
--token t1.9euelZrJy87IzsiLnI6SyJrMzpeXme3rnp......................................A \
--host rc1d-pt56lsd34vqfge56.mdb.yandexcloud.net \
--port 9440 \
--database db1 \
--username admin \
--password admin
- Категория: Cloud Services Engineer
- Просмотров: 58
Работа с объектным хранилищем
Кратко:
- Работа с объектным хранилищем на AWS S3.
- Создание бакета S3 и загрузка двух объектов: image01.dat и image02.dat.
- Добавление метаданных к обоим объектам: имя "patient" и значение "ivanov"; имя "status" и значение "ok".
- Изменение метаданных объекта image02.dat: значение "status" с "ok" на "ill".
- Создание временных ссылок на объекты image02.dat и image02.dat.
- Запуск команды для проверки задания: docker run --rm -v ~/.aws:/root/.aws cr.yandex/sol/edu-checker validate s3 --bucket <BUCKET_NAME>.
- Если проверка пройдена успешно, скопировать ключ проверки и вставить его для проверки
Работа с объектным хранилищем
- Создайте в объектном хранилище S3 бакет и загрузите в него два объекта:
image01.dat
иimage02.dat
. -
Добавьте к обоим объектам следующие метаданные:а) Метаданные с именем patient и значением ivanov.б) Метаданные с именем status и значением ok.
- Измените метаданные объекта
image02.dat
, заменив значение status с ok на ill. - Создайте временную ссылку на объект
image01.dat
. - Создайте временную ссылку на объект
image02.dat
. -
Для проверки задания запустите команду :
docker run --rm -v ~/.aws:/root/.aws cr.yandex/sol/edu-checker validate s3 --bucket <BUCKET_NAME>
где<BUCKET_NAME>
— имя созданного бакета. -
Если проверка пройдена успешно, то скопируйте ключ проверки, вставьте его в поле ниже и нажмите кнопку Проверить.
Порядок выполнения:
AWS CLI в Yandex Object Storage
Подготовьте облако к работе
Настройте сервисный аккаунт
Создайте бакет
aws s3 mb s3://<имя_бакета>
Загрузите объект в бакет
aws s3 cp <путь_к_локальному_файлу>/ s3://<имя_бакета>/<ключ_объекта>
aws s3 cp /home/administrator/1/image01.dat s3://<имя_бакета>
aws s3 cp /home/administrator/1/image02.dat s3://<имя_бакета>
Добавьте к обоим объектам следующие метаданные:
s3cmd modify \
--add-header=x-amz-meta-patient:ivanov \
--add-header=x-amz-meta-status:ok \
s3://<имя_бакета>/image01.dat \
s3://<имя_бакета>/image02.dat
модификация значения на ill
s3cmd modify \
--add-header=x-amz-meta-status:ill\
s3://<имя_бакета>/image02.dat
Получите ссылку на скачивание объекта
aws s3 presign s3://<имя_бакета>/<ключ_объекта> --expires-in <время_жизни>
aws s3 presign s3://<имя_бакета>/image01.dat --expires-in 3600
aws s3 presign s3://<имя_бакета>/image02.dat --expires-in 3600
Полученной ссылкой вы можете поделиться или использовать ее в своем сервисе для доступа к файлу.
- Категория: Cloud Services Engineer
- Просмотров: 46
Создание ВМ и балансировка нагрузки
Кратко:
- Создание двух виртуальных машин с веб-серверами NGINX на Ubuntu 22.04.
- Установка веб-серверов и изменение информационных страниц с приветствием "Welcome to the first test!".
- Добавление виртуальных машин в целевую группу test1.
- Создание балансировщика нагрузки test1-balancer и проверка состояния ВМ в целевой группе.
- Остановка одной из виртуальных машин для проверки доступности второй.
- Запуск команды для проверки задания: docker run --rm cr.yandex/sol/edu-checker validate balancer.
- Если проверка пройдена успешно, скопировать ключ проверки и нажать кнопку Проверить.
Создание ВМ и балансировка нагрузки
- Создайте две виртуальные машины (платформа Intel Ice Lake, 2 vCPU, 4ГБ RAM, 20ГБ SDD, ОС Ubuntu 22.04) c именами
test-vm1
иtest-vm2
. Установите на эти ВМ веб-серверы NGINX и измените информационные страницы веб-серверов так, чтобы на них в качестве приветствия выводилась фраза “Welcome to the first test!”. - Добавьте созданные ВМ в целевую группу
test1
. - Создайте балансировщик нагрузки
test1-balancer
и настройте проверку состояния ВМ в целевой группе. - Остановите одну из ВМ.
- Убедитесь, что вторая ВМ доступна.
- Когда ресурсы будут созданы, запустите следующую команду для проверки задания:
гдеdocker run --rm cr.yandex/sol/edu-checker validate balancer --token <TOKEN> --folder-id <FOLDER_ID>
<TOKEN>
— ваш IAM-токен,
аyc iam create-token
<FOLDER ID>
— идентификатор каталога, в котором вы работаете.Указать значение типа --folder-id с1сt2с23с4fсo5сfitс6
- Если проверка пройдена успешно, то скопируйте ключ проверки, вставьте его в поле ниже и нажмите кнопку Проверить.
--Создаем фаил startup.sh--
cat >> startup.sh
#!/bin/bash
apt-get update -q
apt-get install -y -q nginx
sed -i -- "s/Welcome to nginx/Welcome to the first test!/" /var/www/html/index.nginx-debian.html
systemctl enable nginx --now
--Создание облачной сети--
yc vpc network create \
--name my-yc-network \
--labels my-label=my-value \
--description "Моя облачная сеть"
yc vpc network list
--Создание подсетей--
yc vpc subnet create \
--name my-yc-subnet-a \
--zone ru-central1-a \
--range 10.1.2.0/24 \
--network-name my-yc-network \
--description "Моя облачная подсеть A"
yc vpc subnet create \
--name my-yc-subnet-b \
--zone ru-central1-b \
--range 10.2.2.0/24 \
--network-name my-yc-network \
--description "Моя облачная подсеть B"
yc vpc subnet create \
--name my-yc-subnet-d \
--zone ru-central1-d \
--range 10.3.2.0/24 \
--network-name my-yc-network \
--description "Моя облачная подсеть D"
--Создание машин--
yc compute instance create \
--name test-vm1 \
--zone ru-central1-a \
--memory 4 \
--cores 2 \
--create-boot-disk image-folder-id=standard-images,type=network-ssd,size=20,image-family=ubuntu-2404-lts-oslogin \
--network-interface subnet-name=my-yc-subnet-a,ipv4-address=auto,nat-ip-version=ipv4 \
--metadata-from-file user-data="startup.sh"
yc compute instance create \
--name test-vm2 \
--zone ru-central1-a \
--memory 4 \
--cores 2 \
--create-boot-disk image-folder-id=standard-images,type=network-ssd,size=20,image-family=ubuntu-2404-lts-oslogin \
--network-interface subnet-name=my-yc-subnet-a,ipv4-address=auto,nat-ip-version=ipv4 \
--metadata-from-file user-data="startup.sh"
--Создание балансировщика и целевой группы--
- Категория: Cloud Services Engineer
- Просмотров: 84
Введение
Кратко:
- Модуль представляет собой серию из шести практических заданий для получения сертификата и гранта.
- Задания знакомы учащимся, так как они изучали их на курсе.
- Для выполнения заданий требуется Docker, который нужно установить на рабочую станцию.
- В каждом задании предлагается решить практическую задачу, внимательно прочитав условие и выполнив необходимые шаги.
- Завершив задание, нужно запустить автоматическую проверку с помощью команды docker run --rm cr.yandex/sol/edu-checker validate.
- После проверки задания, если оно выполнено успешно, вы получите строки, начинающиеся со слова PASS, и ключ проверки.
- Если задание выполнено не полностью или неправильно, вы получите сообщение об ошибке.
- Получив сообщение об ошибке, нужно найти и исправить проблему, а затем скопировать ключ и вставить его в блок проверки кода на Практикуме.
- Выполнив все шесть заданий, нужно заполнить заявку на сертификат и грант в последнем уроке.
Введение
Что нужно для выполнения заданий
- Для прохождения этого модуля вам потребуется Docker. Установите его на рабочую станцию, с которой будете выполнять задания.
- В каждом из заданий вам будет предложено решить конкретную практическую задачу. Внимательно прочитайте условие и выполните все необходимые шаги. При необходимости вернитесь к соответствующим урокам курса или обратитесь к документации.
-
Завершив выполнение задачи, запустите автоматическую проверку с помощью команды вида:
docker run --rm cr.yandex/sol/edu-checker validate [command] [options]
Эта команда разворачивает Docker-контейнер, в котором запускается приложение, проверяющее полноту и правильность выполнения практического задания. Для этого, как правило, ему понадобится доступ к облаку, в котором вы выполняли задания. Доступ предоставляется с помощью IAM-токена, который надо записать в переменную окружения (помните, что время жизни этого токена составляет не больше 12 часов).Для каждого задания используется отдельная подкоманда (она будет указана в задании). Список подкоманд выводится с помощью параметра--help
или-h
.docker run --rm cr.yandex/sol/edu-checker validate vm --help
Чтобы посмотреть возможные параметры для каждой из подкоманд, также используйте параметр--help
(-h
), напримерdocker run --rm cr.yandex/sol/edu-checker validate vm --help
Полностью команда, запускающая проверку, выглядит, например, так:docker run --rm cr.yandex/sol/edu-checker validate vm --token <TOKEN> --folder-id <FOLDER_ID>
гдеvm
— подкоманда, обозначающая конкретное практическое задание (она будет указана в условии задания),<TOKEN>
— ваш IAM-токен,<FOLDER_ID>
— идентификатор рабочего каталога в вашем облаке. -
После запуска приложения вы увидите результат проверки.Если задание выполнено успешно, то приложение выведет в терминал строки, начинающиеся со слова
PASS
, а также ключ проверки.Если задание выполнено не полностью или неправильно, то вы получите сообщение об ошибке, показывающее, что именно пошло не так. Например, на картинке ниже проверку пройти не удалось, поскольку имя созданной ВМ не соответствует тому, которое было указано в условии задания.Получив сообщение со словомERROR
, вернитесь к заданию, чтобы найти и исправить проблему. -
Скопируйте полученный ключ и вставьте его в блок проверки кода в уроке на Практикуме. Нажмите кнопку Проверить.

- Вы получите сообщение о результатах проверки ключа и, если все в порядке, сможете перейти к следующему заданию.
- Пожалуйста, обратите внимание, что срок действия ключа проверки ограничен. Выполнив задание и получив ключ, не откладывайте его проверку на Практикуме надолго!
- Выполнив все шесть заданий, вы откроете последний урок, в котором сможете заполнить и направить нам заявку на сертификат и грант.
- Категория: Cloud Services Engineer
- Просмотров: 30