Yandex cloud виртуальная машина windows

Создание виртуальной машины в Яндекс.Облако

Виртуальная машина создается в одном из каталогов в вашем облаке и наследует права доступа от них. Переместить созданную виртуальную машину в другой каталог на данный момент невозможно.

Каждая виртуальная машина имеет уникальный идентификатор и имя. Имя уникально в рамках каталога. Идентификатор генерируется автоматически при создании виртуальной машины и уникален в пределах Яндекс.Облака.

При создании виртуальной машины можно выбрать, в какой из зон доступности Яндекс.Облака она будет размещена. Переместить виртуальную машину в другую зону доступности невозможно, но вы можете создать копию виртуальной машины в другой зоне доступности.

При создании виртуальной машины, вы указываете, сколько вычислительных ресурсов будет выделено машине: количество и производительность ядер процессора (vCPU), количество памяти (RAM). Вы можете выбрать подходящее количество вычислительных ресурсов из расчета планируемой нагрузки.

К виртуальной машине должен быть подключен как минимум один диск — загрузочный. На данный момент подключить загрузочный диск можно только при создании виртуальной машины.

Помимо этого к виртуальной машине можно подключать дополнительные диски. Вы можете подключить ранее созданный диск или создать диск вместе с виртуальной машиной. Новый диск можно создать пустым, восстановить из снимка или из образа.

Чтобы создать виртуальную машину:

  1. В консоли управления выберите каталог, в котором будет создана виртуальная машина.

  2. В списке сервисов выберите Compute Cloud.

  3. Нажмите кнопку Создать ВМ.

4. В блоке Базовые параметры:

  • Введите имя и описание ВМ.

  • Выберите зону доступности, в которой будет находиться виртуальная машина.

  • Выберите или создайте сервисный аккаунт. Использование сервисного аккаунта позволяет гибко настраивать права доступа к ресурсам.

5. В блоке Образы из Cloud Marketplace:

  • Выберите Windows.

  • Выберите версию и редакцию операционной системы.

6. В блоке Диски настройте загрузочный диск:

  • Укажите нужный размер диска.

  • Выберите тип диска.

7. В блоке Вычислительные ресурсы:

  • Выберите платформу.

  • Укажите гарантированную долю и необходимое количество vCPU, а также объем RAM.

  • При необходимости сделайте виртуальную машину прерываемой.

8. В блоке Сетевые настройки:

  • Укажите идентификатор подсети или выберите облачную сеть из списка. Если сети нет, нажмите кнопку Создать новую сеть и создайте ее:

  • В открывшемся окне укажите имя новой сети и выберите, к какой подсети необходимо подключить виртуальную машину. У каждой сети должна быть как минимум одна подсеть (если подсети нет, создайте ее). Затем нажмите кнопку Создать.

  • В поле Публичный адрес выберите способ назначения адреса:

  • Автоматически — чтобы назначить случайный IP-адрес из пула адресов Яндекс.Облака.

  • Список — чтобы выбрать публичный IP-адрес из списка зарезервированных заранее статических адресов. Подробнее читайте в разделе Сделать динамический публичный IP-адрес статическим.

  • Без адреса — чтобы не назначать публичный IP-адрес.

  • Выберите опцию защиты от DDoS-атак.

9. При создании виртуальной машины в операционной системе будет автоматически создан пользователь Administrator. В поле Пароль задайте пароль для этого пользователя, с которым можно будет войти на виртуальную машину по RDP.

Не используйте легко подбираемые пароли. Пароли должны соответствовать требованиям сложности политики безопасности Windows. В образах Windows Server от Яндекс.Облака у пароля пользователя Administrator по умолчанию не истекает срок действия.

10. Нажмите кнопку Создать ВМ.

Виртуальная машина появится в списке. При создании виртуальной машине назначаются IP-адрес и имя хоста (FQDN).

Создание виртуальной машины и инициализация операционной системы Windows занимают до 5 минут. Когда машина создана и готова к работе, она получает статус RUNNING. Вы можете следить за статусами машин в списке виртуальных машин вашего каталога.

Для подключения к виртуальной машине Windows:

  1. Нажмите Пуск.

  2. В поле поиска введите Подключение к удаленному рабочему столу и выберите соответствующий пункт.

  3. В окне Подключение к удаленному рабочему столу в поле Компьютер введите публичный IP-адрес виртуальной машины, к которой необходимо подключиться.

  4. Нажмите кнопку Подключиться.

  5. Укажите параметры учетной записи:

  • Имя пользователя: Administrator.

  • Пароль: пароль, который вы задали при создании виртуальной машины.

  1. Нажмите кнопку ОК.

Provide feedback

Saved searches

Use saved searches to filter your results more quickly

Sign up

Appearance settings

Время на прочтение6 мин

Количество просмотров10K

Зачем собирать образ с помощью Packer?

  1. Время создания инстанса из готового образа значительно меньше, чем время, которое нужно затратить с нуля на подготовку виртуальной машины к работе. Это достаточно критичный момент, так как порой очень важно ввести в работу новый инстанс нужного типа за кратчайшее время для того, чтобы начать пускать на него трафик.
  2. Помимо того что образ виртуальной машины для DEV, TEST, Staging окружений, он всегда будет соответствовать по набору ПО и его настройкам тому серверу, который используется в production. Важность этого момента трудно недооценить — крайне желательно, чтобы деплой нового кода на продакшн привел к тому, чтобы сайт продолжал корректную работу с новой функциональностью, а не упал из-за какой-то ошибки, связанной с недостающим модулем или отсутствующим ПО.
  3. Автоматизация сборки production- и development-окружений экономит время системного администратора. В глазах работодателя это также должно быть несомненным плюсом, так как это означает, что за то же время администратор сможет выполнить больший объем работы.
  4. Время для тестирования набора ПО, его версий, его настроек. Когда мы подготавливаем новый образ заранее, у нас есть возможность (и, что самое главное, время!) для того, чтобы спокойно и вдумчиво проанализировать различные ошибки, которые возникли при сборке образа, и исправить их. Также есть время для тестирования работы приложения на собранном образе и внесения каких-то настроек для оптимизации приложений. В случае же, если мы настраиваем инстанс, который нужно было ввести в работу еще вчера, все возникающие ошибки, как правило, исправляются по факту их возникновения уже на работающей системе — конечно же, это не совсем правильный подход.

Более подробно можете прочитать про packer здесь.

В процессе сборки запускается Ansible, который устанавливает обновления Windows. С помощью ansible гораздо проще управлять установкой приложений, настройкой Windows чем Powershell. Подробнее про использование ansible и windows здесь.

В посте описаны ошибки, которые вы можете получить, и их решение.

Готовый работе репозиторий: https://github.com/patsevanton/packer-windows-with-update-ansible-yandex-cloud

Установка необходимых пакетов

sudo apt update
sudo apt install git jq python3-pip -y

Устанавливаем ansible pywinrm

sudo pip3 install ansible pywinrm

Устанавливаем коллекцию ansible.windows

ansible-galaxy collection install ansible.windows

Установка Packer.

Необходимо установить Packer по инструкции с официального сайта https://learn.hashicorp.com/tutorials/packer/get-started-install-cli

Установка Yandex.Cloud CLI

https://cloud.yandex.com/en/docs/cli/quickstart#install

curl https://storage.yandexcloud.net/yandexcloud-yc/install.sh | bash

Загружаем обновленные настройки .bashrc без выхода из системы

source ~/.bashrc

Инициализация Yandex.Cloud CLI

yc init

Клонируем репозиторий с исходным кодом

git clone https://github.com/patsevanton/packer-windows-with-update-ansible-yandex-cloud.git
cd packer-windows-with-update-ansible-yandex-cloud

Скачиваем ConfigureRemotingForAnsible.ps1

