Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: ✔️ Виртуальные машины Linux ✔️ Гибкие масштабируемые наборы
В рамках предыдущего руководства вы узнали, как применить протокол SSH к виртуальной машине и установить nginx. Для быстрого и согласованного создания виртуальных машин, как правило, применяются средства автоматизации. Наиболее распространенный подход к настройке виртуальной машины при первой загрузке — использование cloud-init. Из этого руководства вы узнаете, как выполнить следующие задачи:
- создать файл конфигурации cloud-init;
- создать виртуальную машину, использующую файл конфигурации cloud-init;
- просмотреть выполняющееся приложение Node.js после создания виртуальной машины;
- обеспечить безопасное хранение сертификатов в хранилище ключей;
- автоматизировать безопасные развертывания nginx с помощью файла конфигурации cloud-init.
Если вы решили установить и использовать интерфейс командной строки локально, то для работы с этим руководством вам понадобится Azure CLI 2.0.30 или более поздней версии. Чтобы узнать версию, выполните команду az --version
. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.
Обзор cloud-Init
Пакет cloud-init — широко используемое средство, используемое для настройки виртуальной машины Linux при ее первой загрузке. Вы можете использовать cloud-init для установки пакетов, записи файлов или настройки пользователей и параметров безопасности. Так как cloud-init выполняется при начальной загрузке, для применения вашей конфигурации не требуются какие-либо дополнительные действия или обязательные агенты.
Кроме того, cloud-init работает с разными дистрибутивами. Например, для установки пакета не используется apt-get install или yum install. Вместо этого можно определить список пакетов для установки. Файл cloud-init автоматически использует собственный инструмент управления пакетами из выбранного дистрибутива.
Мы и наши партнеры работаем над тем, чтобы сценарии cloud-init были добавлены в образы, предоставляемые для Azure. Подробные сведения о поддержке cloud-init для каждого дистрибутива см. в статье Поддержка cloud-init для виртуальных машин в Azure.
Создание файла конфигурации cloud-init
Чтобы посмотреть, как работает cloud-init, создайте виртуальную машину для установки сервера NGINX и запуска простого приложения Node.js Hello World. Следующая конфигурация cloud-init устанавливает необходимые пакеты, создает Node.js приложение, а затем инициализирует и запускает приложение.
В командной строке Bash или в Cloud Shell создайте файл с именем cloud-init.txt и добавьте в него следующую конфигурацию. Например, введите sensible-editor cloud-init.txt
, чтобы создать файл и просмотреть список доступных редакторов. Убедитесь, что весь файл cloud-init скопирован правильно, особенно первая строка:
#cloud-config
package_upgrade: true
packages:
- nginx
- nodejs
- npm
write_files:
- owner: www-data:www-data
path: /etc/nginx/sites-available/default
defer: true
content: |
server {
listen 80;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
- owner: azureuser:azureuser
path: /home/azureuser/myapp/index.js
defer: true
content: |
var express = require('express')
var app = express()
var os = require('os');
app.get('/', function (req, res) {
res.send('Hello World from host ' + os.hostname() + '!')
})
app.listen(3000, function () {
console.log('Hello world app listening on port 3000!')
})
runcmd:
- service nginx restart
- cd "/home/azureuser/myapp"
- npm init
- npm install express -y
- nodejs index.js
Чтобы узнать больше о параметрах конфигурации cloud-init, ознакомьтесь с примерами конфигурации cloud-init.
Создать виртуальную машину
Прежде чем создать виртуальную машину, выполните команду az group create, чтобы создать группу ресурсов. В следующем примере создается группа ресурсов. В этих командах случайный суффикс добавляется в группу ресурсов и имена виртуальных машин, чтобы предотвратить столкновения имен во время повторяющихся развертываний.
export RANDOM_SUFFIX=$(openssl rand -hex 3)
export RESOURCE_GROUP="myResourceGroupAutomate$RANDOM_SUFFIX"
export REGION="eastus2"
az group create --name $RESOURCE_GROUP --location $REGION
Результаты:
{
"id": "/subscriptions/xxxxx-xxxxx-xxxxx-xxxxx/resourceGroups/myResourceGroupAutomatexxx",
"location": "eastus",
"managedBy": null,
"name": "myResourceGroupAutomatexxx",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}
Теперь создайте виртуальную машину командой az vm create. Используйте параметр --custom-data
, чтобы передать файл конфигурации cloud-init. Укажите полный путь к конфигурации cloud-init.txt, если этот файл сохранен вне текущего рабочего каталога. В следующем примере создается виртуальная машина; обратите внимание, что имя виртуальной машины также добавляется случайным суффиксом.
export VM_NAME="myAutomatedVM$RANDOM_SUFFIX"
az vm create \
--resource-group $RESOURCE_GROUP \
--name $VM_NAME \
--image Ubuntu2204 \
--admin-username azureuser \
--generate-ssh-keys \
--custom-data cloud-init.txt
Результаты:
{
"fqdns": "",
"id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupAutomatexxx/providers/Microsoft.Compute/virtualMachines/myAutomatedVMxxx",
"location": "eastus",
"name": "myAutomatedVMxxx",
"powerState": "VM running",
"publicIpAddress": "x.x.x.x",
"resourceGroup": "myResourceGroupAutomatexxx",
"zones": ""
}
На создание виртуальной машины, установку пакетов и запуск приложения может потребоваться несколько минут. Некоторые фоновые задачи продолжают работу после возврата к командной строке в Azure CLI. Прежде чем вы получите доступ к приложению, может пройти несколько минут. Когда виртуальная машина будет создана, запишите значение publicIpAddress
, отображаемое Azure CLI. Это адрес для доступа к приложению Node.js через веб-браузер.
Чтобы разрешить передачу веб-трафика для виртуальной машины, откройте порт 80 для Интернета командой az vm open-port.
az vm open-port --port 80 --resource-group $RESOURCE_GROUP --name $VM_NAME
Результаты:
{
"endpoints": [
{
"name": "80",
"protocol": "tcp",
"publicPort": 80,
"privatePort": 80
}
],
"id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupAutomatexxx/providers/Microsoft.Compute/virtualMachines/myAutomatedVMxxx",
"location": "eastus",
"name": "myAutomatedVMxxx"
}
Тестирование веб-приложения
Теперь вы можете открыть веб-браузер и ввести общедоступный IP-адрес в адресной строке. Укажите собственный общедоступный IP-адрес, настроенный при создании виртуальной машины. Отобразится ваше приложение Node.js, как показано ниже:
Следующие шаги
В рамках этого руководства вы настроили виртуальные машины при первой загрузке с помощью файла конфигурации cloud-init. Вы научились выполнять следующие задачи:
- создать файл конфигурации cloud-init;
- создать виртуальную машину, использующую файл конфигурации cloud-init;
- просмотреть выполняющееся приложение Node.js после создания виртуальной машины;
- обеспечить безопасное хранение сертификатов в хранилище ключей;
- автоматизировать безопасные развертывания nginx с помощью файла конфигурации cloud-init.
Перейдите к следующему руководству, чтобы научиться создавать пользовательские образы виртуальных машин.