Guia de início rápido: implantar uma máquina virtual no MEC público do Azure usando um modelo ARM
Neste início rápido, você aprenderá a usar um modelo do Azure Resource Manager (ARM) para implantar uma máquina virtual (VM) Ubuntu Linux no Azure public multi-access edge compute (MEC).
Um modelo do Azure Resource Manager é um arquivo JSON (JavaScript Object Notation) que define a infraestrutura e a configuração do seu projeto. O modelo utiliza sintaxe declarativa. Você descreve a implantação pretendida sem escrever a sequência de comandos de programação para criar a implantação.
Pré-requisitos
Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.
Adicione uma assinatura permitida à sua conta do Azure, que permite implantar recursos no MEC público do Azure. Se você não tiver uma assinatura ativa permitida, entre em contato com a equipe de produto MEC pública do Azure.
Use o ambiente Bash no Azure Cloud Shell. Para obter mais informações, consulte Guia de início rápido para Bash no Azure Cloud Shell.
Se preferir executar comandos de referência da CLI localmente, instale a CLI do Azure. Se estiver a utilizar o Windows ou macOS, considere executar a CLI do Azure num contentor Docker. Para obter mais informações, consulte Como executar a CLI do Azure em um contêiner do Docker.
Se estiver a utilizar uma instalação local, inicie sessão no CLI do Azure ao utilizar o comando az login. Para concluir o processo de autenticação, siga os passos apresentados no seu terminal. Para outras opções de entrada, consulte Entrar com a CLI do Azure.
Quando solicitado, instale a extensão da CLI do Azure na primeira utilização. Para obter mais informações sobre as extensões, veja Utilizar extensões com o CLI do Azure.
Execute o comando az version para localizar a versão e as bibliotecas dependentes instaladas. Para atualizar para a versão mais recente, execute o comando az upgrade.
Nota
As implantações MEC públicas do Azure são suportadas nas versões 2.26 e posteriores da CLI do Azure.
Rever o modelo
Analise o modelo ARM de exemplo a seguir.
Cada recurso que você implanta no MEC público do Azure tem um atributo extra chamado
extendedLocation
, que o Azure adiciona ao provedor de recursos. O modelo ARM de exemplo implanta estes recursos:- Rede virtual
- Endereço IP público
- Interface de Rede
- Grupo de segurança de rede
- Máquina virtual
Neste modelo ARM de exemplo:
- A ID da Zona de Borda do Azure é diferente do nome para exibição do MEC público do Azure.
- O grupo de segurança de rede do Azure tem uma regra de entrada que permite acesso SSH e HTTPS de qualquer lugar.
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "adminUsername": { "type": "String", "metadata": { "description": "Username for the Virtual Machine." } }, "adminPassword": { "type": "SecureString", "metadata": { "description": "Password for the Virtual Machine." } }, "dnsLabelPrefix": { "type": "String", "metadata": { "description": "Unique DNS Name for the Public IP used to access the Virtual Machine." } }, "vmSize": { "defaultValue": "Standard_D2s_v3", "type": "String", "metadata": { "description": "Size of the virtual machine." } }, "location": { "defaultValue": "[resourceGroup().location]", "type": "String", "metadata": { "description": "Location for all resources." } }, "EdgeZone": { "type": "String" }, "publisher": { "type": "string", "defaultValue": "Canonical", "metadata" : { "description": "Publisher for the VM Image" } }, "offer": { "type": "string", "defaultValue": "UbuntuServer", "metadata" : { "description": "Offer for the VM Image" } }, "sku": { "type": "string", "defaultValue": "18.04-LTS", "metadata" : { "description": "SKU for the VM Image" } }, "osVersion": { "type": "string", "defaultValue": "latest", "metadata" : { "description": "version for the VM Image" } }, "vmName": { "defaultValue": "myEdgeVM", "type": "String", "metadata": { "description": "VM Name." } } }, "variables": { "nicName": "myEdgeVMNic", "addressPrefix": "10.0.0.0/16", "subnetName": "Subnet", "subnetPrefix": "10.0.0.0/24", "publicIPAddressName": "myEdgePublicIP", "virtualNetworkName": "MyEdgeVNET", "subnetRef": "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('virtualNetworkName'), variables('subnetName'))]", "networkSecurityGroupName": "default-NSG" }, "resources": [ { "type": "Microsoft.Network/publicIPAddresses", "apiVersion": "2018-11-01", "name": "[variables('publicIPAddressName')]", "location": "[parameters('location')]", "extendedLocation": { "type": "EdgeZone", "name": "[parameters('EdgeZone')]" }, "sku": { "name": "Standard" }, "properties": { "publicIPAllocationMethod": "Static", "dnsSettings": { "domainNameLabel": "[parameters('dnsLabelPrefix')]" } } }, { "type": "Microsoft.Network/networkSecurityGroups", "apiVersion": "2019-08-01", "name": "[variables('networkSecurityGroupName')]", "location": "[parameters('location')]", "properties": { "securityRules": [ { "name": "AllowHttps", "properties": { "description": "HTTPS is allowed", "protocol": "*", "sourcePortRange": "*", "destinationPortRange": "443", "sourceAddressPrefix": "*", "destinationAddressPrefix": "*", "access": "Allow", "priority": 130, "direction": "Inbound", "sourcePortRanges": [], "destinationPortRanges": [], "sourceAddressPrefixes": [], "destinationAddressPrefixes": [] } }, { "name": "AllowSSH", "properties": { "description": "HTTPS is allowed", "protocol": "*", "sourcePortRange": "*", "destinationPortRange": "22", "sourceAddressPrefix": "*", "destinationAddressPrefix": "*", "access": "Allow", "priority": 140, "direction": "Inbound", "sourcePortRanges": [], "destinationPortRanges": [], "sourceAddressPrefixes": [], "destinationAddressPrefixes": [] } } ] } }, { "type": "Microsoft.Network/virtualNetworks", "apiVersion": "2018-11-01", "name": "[variables('virtualNetworkName')]", "location": "[parameters('location')]", "extendedLocation": { "type": "EdgeZone", "name": "[parameters('EdgeZone')]" }, "dependsOn": [ "[resourceId('Microsoft.Network/networkSecurityGroups', variables('networkSecurityGroupName'))]" ], "properties": { "addressSpace": { "addressPrefixes": [ "[variables('addressPrefix')]" ] }, "subnets": [ { "name": "[variables('subnetName')]", "properties": { "addressPrefix": "[variables('subnetPrefix')]", "networkSecurityGroup": { "id": "[resourceId('Microsoft.Network/networkSecurityGroups', variables('networkSecurityGroupName'))]" } } } ] } }, { "type": "Microsoft.Network/networkInterfaces", "apiVersion": "2018-11-01", "name": "[variables('nicName')]", "location": "[parameters('location')]", "extendedLocation": { "type": "EdgeZone", "name": "[parameters('EdgeZone')]" }, "dependsOn": [ "[resourceId('Microsoft.Network/publicIPAddresses/', variables('publicIPAddressName'))]", "[resourceId('Microsoft.Network/virtualNetworks/', variables('virtualNetworkName'))]" ], "properties": { "ipConfigurations": [ { "name": "ipconfig1", "properties": { "privateIPAllocationMethod": "Dynamic", "publicIPAddress": { "id": "[resourceId('Microsoft.Network/publicIPAddresses',variables('publicIPAddressName'))]" }, "subnet": { "id": "[variables('subnetRef')]" } } } ] } }, { "type": "Microsoft.Compute/virtualMachines", "apiVersion": "2020-06-01", "name": "[parameters('vmName')]", "location": "[parameters('location')]", "extendedLocation": { "type": "EdgeZone", "name": "[parameters('EdgeZone')]" }, "dependsOn": [ "[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]" ], "properties": { "hardwareProfile": { "vmSize": "[parameters('vmSize')]" }, "osProfile": { "computerName": "[parameters('vmName')]", "adminUsername": "[parameters('adminUsername')]", "adminPassword": "[parameters('adminPassword')]" }, "storageProfile": { "imageReference": { "publisher": "[parameters('publisher')]", "offer": "[parameters('offer')]", "sku": "[parameters('sku')]", "version": "[parameters('osVersion')]" }, "osDisk": { "createOption": "FromImage", "managedDisk": { "storageAccountType": "StandardSSD_LRS" } } }, "networkProfile": { "networkInterfaces": [ { "id": "[resourceId('Microsoft.Network/networkInterfaces',variables('nicName'))]" } ] } } } ], "outputs": { "hostname": { "type": "String", "value": "[reference(variables('publicIPAddressName')).dnsSettings.fqdn]" }, "sshCommand": { "type": "string", "value": "[format('ssh {0}@{1}', parameters('adminUsername'), reference(resourceId('Microsoft.Network/publicIPAddresses', variables('publicIPAddressName'))).dnsSettings.fqdn)]" } } }
Implantar o modelo ARM usando a CLI do Azure
Salve o conteúdo do modelo ARM de exemplo da seção anterior em um arquivo chamado azurepublicmecDeploy.json.
Entre no Azure com az login e defina a assinatura do Azure com o comando az account set.
az login az account set --subscription <subscription name>
Crie um grupo de recursos do Azure com o comando az group create. Um grupo de recursos é um contentor lógico no qual os recursos do Azure são implementados e geridos. O exemplo a seguir cria um grupo de recursos chamado myResourceGroup:
az group create --name myResourceGroup --location <location>
Nota
Cada site MEC público do Azure está associado a uma região do Azure. Com base no local MEC público do Azure onde o recurso precisa ser implantado, selecione o valor de região apropriado para o
--location
parâmetro. Para obter mais informações, consulte Principais conceitos para o MEC público do Azure.Implante o modelo ARM no grupo de recursos com o comando az deployment group create .
az deployment group create --resource-group myResourceGroup --template-file azurepublicmecDeploy.json
Please provide string value for 'adminUsername' (? for help): <username> Please provide securestring value for 'adminPassword' (? for help): <password> Please provide string value for 'dnsLabelPrefix' (? for help): <uniqueDnsLabel> Please provide string value for 'EdgeZone' (? for help): <edge zone ID>
Aguarde alguns minutos para que a implantação seja executada.
Após a conclusão da execução do comando, você poderá ver os novos recursos no grupo de recursos myResourceGroup. Aqui está um exemplo de saída:
{ "id": "/subscriptions/xxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Resources/deployments/edgeZonesDeploy", "location": null, "name": "edgeZonesDeploy", "properties": { "correlationId": "<xxxxxxxx>", "debugSetting": null, "dependencies": [ { "dependsOn": [ { "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroup /providers/Microsoft.Network/networkSecurityGroups/default-NSG", "resourceGroup": " myResourceGroup ", "resourceName": "default-NSG", "resourceType": "Microsoft.Network/networkSecurityGroups" } ], "id": "/subscriptions/xxxxxx/resourceGroups/ myResourceGroup /providers/Microsoft.Network/virtualNetworks/MyEdgeTestVnet", "resourceGroup": " myResourceGroup ", "resourceName": " MyEdgeTestVnet ", "resourceType": "Microsoft.Network/virtualNetworks" }, "outputs": { "hostname": { "type": "String", "value": "xxxxx.cloudapp.azure.com" }, "sshCommand": { "type": "String", "value": "ssh <adminUsername>@<publicIPFQDN>" } }, ... }
Acessar a máquina virtual
Para usar SSH para se conectar à máquina virtual no MEC público do Azure, o melhor método é implantar uma caixa de salto em uma região pai do Azure.
Siga as instruções em Criar uma máquina virtual em uma região.
Use SSH para se conectar à máquina virtual de caixa de salto implantada na região.
ssh <username>@<regionVM_publicIP>
Na caixa de salto, use SSH para se conectar à máquina virtual criada no MEC público do Azure.
ssh <username>@<edgezoneVM_publicIP>
Clean up resources (Limpar recursos)
Neste início rápido, você implantou um modelo ARM no MEC público do Azure usando a CLI do Azure. Se você não espera precisar desses recursos no futuro, use o comando az group delete para remover o grupo de recursos, o conjunto de escala e todos os recursos relacionados. O uso do --yes
parâmetro exclui os recursos sem um prompt de confirmação.
az group delete \--name myResourceGroup \--yes
Próximos passos
Para implantar uma máquina virtual no MEC público do Azure usando a CLI do Azure, avance para o seguinte artigo: