Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a: ✔️ máquinas virtuales Linux ✔️ conjuntos de escalado flexibles
En un tutorial anterior, ha aprendido cómo acceder mediante SSH a una máquina virtual y a instalar NGINX de forma manual. Para crear máquinas virtuales de manera rápida y coherente, alguna forma de automatización suele ser deseable. Un enfoque común para personalizar una máquina virtual en el primer arranque es usar el comando cloud-init. En este tutorial, aprenderá a:
- Crear un archivo de configuración cloud-init
- Crear una máquina virtual que usa un archivo cloud-init
- Ver una aplicación Node.js en ejecución una vez creada la máquina virtual
- Usar Key Vault para almacenar de forma segura certificados
- Automatizar implementaciones seguras de NGINX con cloud-init
Si decide instalar y usar la CLI localmente, en este tutorial es preciso que ejecute la CLI de Azure de la versión 2.0.30, u otra posterior. Ejecute az --version
para encontrar la versión. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure.
Introducción a cloud-init
cloud-init es un enfoque ampliamente usado para personalizar una máquina virtual Linux la primera vez que se arranca. Puede usar cloud-init para instalar paquetes y escribir archivos o para configurar los usuarios y la seguridad. Como cloud-init se ejecuta durante el proceso de arranque inicial, no hay pasos adicionales o agentes requeridos que aplicar a la configuración.
cloud-init también funciona entre distribuciones. Por ejemplo, no use apt-get install o yum install para instalar un paquete. En su lugar, puede definir una lista de paquetes que se van a instalar. Cloud-init usará automáticamente la herramienta de administración de paquetes nativos para la distribución de Linux (distro) que seleccione.
Trabajamos con nuestros asociados para que cloud-init se incluya y funcione en las imágenes que estos proporcionan a Azure. Para obtener información detallada sobre la compatibilidad de cloud-init con cada distribución, consulte Compatibilidad con cloud-init para máquinas virtuales en Azure.
Creación de un archivo de configuración cloud-init
Para ver cloud-init en acción, cree una máquina virtual que instale NGINX y ejecute una aplicación Node.js sencilla "Hello World". La siguiente configuración de cloud-init instala los paquetes necesarios, crea una aplicación Node.js y, a continuación, inicializa e inicia la aplicación.
En el símbolo del sistema de bash o en Cloud Shell, cree un archivo denominado cloud-init.txt y pegue la siguiente configuración. Por ejemplo, escriba sensible-editor cloud-init.txt
para crear el archivo y ver una lista de editores disponibles. Asegúrese de que todo el archivo cloud-init se copia correctamente, especialmente la primera línea:
#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
Para más información sobre las opciones de configuración de cloud-init, consulte los ejemplos de configuración de cloud-init.
Crear máquina virtual
Antes de poder crear una máquina virtual, cree un grupo de recursos con az group create. En el ejemplo siguiente se crea un grupo de recursos. En estos comandos, se anexa un sufijo aleatorio al grupo de recursos y a los nombres de máquina virtual para evitar colisiones de nombres durante las implementaciones repetidas.
export RANDOM_SUFFIX=$(openssl rand -hex 3)
export RESOURCE_GROUP="myResourceGroupAutomate$RANDOM_SUFFIX"
export REGION="eastus2"
az group create --name $RESOURCE_GROUP --location $REGION
Resultados:
{
"id": "/subscriptions/xxxxx-xxxxx-xxxxx-xxxxx/resourceGroups/myResourceGroupAutomatexxx",
"location": "eastus",
"managedBy": null,
"name": "myResourceGroupAutomatexxx",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}
Ahora cree una máquina virtual con el comando az vm create. Use el parámetro --custom-data
para pasar su archivo de configuración cloud-init. Proporcione la ruta de acceso completa a la configuración de cloud-init.txt si guardó el archivo fuera de su directorio de trabajo actual. En el ejemplo siguiente se crea una máquina virtual; Tenga en cuenta que el nombre de la máquina virtual también se anexa con el sufijo aleatorio.
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
Resultados:
{
"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": ""
}
Transcurren unos minutos hasta que la máquina virtual se crea, los paquetes se instalan y la aplicación se inicia. Hay tareas en segundo plano que continúan ejecutándose después de que la CLI de Azure vuelve a abrir el símbolo del sistema. Es posible que tenga que esperar otros dos minutos antes de poder acceder a la aplicación. Cuando se haya creado la máquina virtual, anote el valor publicIpAddress
mostrado por la CLI de Azure. Esta dirección se usa para acceder a la aplicación Node.js mediante un explorador web.
Para permitir que el tráfico web llegue a la máquina virtual, abra el puerto 80 desde Internet con el comando az vm open-port:
az vm open-port --port 80 --resource-group $RESOURCE_GROUP --name $VM_NAME
Resultados:
{
"endpoints": [
{
"name": "80",
"protocol": "tcp",
"publicPort": 80,
"privatePort": 80
}
],
"id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupAutomatexxx/providers/Microsoft.Compute/virtualMachines/myAutomatedVMxxx",
"location": "eastus",
"name": "myAutomatedVMxxx"
}
Prueba de la aplicación web
Ahora puede abrir un explorador web y escribir la dirección IP pública en la barra de direcciones. Proporcione su propia dirección IP pública obtenida del proceso de creación de la máquina virtual. Su aplicación Node.js se muestra como en el ejemplo siguiente:
Pasos siguientes
En este tutorial, ha configurado las máquinas virtuales en el primer inicio con cloud-init. Ha aprendido a:
- Crear un archivo de configuración cloud-init
- Crear una máquina virtual que usa un archivo cloud-init
- Ver una aplicación Node.js en ejecución una vez creada la máquina virtual
- Usar Key Vault para almacenar de forma segura certificados
- Automatizar implementaciones seguras de NGINX con cloud-init
Avanzar al siguiente tutorial para aprender a crear imágenes de máquina virtual personalizadas.