wget https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1

Создайте сервисный аккаунт и передайте его идентификатор в переменную окружения, выполнив команды

yc iam service-account create --name <имя пользователя>
yc iam key create --service-account-name <имя пользователя> -o service-account.json
SERVICE_ACCOUNT_ID=$(yc iam service-account get --name <имя пользователя> --format json | jq -r .id)

В документации к Yandex Cloud параметр folder_id описывается как <имя_каталога>.

Получите folder_id из yc config list

Назначьте сервисному аккаунту роль admin в каталоге, где будут выполняться операции:

yc resource-manager folder add-access-binding <folder_id> --role admin --subject serviceAccount:$SERVICE_ACCOUNT_ID

Заполняем файл credentials.json.

    "folder_id": "<folder_id>",
    "password": "<Пароль для Windows>"

Заполняем credentials.json

Запускаем сборку образа

packer build -var-file credentials.json windows-ansible.json

Готовый образ можно будет найти в сервисе Compute Cloud на вкладке Образы.

Через Yandex Cloud CLI будет виден вот так.

yc compute image list
+----------------------+-------------------------------------+--------+----------------------+--------+
|          ID          |                NAME                 | FAMILY |     PRODUCT IDS      | STATUS |
+----------------------+-------------------------------------+--------+----------------------+--------+
| fd88ak25ivc8rn1e4bn7 | windows-server-2021-09-20t04-47-57z |        | f2e01pla7dr1fpbeihp9 | READY  |
+----------------------+-------------------------------------+--------+----------------------+--------+

Описание кода в user-data

При сборке образа сначала выполняется скрипты, описанные в user-data:
Установка пароля пользователя Administrator

net user Administrator {{user `password`}}

Удаление скриптов из директории C:\Program Files\Cloudbase Solutions\Cloudbase-Init\LocalScripts\

ls \"C:\\Program Files\\Cloudbase Solutions\\Cloudbase-Init\\LocalScripts\" | rm

Удаляет доверенные хосты службы WS-Management по адресу \Localhost\listener\listener*

Remove-Item -Path WSMan:\\Localhost\\listener\\listener* -Recurse

Удаляет сертификаты с локального сервера

Remove-Item -Path Cert:\\LocalMachine\\My\\*

Получает DNS имя из службы метаданных

$DnsName = Invoke-RestMethod -Headers @{\"Metadata-Flavor\"=\"Google\"} \"http://169.254.169.254/computeMetadata/v1/instance/hostname\"

Получает hostname имя из службы метаданных

$HostName = Invoke-RestMethod -Headers @{\"Metadata-Flavor\"=\"Google\"} \"http://169.254.169.254/computeMetadata/v1/instance/name\"

Получает сертификат из службы метаданных

$Certificate = New-SelfSignedCertificate -CertStoreLocation Cert:\\LocalMachine\\My -DnsName $DnsName -Subject $HostName

Создает новое значение HTTP в службе WS-Management по адресу \LocalHost\Listener c параметром Address *

New-Item -Path WSMan:\\LocalHost\\Listener -Transport HTTP -Address * -Force

Создает новое значение HTTPS в службе WS-Management по адресу \LocalHost\Listener c параметром Address *, HostName и Certificate

New-Item -Path WSMan:\\LocalHost\\Listener -Transport HTTPS -Address * -Force -HostName $HostName -CertificateThumbPrint $Certificate.Thumbprint

Добавляет в firewall правило разрешающее трафик на порт 5986

netsh advfirewall firewall add rule name=\"WINRM-HTTPS-In-TCP\" protocol=TCP dir=in localport=5986 action=allow profile=any

Тестирование и отладка

Для отладки запускаем packer с опцией debug

packer build -debug -var-file credentials.json windows-ansible.json

Но так как опция -debug требует потверждения на каждый шаг, для отладки добавляем конструкцию после шага, который нужно отладить, например, после запуска ansible.

{
    "type": "shell",
    "inline": [
        "sleep 9999999"
    ]
},

Отредактируем файл ansible/inventory. Проверим win_ping.

ansible windows -i ansible/test-inventory -m win_ping

Тестируем установку обновлений Windows без Packer

ansible-playbook -i ansible/test-inventory ansible/playbook.yml

Ошибки

Если не запустить ConfigureRemotingForAnsible.ps1 на Windows, то будет такая ошибка

basic: the specified credentials were rejected by the server

Если забыли установить «use_proxy» в false, то будет такая ошибка

basic: HTTPSConnectionPool(host=''127.0.0.1'', port=5986): Max retries exceeded with url: /wsman (Caused by NewConnectionError(''<urllib3.connection.VerifiedHTTPSConnection object at 0x7f555c2d07c0>: Failed to establish a new connection: [Errno 111] Connection refused''))

Если в таске Ensure the local user Administrator has the password specified for TEST\Administrator будет ошибка

requests.exceptions.HTTPError: 401 Client Error:  for url: https://xxx:5986/wsman
...
winrm.exceptions.InvalidCredentialsError: the specified credentials were rejected by the server

То вы забыли синхронизировать пароли в переменных pdc_administrator_password и ansible_password

Временный ansible inventory с именем /tmp/packer-provisioner-ansiblexxxx будет иметь вот такой вид:

default ansible_host=xxx.xxx.xxx.xxx ansible_connection=winrm ansible_winrm_transport=basic ansible_shell_type=powershell ansible_user=Administrator ansible_port=5986

Тестирование сборки Windows c Active Directory

Так же тестировал сборку Windows c Active Directory, используя Galaxy роль justin_p.pdc, но при запуске нового instance из собранного образа получал ошибку.
В комментариях написали что Running Sysprep on a domain controller is not supported

2021-09-18 19:34:31, Error SYSPRP ActionPlatform::LaunchModule: Failure occurred while executing 'CryptoSysPrep_Specialize' from C:\Windows\system32\capisp.dll; dwRet = 0x32
2021-09-18 19:34:31, Error SYSPRP SysprepSession::ExecuteAction: Failed during sysprepModule operation; dwRet = 0x32
2021-09-18 19:34:31, Error SYSPRP SysprepSession::ExecuteInternal: Error in executing action for Microsoft-Windows-Cryptography; dwRet = 0x32
2021-09-18 19:34:31, Error SYSPRP SysprepSession::Execute: Error in executing actions from C:\Windows\System32\Sysprep\ActionFiles\Specialize. xml; dwRet = 0x32
2021-09-18 19:34:31, Error SYSPRP RunPlatformActions:Failed while executing Sysprep session actions; dwRet = 0x32
2021-09-18 19:34:31, Error [0x060435] IBS Callback_Specialize: An error occurred while either deciding if we need to specialize or while specializing; dwRet = 0x32

Немного рекламы: На платформе https://rotoro.cloud/ вы можете найти курсы с практическими занятиями:

  • Ansible для начинающих + практический опыт
  • Certified Kubernetes Administrator (CKA) + практический опыт
  • Docker для начинающих + практический опыт
  • Kubernetes для начинающих + практический опыт
  • Terraform для начинающих + практический опыт
  • Практика для вхождения в IT (Linux, Docker, git, Jenkins)

Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку

В документации Yandex Cloud есть 2 полезные статьи на тему начала работы с интерфейсом командной строки и Terraform. Приведу обе, так как у вас может быть как Windows или Linux, так и MacOS

https://yandex.cloud/ru/docs/cli/quickstart

https://yandex.cloud/ru/docs/tutorials/infrastructure-management/terraform-quickstart

После установки Yandex Cloud CLI и Terraform давайте представим, что у нас есть задача создать виртуальные машины для установки Kubernetes кластера — 1 master и 4 worker ноды.

Создадим 2 файла

nano main.tf

terraform {
  required_providers {
    yandex = {
      source = "yandex-cloud/yandex"
    }
  }
  required_version = ">= 0.13"
}

provider "yandex" {
  token     = var.yandex_token
  folder_id = var.yandex_folder_id
  cloud_id  = "xxx"
  zone      = "ru-central1-a"
}

data "yandex_compute_image" "ubuntu" {
  family = "ubuntu-2004-lts"
}

resource "yandex_compute_instance" "master" {
  name = "master"
  zone = "ru-central1-a"
  boot_disk {
    initialize_params {
      image_id = data.yandex_compute_image.ubuntu.id
    }
  }
  network_interface {
    subnet_id = var.subnet_id
    nat       = true
    ipv6      = false
  }
  metadata = {
    ssh-keys = "ubuntu:${file("~/.ssh/id_rsa.pub")}"
  }
  resources {
    cores  = 2
    memory = 4
  }
}

resource "yandex_compute_instance" "worker" {
  count = 4
  name  = "worker-${count.index}"
  zone  = "ru-central1-a"
  boot_disk {
    initialize_params {
      image_id = data.yandex_compute_image.ubuntu.id
    }
  }
  network_interface {
    subnet_id = var.subnet_id
    nat       = true
    ipv6      = false
  }
  metadata = {
    ssh-keys = "ubuntu:${file("~/.ssh/id_rsa.pub")}"
  }
  resources {
    cores  = 2
    memory = 2
  }
}

resource "yandex_vpc_network" "network" {
  name = "network"
}

resource "yandex_vpc_subnet" "subnet" {
  name           = "subnet"
  zone           = "ru-central1-a"
  network_id     = yandex_vpc_network.network.id
  v4_cidr_blocks = ["10.0.1.0/24"]
}

output "master_ip" {
  value = yandex_compute_instance.master.network_interface.0.ip_address
}

output "worker_ips" {
  value = [for instance in yandex_compute_instance.worker : instance.network_interface.0.ip_address]
}
nano variables.tf

variable "yandex_token" {
  type    = string
  default = "xxx"
}

variable "yandex_folder_id" {
  type    = string
  default = "xxx"
}

variable "network_id" {
  type    = string
  default = "xxx"
}

variable "subnet_id" {
  type    = string
  default = "xxx"
}

variable "service_account_id" {
  type    = string
  default = "xxx"
}

Вместо xxx соответственно ваши значения

Теперь запустим

terraform init

terraform plan

terraform apply

// вводим yes

Ждем и затем проверяем

Из полезных команд стоит отметить

terraform validate

Из возможных ошибок, если вы точно уверены, что конфигурация в порядке, обратите внимание на доступность зеркала от Yandex Cloud и блокировки со стороны HashiCorp.

Для того, чтобы уничтожить запущенные ресурсы

terraform destroy

// вводим yes

Как видите, с Terraform разворачивать инфраструктуру становится гораздо легче.

Конечно, это очень простой пример, но для базового понимания того, зачем и почему нужно использовать Terraform его вполне хватит.

Как подготовить виртуальную машину из яндекс.облака для возможности быстро развернуть тестовую копию сайта на Битрикс или установить шаблон с 0?

Необходимо выполнить несколько шагов:

1. Заходим в яндекс.облако в раздел Compute Cloud, нажимаем «Создать ВМ»

Compute Cloud, нажимаем

2. При создании Виртуальной машины выбираем установку Centos 7 —

выбираем установку Centos 7

Остальные параметры виртуальной машины устанавливаете на свое усмотрение, рекомендуем не менее 2 ГБ RAM для более стабильной работы CMS.

3. Важный момент — необходимо при создании указать публичный ключ, созданный на системе, через которую вы будете управлять виртуальной машиной.

указываем публичный SSH ключ

Подробная инструкция — https://cloud.yandex.ru/docs/compute/operations/vm-connect/ssh#creating-ssh-keys

4. После создания виртуальной машины у нее появится IP адрес, выложен вот здесь —

После создания виртуальной машины у нее появится IP адрес

Этот адрес необходимо использовать для подключения к консоли виртуальной машины. Для этого можно использовать утилиту ssh в Linux и macOS и программу PuTTY для Windows.

Пример команды для подключения

$ ssh <имя_пользователя>@<публичный_IP-адрес_виртуальной машины> 

5. После подключения необходимо установить следующие программы. Программы устанавливаются

 sudo yum install НАЗВАНИЕ

5.1 mc (для удобства перехода по папкам)

5.2 vim (для редактирования файлов)

5.3 wget (для скачивания файлов)

5.4 firewalld (для безопасности, в сборке centos от яндекса он не установлен. Также смотрите примечание внизу страницы)

 sudo yum install firewalld 
sudo systemctl enable firewalld 
sudo reboot 

6.После чего копируем с сайта битрикс актуальную ссылку для разворачивания виртуальной машины Битрикс (можно найти на этой странице http://www.1c-bitrix.ru/download/vmbitrix.php), сейчас актуальная команда для разворачивания выглядит так

sudo wget http://repos.1c-bitrix.ru/yum/bitrix-env.sh && sudo chmod +x bitrix-env.sh && sudo ./bitrix-env.sh

Это занимает время до 15-25 минут.

7. Вводим в браузере публичный IP машины, созданной в яндекс.облаке, и видим штатный установщик Битрикс. Делаем выбор, устаналивать ли битрикс с 0 или же восстанавливать резервную копию.

8. Возвращаемся в консоль и делаем еще ряд важных действий:

8.1. Делаем папку с файлами сайта ВМ Битрикс доступными для редактирования по ФТП — необходимо ввести команду

 sudo chmod 755 -R /home/bitrix/www/  

8.2.Устанавливаем возможность доступа по ФТП следующей последовательностью команд

sudo yum -y install epel-release
sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
sudo yum -y update
sudo yum install -y proftpd openssl proftpd-utils
sudo service proftpd start
sudo chkconfig proftpd on

8.3 Создаем пользователя, который будет иметь доступ к файлам по ФТП

 
sudo adduser ftpuser -g600 -o -u600 -d /home/bitrix/www/
sudo passwd ftpuser

где ftpuser — это имя пользователя

8.4 Открываем доступ в сеть по ФТП — Редактируем файл /etc/sysconfig/iptables через любой редактор, например, ранее установленный Вим

sudo vim /etc/sysconfig/iptables

где вставляем следующие строки

-A INPUT -p tcp -m tcp --sport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --sport 20 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 20,21,50000:50400 -j ACCEPT

Если вам необходима возможность подключаться к серверу в пассивном режиме, то откройте командой файл:

vim /etc/sysconfig/iptables-config

И добавьте ip_conntrack_ftp в IPTABLES_MODULES=»»

IPTABLES_MODULES="ip_conntrack_ftp"

9. Готово! Теперь у вас есть рабочий сайт на Битрикс на ВМ Яндекс.облака, к которому есть доступ по ФТП.

В качестве параметров подключения по ФТП необходимо указывать хост = публичный IP созданной ВМ машины Битрикс, логин и пароль — логин и пароль пользователя, созданного нами на шаге 8.3

P.S. Важный момент! На момент написания статьи, при установке Битрикс по скрипту (версия ВМ 7.4.1) происходило автоматическое удаление ранее установленного firewalld. Система остается работать только через iptables. Но — если не был установлен firewalld до этого — система всегда будет перезаписывать ваши правила в iptables! В итоге не сможет стабильно работать не только FTP , но и встроенные системы мониторинга Битрикс!
Поэтому очень важно обязательно установить firewalld перед установкой виртуальной машины битрикс!

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Запуск windows 2012 в безопасном режиме
  • 2 gis для windows
  • Git bash add ssh key windows
  • Как установить windows server 2003 на компьютер
  • Сервер тонких клиентов на windows server