Contoh: Menggunakan pustaka Azure untuk membuat komputer virtual

Dalam artikel ini, Anda mempelajari cara menggunakan pustaka manajemen Azure SDK dalam skrip Python untuk membuat grup sumber daya yang berisi komputer virtual Linux.

Semua perintah dalam artikel ini bekerja secara sama di bash Linux/macOS dan shell perintah Windows kecuali ada catatan.

Perintah Azure CLI yang setara dicantumkan nanti di artikel ini. Jika Anda lebih suka menggunakan portal Azure, lihat Membuat VM Linux dan Membuat VM Windows.

Catatan

Membuat komputer virtual melalui kode adalah proses multi-langkah yang melibatkan penyediaan sejumlah sumber daya lain yang diperlukan komputer virtual. Jika Anda hanya menjalankan kode seperti itu dari baris perintah, jauh lebih mudah untuk menggunakan perintah az vm create, yang secara otomatis menyediakan sumber daya sekunder ini dengan default untuk pengaturan apa pun yang Anda pilih untuk dihilangkan. Satu-satunya argumen yang diperlukan adalah grup sumber daya, nama VM, nama gambar, dan info masuk. Untuk informasi selengkapnya, lihat Membuat cepat mesin virtual Linux dengan CLI Azure.

1: Siapkan lingkungan pengembangan lokal Anda

Jika Anda belum melakukannya, siapkan lingkungan tempat Anda dapat menjalankan kode ini. Berikut ini adalah beberapa opsi:

2: Instal paket pustaka Azure yang diperlukan

Buat file requirements.txt yang mencantumkan pustaka manajemen yang digunakan dalam contoh ini:

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

Kemudian, di terminal atau prompt perintah Anda dengan lingkungan virtual diaktifkan, instal pustaka manajemen yang tercantum di requirements.txt:

pip install -r requirements.txt

3: Menulis kode untuk membuat komputer virtual

Buat file Python bernama provision_vm.py dengan kode berikut. Komentar akan menjelaskan detailnya:

# 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}")

Autentikasi dalam kode

Kemudian dalam artikel ini, Anda masuk ke Azure dengan Azure CLI untuk menjalankan kode sampel. Jika akun Anda memiliki izin untuk membuat grup sumber daya dan jaringan dan sumber daya komputasi di langganan Azure Anda, kode akan berjalan dengan sukses.

Untuk menggunakan kode tersebut dalam skrip produksi, Anda dapat mengatur variabel lingkungan untuk menggunakan metode berbasis perwakilan layanan untuk autentikasi. Untuk mempelajari selengkapnya, lihat Cara mengautentikasi aplikasi Python dengan layanan Azure. Anda perlu memastikan bahwa perwakilan layanan memiliki izin yang memadai untuk membuat grup sumber daya dan jaringan dan sumber daya komputasi dalam langganan Anda dengan menetapkan peran yang sesuai di Azure; misalnya, peran Kontributor pada langganan Anda.

4. Jalankan skrip

  1. Jika Anda belum melakukannya, masuk ke Azure menggunakan Azure CLI:

    az login
    
  2. Atur AZURE_SUBSCRIPTION_ID variabel lingkungan ke ID langganan Anda. (Anda dapat menjalankan perintah az account show dan mendapatkan ID langganan Anda dari id properti dalam output):

    set AZURE_SUBSCRIPTION_ID=00000000-0000-0000-0000-000000000000
    
  3. Jalankan skrip:

    python provision_vm.py
    

Proses penyediaan membutuhkan waktu beberapa menit untuk menyelesaikannya.

5. Verifikasi sumber daya

Buka portal Azure, navigasikan ke grup sumber daya "PythonAzureExample-VM-rg", dan perhatikan komputer virtual, disk virtual, grup keamanan jaringan, alamat IP publik, antarmuka jaringan, dan jaringan virtual.

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

Anda juga dapat menggunakan Azure CLI untuk memverifikasi bahwa VM ada dengan perintah az vm list :

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

Perintah Azure CLI yang setara

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

Jika Anda mendapatkan kesalahan tentang pembatasan kapasitas, Anda dapat mencoba ukuran atau wilayah yang berbeda. Untuk informasi selengkapnya, lihat Mengatasi kesalahan untuk SKU yang tidak tersedia.

6: Membersihkan sumber daya

Biarkan sumber daya di tempat jika Anda ingin terus menggunakan komputer virtual dan jaringan yang Anda buat di artikel ini. Jika tidak, jalankan perintah az group delete untuk menghapus grup sumber daya.

Grup sumber daya tidak dikenakan biaya berkelanjutan dalam langganan Anda, tetapi sumber daya yang terkandung dalam grup, seperti komputer virtual, mungkin terus dikenakan biaya. Ini adalah praktik yang baik untuk membersihkan grup apa pun yang tidak Anda gunakan secara aktif. Argumen --no-wait memungkinkan perintah untuk segera kembali alih-alih menunggu operasi selesai.

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

Anda juga dapat menggunakan metode ResourceManagementClient.resource_groups.begin_delete untuk menghapus grup sumber daya dari kode. Kode dalam Contoh: Membuat grup sumber daya menunjukkan penggunaan.

Lihat juga

Sumber daya berikut berisi contoh yang lebih komprehensif menggunakan Python untuk membuat mesin virtual: