Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: ✔️ Linux VMs ✔️ Conjuntos de escala flexível
Num tutorial anterior, aprendeu a realizar SSH para uma máquina virtual (VM) e instalar manualmente o NGINX. Para criar VMs de forma rápida e consistente, normalmente pretende-se alguma forma de automatização. Uma abordagem comum para personalizar uma VM no primeiro arranque é utilizar o cloud-init. Neste tutorial, ficará a saber como:
- Criar um ficheiro de configuração do cloud-init
- Criar uma VM que utiliza um ficheiro cloud-init
- Ver uma aplicação Node.js em execução depois de a VM ser criada
- Utilizar o Key Vault para armazenar certificados
- Automatizar implementações seguras do NGINX com o cloud-init
Se optar por instalar e utilizar a CLI localmente, este tutorial exigirá que execute a versão 2.0.30 ou posterior da CLI do Azure. Executar az --version para localizar a versão. Se precisar de instalar ou atualizar, veja Install Azure CLI (Instalar o Azure CLI).
Descrição geral da inicialização de cloud
Cloud-init é uma abordagem amplamente utilizada para personalizar uma VM com Linux quando arranca pela primeira vez. Pode utilizar o cloud-init para instalar pacotes e escrever ficheiros ou para configurar utilizadores e segurança. Como o cloud-init é executado durante o processo de arranque inicial, não existem passos adicionais ou agentes necessários a aplicar à configuração.
O cloud-init também funciona em distribuições. Por exemplo, não utiliza apt-get install nem yum install para instalar um pacote. Em vez disso, pode definir uma lista dos pacotes a instalar. O cloud-init utiliza automaticamente a ferramenta de gestão de pacotes nativa para a distribuição que selecionar.
Estamos a trabalhar com os nossos parceiros para que o cloud-init seja incluído e fique operacional nas imagens que fornecem ao Azure. Para obter informações detalhadas sobre o suporte de inicialização na nuvem para cada distribuição, consulte Suporte de inicialização na nuvem para VMs no Azure.
Criar ficheiro de configuração do cloud-init
Para ver o cloud-init em ação, crie uma VM que instala o NGINX e executa uma aplicação Node.js “Hello World” simples. A seguinte configuração cloud-init instala os pacotes necessários, cria um aplicativo Node.js e, em seguida, inicializa e inicia o aplicativo.
No prompt bash ou no Cloud Shell, crie um arquivo chamado cloud-init.txt e cole a seguinte configuração. Por exemplo, digite sensible-editor cloud-init.txt para criar o arquivo e veja uma lista de editores disponíveis. Certifique-se de que o ficheiro de inicialização da cloud é copiado corretamente, especialmente a primeira linha:
#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 obter mais informações sobre as opções de configuração do cloud-init, veja exemplos de configuração do cloud-init.
Criar a máquina virtual
Antes de poder criar uma VM, tem de criar um grupo de recursos com az group create. O exemplo a seguir cria um grupo de recursos. Nesses comandos, um sufixo aleatório é anexado ao grupo de recursos e aos nomes de VM para evitar colisões de nomes durante implantações 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"
}
Agora, crie uma VM com az vm create. Utilize o parâmetro --custom-data para passar o ficheiro de configuração de inicialização da cloud. Forneça o caminho completo para a configuração do cloud-init.txt, se tiver guardado o ficheiro fora do diretório de trabalho atual. O exemplo a seguir cria uma VM; observe que o nome da VM também é acrescentado com o sufixo aleatório.
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": ""
}
Demora alguns minutos até a VM ser criada, os pacotes serem instalados e a aplicação ser iniciada. Existem tarefas em segundo plano que continuam a ser executadas após a CLI do Azure devolver o utilizador à linha de comandos. Poderão ser necessários mais alguns minutos antes de poder aceder à aplicação. Quando a VM tiver sido criada, tome nota do publicIpAddress apresentado pela CLI do Azure. Este endereço é utilizado para aceder à aplicação Node.js num browser.
Para permitir que o tráfego da Web aceda à VM, abra a porta 80 a partir da Internet com 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"
}
Testar a aplicação Web
Agora você pode abrir um navegador da Web e inserir o endereço IP público na barra de endereços. Forneça o seu próprio endereço IP público a partir do processo de criação da VM. A aplicação Node.js é apresentada conforme mostrada no exemplo seguinte:
Próximos passos
Neste tutorial, configurou as VMs no primeiro arranque com o cloud-init. Aprendeu a:
- Criar um ficheiro de configuração do cloud-init
- Criar uma VM que utiliza um ficheiro cloud-init
- Ver uma aplicação Node.js em execução depois de a VM ser criada
- Utilizar o Key Vault para armazenar certificados
- Automatizar implementações seguras do NGINX com o cloud-init
Avance para o tutorial seguinte para aprender a criar imagens de VM personalizadas.