Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Z tego artykułu dowiesz się, jak za pomocą bibliotek zarządzania zestawu Azure SDK w skryscie języka Python utworzyć grupę zasobów zawierającą maszynę wirtualną z systemem Linux.
Równoważne polecenia interfejsu wiersza polecenia platformy Azure są wymienione w dalszej części tego artykułu. Jeśli wolisz korzystać z witryny Azure Portal, zobacz Tworzenie maszyny wirtualnej z systemem Linux i Tworzenie maszyny wirtualnej z systemem Windows.
Uwaga / Notatka
Tworzenie maszyny wirtualnej za pomocą kodu to wieloetapowy proces obejmujący aprowizowanie wielu innych zasobów, których wymaga maszyna wirtualna. Jeśli po prostu uruchamiasz taki kod z wiersza polecenia, znacznie łatwiej jest użyć polecenia az vm create
, które automatycznie konfiguruje zasoby pomocnicze, stosując wartości domyślne dla ustawień, które zdecydujesz się pominąć. Jedynymi wymaganymi argumentami są grupa zasobów, nazwa maszyny wirtualnej, nazwa obrazu i poświadczenia logowania. Aby uzyskać więcej informacji, zobacz Szybkie tworzenie maszyny wirtualnej przy użyciu interfejsu wiersza polecenia platformy Azure.
1: Konfigurowanie lokalnego środowiska projektowego
Jeśli jeszcze tego nie zrobiono, skonfiguruj środowisko, w którym można uruchomić ten kod. Oto kilka opcji:
#!/bin/bash
# Create a virtual environment
python -m venv .venv
# Activate the virtual environment
source .venv/Scripts/activate # only required for Windows (Git Bash)
Użyj środowiska Conda. Aby zainstalować aplikację Conda, zobacz Instalowanie narzędzia Miniconda.
Użyj kontenera deweloperskiego w Visual Studio Code lub GitHub Codespaces.
2: Instalowanie wymaganych pakietów bibliotek platformy Azure
Utwórz plik requirements.txt określający pakiety zarządzania zestawu Azure SDK wymagane przez ten skrypt.
azure-mgmt-resource
azure-mgmt-compute
azure-mgmt-network
azure-identity
Następnie zainstaluj biblioteki zarządzania określone w requirements.txt:
pip install -r requirements.txt
3. Pisanie kodu w celu utworzenia maszyny wirtualnej
Utwórz plik w języku Python o nazwie provision_vm.py przy użyciu następującego kodu. Komentarze wyjaśniają szczegóły:
# 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}")
Uwierzytelnianie w kodzie
W dalszej części tego artykułu zalogujesz się do platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure, aby wykonać przykładowy kod. Jeśli twoje konto ma wystarczające uprawnienia do tworzenia grup zasobów i zasobów magazynu w ramach subskrypcji platformy Azure, skrypt powinien zostać uruchomiony pomyślnie bez dodatkowej konfiguracji.
Aby użyć tego kodu w środowisku produkcyjnym, uwierzytelnij się przy użyciu jednostki usługi, ustawiając zmienne środowiskowe. Takie podejście umożliwia bezpieczny, zautomatyzowany dostęp bez konieczności polegania na interaktywnym logowaniu. Aby uzyskać szczegółowe wskazówki, zobacz Jak uwierzytelniać aplikacje języka Python za pomocą usług platformy Azure.
Upewnij się, że jednostka usługi ma przypisaną rolę z wystarczającymi uprawnieniami do tworzenia grup zasobów i kont magazynowych. Na przykład przypisanie roli Współautor na poziomie subskrypcji zapewnia niezbędny dostęp. Aby dowiedzieć się więcej na temat przypisań ról, zobacz Kontrola dostępu oparta na rolach (RBAC) na platformie Azure.
Linki referencyjne dla klas używanych w kodzie
- Defaultredential (azure.identity)
- ResourceManagementClient (azure.mgmt.resource)
- NetworkManagementClient (azure.mgmt.network)
- ComputeManagementClient (azure.mgmt.compute)
4. Uruchamianie skryptu
Jeśli jeszcze tego nie zrobiono, zaloguj się do platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure:
az login
Ustaw zmienną środowiskową
AZURE_SUBSCRIPTION_ID
na identyfikator subskrypcji. (Możesz uruchomić polecenie az account show i pobrać identyfikator subskrypcji zid
właściwości w wynikach wyjściowych):export AZURE_SUBSCRIPTION_ID=$(az account show --query id -o tsv)
Uruchom skrypt:
python provision_vm.py
Proces konfiguracji trwa kilka minut, aby się zakończyć.
5. Weryfikowanie zasobów
Otwórz witrynę Azure Portal, przejdź do grupy zasobów "PythonAzureExample-VM-rg" i zanotuj maszynę wirtualną, dysk wirtualny, sieciową grupę zabezpieczeń, publiczny adres IP, interfejs sieciowy i sieć wirtualną.
Możesz również użyć interfejsu wiersza polecenia platformy Azure, aby sprawdzić, czy maszyna wirtualna istnieje za pomocą polecenia az vm list :
az vm list --resource-group PythonAzureExample-VM-rg
Równoważne polecenia Azure CLI
# Provision the resource group
az group create -n PythonAzureExample-VM-rg -l westus2
# 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
# Provision a public IP address
az network public-ip create -g PythonAzureExample-VM-rg -n python-example-ip \
--allocation-method Dynamic --version IPv4
# 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
# 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
Jeśli wystąpi błąd dotyczący ograniczeń pojemności, możesz spróbować użyć innego rozmiaru lub regionu. Aby uzyskać więcej informacji, zobacz Rozwiązywanie błędów dotyczących niedostępnych jednostek SKU.
6. Czyszczenie zasobów
Pozostaw zasoby w miejscu, jeśli chcesz nadal korzystać z maszyny wirtualnej i sieci utworzonej w tym artykule. W przeciwnym razie uruchom polecenie az group delete , aby usunąć grupę zasobów.
Grupy zasobów nie generują żadnych bieżących opłat w ramach subskrypcji, ale zasoby zawarte w grupie, takie jak maszyny wirtualne, mogą nadal ponosić opłaty. Dobrym rozwiązaniem jest wyczyszczenie każdej grupy, której nie używasz aktywnie. Argument --no-wait
umożliwia polecenie natychmiastowego zwrócenia zamiast oczekiwania na zakończenie operacji.
az group delete -n PythonAzureExample-VM-rg --no-wait
Możesz również użyć metody ResourceManagementClient.resource_groups.begin_delete
, aby usunąć grupę zasobów z kodu. Kod w przykładzie: Tworzenie grupy zasobów demonstruje użycie.
Zobacz także
- Przykład: tworzenie grupy zasobów
- Przykład: Wyświetlanie listy grup zasobów w subskrypcji
- Przykład: tworzenie usługi Azure Storage
- Przykład: korzystanie z usługi Azure Storage
- Przykład: Utwórz aplikację internetową i wdrażaj kod
- Przykład: tworzenie bazy danych i wykonywanie względem jej zapytań
- Używaj zarządzanych dysków Azure z maszynami wirtualnymi
- Wykonaj krótką ankietę dotyczącą zestawu Azure SDK dla języka Python
Poniższe zasoby zawierają bardziej kompleksowe przykłady użycia języka Python do utworzenia maszyny wirtualnej:
- Przykłady zarządzania usługą Azure Virtual Machines — Python (GitHub). W przykładzie pokazano więcej operacji zarządzania, takich jak uruchamianie i ponowne uruchamianie maszyny wirtualnej, zatrzymywanie i usuwanie maszyny wirtualnej, zwiększanie rozmiaru dysku i zarządzanie dyskami danych.