Tutorial: Implementar uma máquina virtual no MEC público do Azure com o SDK python
Neste tutorial, vai utilizar o SDK python para implementar recursos na computação de periferia de múltiplos acessos públicos (MEC) do Azure. O tutorial fornece código Python para implementar uma máquina virtual (VM) e as respetivas dependências no MEC público do Azure.
Para obter informações sobre os SDKs python, veja Bibliotecas do Azure para padrões de utilização do Python.
Neste tutorial, ficará a saber como:
- Instalar os pacotes de bibliotecas do Azure necessários
- Aprovisionar uma máquina virtual
- Executar o script no seu ambiente de desenvolvimento
- Criar um servidor jump na região associada
- Aceder às VMs
Pré-requisitos
Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.
Adicione uma subscrição na lista de permissões à sua conta do Azure, que lhe permite implementar recursos no MEC público do Azure. Se não tiver uma subscrição ativa permitida, contacte a equipa de produtos mec públicos do Azure.
Configure o Python no seu ambiente de desenvolvimento local ao seguir as instruções em Configurar o seu ambiente de desenvolvimento python local para o Azure. Certifique-se de que cria um principal de serviço para o desenvolvimento local e cria e ativa um ambiente virtual para este projeto de tutorial.
Utilize o ambiente bash no Azure Cloud Shell. Para obter mais informações, veja Início Rápido do 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, veja Como executar a CLI do Azure num contentor 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 início de sessão, veja Iniciar sessão com a CLI do Azure.
Quando lhe for pedido, 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.
Instalar os pacotes de bibliotecas do Azure necessários
Crie um ficheiro com o nome requirements.txt que lista as bibliotecas de gestão utilizadas neste exemplo.
azure-mgmt-resource azure-mgmt-compute azure-mgmt-network azure-identity azure-mgmt-extendedlocation==1.0.0b2
Abra uma linha de comandos com o ambiente virtual ativado e instale as bibliotecas de gestão listadas no requirements.txt.
pip install -r requirements.txt
Aprovisionar uma máquina virtual
Crie um ficheiro Python com o nome provision_vm_edge.py e preencha-o com o seguinte script Python. O script implementa a VM e a respetiva dependência associada no MEC público do Azure. Os comentários no script explicam os detalhes.
# Import the needed credential and management objects from the libraries. from azure.identity import AzureCliCredential from azure.mgmt.resource import ResourceManagementClient from azure.mgmt.network import NetworkManagementClient from azure.mgmt.compute import ComputeManagementClient import os print(f"Provisioning a virtual machine...some operations might take a minute or two.") # Acquire a credential object using CLI-based authentication. credential = AzureCliCredential() # Retrieve subscription ID from environment variable. subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"] # Step 1: Provision a resource group # Obtain the management object for resources, using the credentials from the CLI login. resource_client = ResourceManagementClient(credential, subscription_id) # Constants we need in multiple places: the resource group name, the region and the public mec location # in which we provision resources. Populate the variables with appropriate values. RESOURCE_GROUP_NAME = "PythonAzureExample-VM-rg" LOCATION = "<region>" PUBLIC_MEC_LOCATION = "<edgezone id>" USERNAME = "azureuser" PASSWORD = "<password>" # Provision the resource group. rg_result = resource_client.resource_groups.create_or_update(RESOURCE_GROUP_NAME, { "location": LOCATION } ) print(f"Provisioned resource group {rg_result.name} in the {rg_result.location} region") # For details on the previous code, see Example: Use the Azure libraries to provision a resource group # at https://learn.microsoft.com/azure/developer/python/azure-sdk-example-resource-group # Step 2: Provision a virtual network # A virtual machine requires a network interface client (NIC). A NIC requires # a virtual network and subnet along with an IP address. Therefore, we must provision # these downstream components first, then provision the NIC, after which we # can provision the VM. # Network and IP address names VNET_NAME = "python-example-vnet-edge" SUBNET_NAME = "python-example-subnet-edge" IP_NAME = "python-example-ip-edge" IP_CONFIG_NAME = "python-example-ip-config-edge" NIC_NAME = "python-example-nic-edge" # Obtain the management object for networks network_client = NetworkManagementClient(credential, subscription_id) # Provision the virtual network and wait for completion poller = network_client.virtual_networks.begin_create_or_update(RESOURCE_GROUP_NAME, VNET_NAME, { "location": LOCATION, "extendedLocation": {"type": "EdgeZone", "name": PUBLIC_MEC_LOCATION}, "address_space": { "address_prefixes": ["10.1.0.0/16"] } } ) vnet_result = poller.result() print(f"Provisioned virtual network {vnet_result.name} with address prefixes {vnet_result.address_space.address_prefixes}") # Step 3: Provision the subnet and wait for completion poller = network_client.subnets.begin_create_or_update(RESOURCE_GROUP_NAME, VNET_NAME, SUBNET_NAME, { "address_prefix": "10.1.0.0/24" } ) subnet_result = poller.result() print(f"Provisioned virtual subnet {subnet_result.name} with address prefix {subnet_result.address_prefix}") # Step 4: Provision an IP address and wait for completion # Only the standard public IP SKU is supported at EdgeZones poller = network_client.public_ip_addresses.begin_create_or_update(RESOURCE_GROUP_NAME, IP_NAME, { "location": LOCATION, "extendedLocation": {"type": "EdgeZone", "name": PUBLIC_MEC_LOCATION}, "sku": { "name": "Standard" }, "public_ip_allocation_method": "Static", "public_ip_address_version" : "IPV4" } ) ip_address_result = poller.result() print(f"Provisioned public IP address {ip_address_result.name} with address {ip_address_result.ip_address}") # Step 5: Provision the network interface client poller = network_client.network_interfaces.begin_create_or_update(RESOURCE_GROUP_NAME, NIC_NAME, { "location": LOCATION, "extendedLocation": {"type": "EdgeZone", "name": PUBLIC_MEC_LOCATION}, "ip_configurations": [ { "name": IP_CONFIG_NAME, "subnet": { "id": subnet_result.id }, "public_ip_address": {"id": ip_address_result.id } }] } ) nic_result = poller.result() print(f"Provisioned network interface client {nic_result.name}") # Step 6: Provision the virtual machine # Obtain the management object for virtual machines compute_client = ComputeManagementClient(credential, subscription_id) VM_NAME = "ExampleVM-edge" print(f"Provisioning virtual machine {VM_NAME}; this operation might take a few minutes.") # Provision the VM specifying only minimal arguments, which defaults to an Ubuntu 18.04 VM # on a Standard DSv2-series with a public IP address and a default virtual network/subnet. poller = compute_client.virtual_machines.begin_create_or_update(RESOURCE_GROUP_NAME, VM_NAME, { "location": LOCATION, "extendedLocation": {"type": "EdgeZone", "name": PUBLIC_MEC_LOCATION}, "storage_profile": { "image_reference": { "publisher": 'Canonical', "offer": "UbuntuServer", "sku": "18.04-LTS", "version": "latest" } }, "hardware_profile": { "vm_size": "Standard_DS2_v2" }, "os_profile": { "computer_name": VM_NAME, "admin_username": USERNAME, "admin_password": PASSWORD }, "network_profile": { "network_interfaces": [{ "id": nic_result.id, }] } } ) vm_result = poller.result() print(f"Provisioned virtual machine {vm_result.name}")
Antes de executar o script, preencha estas variáveis utilizadas na secção passo 1 do script:
Nome da variável Descrição LOCALIZAÇÃO Região do Azure associada à localização do MEC público do Azure PUBLIC_MEC_LOCATION Identificador de localização do MEC público do Azure/ID do edgezone PALAVRA-PASSE Palavra-passe a utilizar para iniciar sessão na VM Nota
Cada site MEC público do Azure está associado a uma região do Azure. Com base na localização mec pública do Azure onde o recurso precisa de ser implementado, selecione o valor de região adequado para que o grupo de recursos seja criado. Para obter mais informações, veja Principais conceitos para o MEC público do Azure.
Executar o script no seu ambiente de desenvolvimento
Execute o script python que copiou da secção anterior.
python provision_vm_edge.py
Aguarde alguns minutos para que a VM e os recursos de suporte sejam criados.
O seguinte resultado de exemplo mostra que a operação de criação da VM foi concluída com êxito.
(.venv) C:\Users >python provision_vm_edge.py Provisioning a virtual machine...some operations might take a minute or two. Provisioned resource group PythonAzureExample-VM-rg in the <region> region Provisioned virtual network python-example-vnet-edge with address prefixes ['10.1.0.0/16'] Provisioned virtual subnet python-example-subnet-edge with address prefix 10.1.0.0/24 Provisioned public IP address python-example-ip-edge with address <public ip> Provisioned network interface client python-example-nic-edge Provisioning virtual machine ExampleVM-edge; this operation might take a few minutes. Provisioned virtual machine ExampleVM-edge
No resultado do campo python-example-ip-edge, tenha em atenção o seu próprio publicIpAddress. Utilize este endereço para aceder à VM na secção seguinte.
Criar um servidor jump na região associada
Para utilizar o SSH para ligar à VM no MEC público do Azure, o melhor método é implementar uma caixa de salto numa região do Azure onde o grupo de recursos foi implementado na secção anterior.
Siga os passos em Utilizar as bibliotecas do Azure para aprovisionar uma máquina virtual.
Anote o seu próprio publicIpAddress na saída do campo python-example-ip da VM do servidor jump. Utilize este endereço para aceder à VM na secção seguinte.
Aceder às VMs
Utilize o SSH para ligar à VM jump box que implementou na região com o respetivo endereço IP que anotou anteriormente.
ssh azureuser@<python-example-ip>
A partir da caixa de salto, utilize o SSH para ligar à VM que criou no MEC público do Azure com o respetivo endereço IP que anotou anteriormente.
ssh azureuser@<python-example-ip-edge>
Certifique-se de que os grupos de segurança de rede do Azure permitem o acesso à porta 22 às VMs que criar.
Limpar os recursos
Neste tutorial, criou uma VM no MEC público do Azure com o SDK python. Se não esperar precisar destes recursos no futuro, utilize o comando az group delete para remover o grupo de recursos, o conjunto de dimensionamento e todos os recursos relacionados. A utilização do --yes
parâmetro elimina os recursos sem um pedido de confirmação.
az group delete --name PythonAzureExample-VM-rg --yes
Passos seguintes
Para perguntas sobre o MEC público do Azure, contacte a equipa de produtos: