Példa: Virtuális gép létrehozása az Azure-kódtárak használatával

Ebből a cikkből megtudhatja, hogyan hozhat létre linuxos virtuális gépet tartalmazó erőforráscsoportot az Azure SDK felügyeleti kódtárai segítségével Egy Python-szkriptben.

A cikkben szereplő összes parancs ugyanúgy működik a Linux/macOS bash és a Windows parancshéjakban, hacsak fel nem jegyezzük.

A cikk későbbi részében az egyenértékű Azure CLI-parancsok jelennek meg. Ha inkább az Azure Portalt szeretné használni, olvassa el a Linux rendszerű virtuális gép létrehozása és a Windows rendszerű virtuális gép létrehozása című témakört.

Feljegyzés

A virtuális gép kódon keresztüli létrehozása többlépéses folyamat, amely magában foglalja a virtuális gép által igényelt számos egyéb erőforrás kiépítését. Ha egyszerűen csak a parancssorból futtat ilyen kódot, sokkal egyszerűbb a parancs használata az vm create , amely automatikusan kiépíti ezeket a másodlagos erőforrásokat az kihagyni kívánt beállítások alapértelmezett értékeivel. Az egyetlen kötelező argumentum az erőforráscsoport, a virtuális gép neve, a rendszerkép neve és a bejelentkezési hitelesítő adatok. További információ: Gyors virtuális gép létrehozása az Azure CLI-vel.

1: A helyi fejlesztési környezet beállítása

Ha még nem tette meg, hozzon létre egy környezetet, ahol futtathatja ezt a kódot. Íme néhány lehetőség:

  • Python virtuális környezet konfigurálása. Létrehozhatja a virtuális környezetet helyileg vagy az Azure Cloud Shellben, és ott futtathatja a kódot. Mindenképpen aktiválja a virtuális környezetet a használat megkezdéséhez.

  • Használjon conda környezetet.

  • Használjon Dev-tárolót a Visual Studio Code-ban vagy a GitHub Codespace-ben.

2: A szükséges Azure-kódtárcsomagok telepítése

Hozzon létre egy requirements.txt fájlt, amely felsorolja a példában használt felügyeleti kódtárakat:

azure-mgmt-resource
azure-mgmt-compute
azure-mgmt-network
azure-identity

Ezután a terminálon vagy a parancssorban aktivált virtuális környezettel telepítse a requirements.txt felsorolt felügyeleti kódtárakat:

pip install -r requirements.txt

3: Kód írása virtuális gép létrehozásához

Hozzon létre egy provision_vm.py nevű Python-fájlt a következő kóddal. A megjegyzések a részleteket ismertetik:

# Import the needed credential and management objects from the libraries.
import os

from azure.identity import DefaultAzureCredential
from azure.mgmt.compute import ComputeManagementClient
from azure.mgmt.network import NetworkManagementClient
from azure.mgmt.resource import ResourceManagementClient

print(
    "Provisioning a virtual machine...some operations might take a \
minute or two."
)

# Acquire a credential object.
credential = DefaultAzureCredential()

# 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.
resource_client = ResourceManagementClient(credential, subscription_id)

# Constants we need in multiple places: the resource group name and
# the region in which we provision resources. You can change these
# values however you want.
RESOURCE_GROUP_NAME = "PythonAzureExample-VM-rg"
LOCATION = "westus2"

# 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: 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"
SUBNET_NAME = "python-example-subnet"
IP_NAME = "python-example-ip"
IP_CONFIG_NAME = "python-example-ip-config"
NIC_NAME = "python-example-nic"

# 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,
        "address_space": {"address_prefixes": ["10.0.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.0.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
poller = network_client.public_ip_addresses.begin_create_or_update(
    RESOURCE_GROUP_NAME,
    IP_NAME,
    {
        "location": 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,
        "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"
USERNAME = "azureuser"
PASSWORD = "ChangePa$$w0rd24"

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 DS1 v2 plan 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,
        "storage_profile": {
            "image_reference": {
                "publisher": "Canonical",
                "offer": "UbuntuServer",
                "sku": "16.04.0-LTS",
                "version": "latest",
            }
        },
        "hardware_profile": {"vm_size": "Standard_DS1_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}")

Hitelesítés a kódban

A cikk későbbi részében az Azure CLI-vel jelentkezik be az Azure-ba a mintakód futtatásához. Ha a fiókja rendelkezik erőforráscsoportok, hálózati és számítási erőforrások Azure-előfizetésben való létrehozásához szükséges engedélyekkel, a kód sikeresen lefut.

Ha éles szkriptben szeretné használni az ilyen kódot, a környezeti változókat úgy állíthatja be, hogy egyszerű szolgáltatásalapú módszert használjon a hitelesítéshez. További információ: Python-alkalmazások hitelesítése az Azure-szolgáltatásokkal. Gondoskodnia kell arról, hogy a szolgáltatásnév megfelelő engedélyekkel rendelkezzen ahhoz, hogy erőforráscsoportokat, valamint hálózati és számítási erőforrásokat hozzon létre az előfizetésében, ha megfelelő szerepkört rendel hozzá az Azure-ban, például az előfizetés közreműködői szerepkörét.

4. Futtassa a szkriptet

  1. Ha még nem tette meg, jelentkezzen be az Azure-ba az Azure CLI használatával:

    az login
    
  2. Állítsa be a környezeti változót AZURE_SUBSCRIPTION_ID az előfizetés azonosítójához. (Futtathatja az az account show parancsot, és lekérheti az előfizetés azonosítóját a id kimenetben lévő tulajdonságból):

    set AZURE_SUBSCRIPTION_ID=00000000-0000-0000-0000-000000000000
    
  3. Futtassa a szkriptet:

    python provision_vm.py
    

A kiépítési folyamat néhány percet vesz igénybe.

5. Az erőforrások ellenőrzése

Nyissa meg az Azure Portalt, keresse meg a "PythonAzureExample-VM-rg" erőforráscsoportot, és jegyezze fel a virtuális gépet, a virtuális lemezt, a hálózati biztonsági csoportot, a nyilvános IP-címet, a hálózati adaptert és a virtuális hálózatot.

Azure portal page for the new resource group showing the virtual machine and related resources

Az Azure CLI-vel azt is ellenőrizheti, hogy a virtuális gép létezik-e az az virtuálisgép-lista paranccsal:

az vm list --resource-group PythonAzureExample-VM-rg

Egyenértékű Azure CLI-parancsok

rem Provision the resource group

az group create -n PythonAzureExample-VM-rg -l westus2

rem Provision a virtual network and subnet

az network vnet create -g PythonAzureExample-VM-rg -n python-example-vnet ^
    --address-prefix 10.0.0.0/16 --subnet-name python-example-subnet ^
    --subnet-prefix 10.0.0.0/24

rem Provision a public IP address

az network public-ip create -g PythonAzureExample-VM-rg -n python-example-ip ^
    --allocation-method Dynamic --version IPv4

rem Provision a network interface client

az network nic create -g PythonAzureExample-VM-rg --vnet-name python-example-vnet ^
    --subnet python-example-subnet -n python-example-nic ^
    --public-ip-address python-example-ip

rem Provision the virtual machine

az vm create -g PythonAzureExample-VM-rg -n ExampleVM -l "westus2" ^
    --nics python-example-nic --image UbuntuLTS --public-ip-sku Standard ^
    --admin-username azureuser --admin-password ChangePa$$w0rd24

Ha a kapacitáskorlátozásokkal kapcsolatos hibaüzenet jelenik meg, kipróbálhat egy másik méretet vagy régiót. További információ: Nem elérhető termékváltozat hibáinak elhárítása.

6: Erőforrások törlése

Ha továbbra is használni szeretné a cikkben létrehozott virtuális gépet és hálózatot, hagyja a helyén az erőforrásokat. Ellenkező esetben futtassa az az group delete parancsot az erőforráscsoport törléséhez.

Az erőforráscsoportok nem járnak folyamatos díjakkal az előfizetésben, de a csoportban lévő erőforrások, például a virtuális gépek, továbbra is díjakat vonhatnak maga után. Ajánlott minden olyan csoportot megtisztítani, amelyet nem használ aktívan. Az --no-wait argumentum lehetővé teszi, hogy a parancs azonnal visszatérjen a művelet befejezésére való várakozás helyett.

az group delete -n PythonAzureExample-VM-rg --no-wait

A metódussal ResourceManagementClient.resource_groups.begin_delete egy erőforráscsoportot is törölhet a kódból. A példakód : Erőforráscsoport létrehozása a használatot mutatja be.

Lásd még

Az alábbi erőforrások átfogóbb példákat tartalmaznak a Python használatával egy virtuális gép létrehozásához: