Compartilhar via


Tutorial: Implantar uma máquina virtual na MEC pública do Azure usando o SDK do Python

Neste tutorial, você usará o SDK do Python para implantar recursos na MEC (computação de borda de acesso múltiplo pública) pública do Azure. O tutorial fornece um código Python para implantar uma VM (máquina virtual) e as dependências na MEC pública do Azure.

Para saber mais sobre os SDKs do Python, confira Bibliotecas do Azure para padrões de uso do Python.

Neste tutorial, você aprenderá como:

  • Instalar os pacotes da biblioteca do Azure necessários
  • Provisionar uma máquina virtual
  • Executar o script no seu ambiente de desenvolvimento
  • Criar um jump server na região associada
  • Acessar as VMs

Pré-requisitos

  • Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.

  • Adicione uma assinatura incluída na lista de permitidos à sua conta do Azure, o que permite que você implante recursos na MEC pública do Azure. Caso você não tenha uma assinatura ativa permitida, entre em contato com a equipe de produto da MEC pública do Azure.

  • Configure o Python no ambiente de desenvolvimento local seguindo as instruções descritas em Configurar o ambiente de desenvolvimento local do Python para o Azure. Crie uma entidade de serviço para o desenvolvimento local e crie e ative um ambiente virtual para o projeto deste tutorial.

Instalar os pacotes da biblioteca do Azure necessários

  1. Crie um arquivo chamado requirements.txt que liste as bibliotecas de gerenciamento usadas neste exemplo.

    azure-mgmt-resource
    azure-mgmt-compute
    azure-mgmt-network
    azure-identity
    azure-mgmt-extendedlocation==1.0.0b2
    
  2. Abra um prompt de comando com o ambiente virtual ativado e instale as bibliotecas de gerenciamento listadas em requirements.txt.

    pip install -r requirements.txt
    

Provisionar uma máquina virtual

  1. Crie um arquivo Python chamado provision_vm_edge.py e preencha-o com o script Python a seguir. O script implantará a VM e a dependência associada na MEC pública do Azure. Os comentários do 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}")
    
  2. Antes de executar o script, preencha estas variáveis usadas na seção da etapa 1 do script:

    Nome da variável Descrição
    LOCALIZAÇÃO Região do Azure associada à localização da MEC pública do Azure
    PUBLIC_MEC_LOCATION Identificador de localização/ID do Edge Zone da MEC pública do Azure
    PASSWORD Senha a ser usada para entrada na VM

    Observação

    Cada site da MEC pública do Azure está associado a uma região do Azure. Com base na localização da MEC pública do Azure em que o recurso precisa ser implantado, selecione o valor de região apropriado para o grupo de recursos a ser criado. Para saber mais, confira Principais conceitos da MEC pública do Azure.

Executar o script no seu ambiente de desenvolvimento

  1. Execute o script Python copiado da seção anterior.

    python provision_vm_edge.py
    
  2. Aguarde alguns minutos para a VM e os recursos de suporte serem criados.

    O seguinte exemplo de saída mostra que a operação de criação de VM foi bem-sucedida.

    (.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
    
  3. Na saída do campo python-example-ip-edge, anote seu publicIpAddress. Use esse endereço para acessar a VM na próxima seção.

Criar um jump server na região associada

Para usar o SSH para se conectar à VM na MEC pública do Azure, o melhor método é implantar um jump box em uma região do Azure em que o grupo de recursos foi implantado na seção anterior.

  1. Siga as etapas descritas em Usar as bibliotecas do Azure para provisionar uma máquina virtual.

  2. Anote seu publicIpAddress na saída do campo python-example-ip da VM do jump server. Use esse endereço para acessar a VM na próxima seção.

Acessar as VMs

  1. Use o SSH para se conectar à VM jump box implantada na região com o endereço IP já anotado.

    ssh  azureuser@<python-example-ip>
    
  2. No jump box, use o SSH para se conectar à VM criada na MEC pública do Azure com o endereço IP já anotado.

    ssh azureuser@<python-example-ip-edge>
    
  3. Verifique se os grupos de segurança de rede do Azure permitem acesso à porta 22 nas VMs criadas.

Limpar os recursos

Neste tutorial, você criou uma VM na MEC pública do Azure usando o SDK do Python. Se você não acredita que vai precisar desses recursos no futuro, use o comando az group delete para remover o grupo de recursos, o conjunto de dimensionamento e todos os recursos relacionados. O uso do parâmetro --yes exclui os recursos sem um prompt de confirmação.

az group delete --name PythonAzureExample-VM-rg --yes

Próximas etapas

Em caso de dúvidas sobre a MEC pública do Azure, entre em contato com a equipe de produto: