Usare la gestione dei servizi da Python

Attenzione

Questo articolo fa riferimento a CentOS, una distribuzione Linux vicina allo stato end of life (EOL). Prendere in considerazione l'uso e la pianificazione di conseguenza. Per altre informazioni, vedere le linee guida per la fine della vita di CentOS.

Importante

Servizi cloud (versione classica) è ora deprecato per i nuovi clienti e verrà ritirato il 31 agosto 2024 per tutti i clienti. Le nuove distribuzioni devono usare il nuovo modello di distribuzione basato su Azure Resource Manager Servizi cloud di Azure (supporto "Extended").

La guida descrive come eseguire attività comuni di gestione dei servizi a livello di codice da Python. La classe ServiceManagementService disponibile in Azure SDK per Python supporta l'accesso a livello di codice alla maggior parte delle funzionalità di gestione dei servizi disponibili tramite il portale di Azure. È possibile usare questa funzionalità per creare, aggiornare ed eliminare servizi cloud, distribuzioni, servizi di gestione dati e macchine virtuali. Questa funzionalità può rivelarsi utile nella creazione di applicazioni che richiedono accesso a livello di codice alla gestione dei servizi.

Informazioni sulla gestione dei servizi

L'API Gestione dei servizi di Azure fornisce l'accesso a livello di codice alla maggior parte delle funzionalità di gestione dei servizi disponibili tramite il portale di Azure. È possibile usare Azure SDK per Python per gestire i servizi cloud e gli account di archiviazione.

Per usare l'API Gestione dei servizi, è necessario creare un account Azure.

Concetti

Azure SDK per Python include l'API Gestione dei servizi, ovvero un'API REST. Tutte le operazioni API vengono eseguite su TLS e autenticate a vicenda usando certificati X.509 v3. Il servizio di gestione è accessibile da un servizio in esecuzione in Azure. È anche possibile accedervi direttamente tramite Internet da qualsiasi applicazione in grado di inviare una richiesta HTTPS e ricevere una risposta HTTPS.

Installazione

Tutte le funzionalità descritte in questo articolo sono disponibili nel pacchetto azure-servicemanagement-legacy che è possibile installare tramite pip. Per altre informazioni sull'installazione, ad esempio se non si ha familiarità con Python, vedere Installazione di Python e dell'SDK.

Connettersi alla gestione dei servizi

Per connettersi all'endpoint di gestione dei servizi, sono necessari un ID sottoscrizione di Azure e un certificato di gestione valido. È possibile ottenere l'ID sottoscrizione tramite il portale di Azure.

Nota

È ora possibile usare i certificati creati con OpenSSL per l'esecuzione in Windows. È necessario Python 2.7.4 o versioni successive. È consigliabile usare i certificati OpenSSL anziché pfx, perché il supporto per i certificati pfx verrà probabilmente rimosso in futuro.

Certificati di gestione in Windows/Mac/Linux (OpenSSL)

Per creare il certificato di gestione, è possibile utilizzare OpenSSL . È necessario creare due certificati, uno per il server (un file .cer) e uno per il client (un file .pem). Per creare il file .pem , eseguire:

openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mycert.pem -out mycert.pem

Per creare il certificato .cer , eseguire:

openssl x509 -inform pem -in mycert.pem -outform der -out mycert.cer

Per altre informazioni sui certificati di Azure, vedere Certificates overview for Azure Cloud Services (Panoramica sui certificati per Servizi cloud di Azure). Per una descrizione completa dei parametri OpenSSL, vedere la documentazione disponibile all'indirizzo https://www.openssl.org/docs/manmaster/man1/req.html.

Dopo avere creato questi file, caricare il file .cer in Azure. Nel portale di Azure nella scheda impostazioni selezionare Carica. Prendere nota del percorso in cui è stato salvato il file .pem.

Dopo avere ottenuto l'ID sottoscrizione, avere creato un certificato e avere caricato il file .cer in Azure, connettersi all'endpoint di gestione di Azure. Eseguire la connessione passando l'ID sottoscrizione e il percorso del file .pem a ServiceManagementService.

from azure import *
from azure.servicemanagement import *

subscription_id = '<your_subscription_id>'
certificate_path = '<path_to_.pem_certificate>'

sms = ServiceManagementService(subscription_id, certificate_path)

Nell'esempio precedente sms è un oggetto ServiceManagementService . La classe ServiceManagementService è la classe principale usata per gestire i servizi di Azure.

Certificati di gestione in Windows (MakeCert)

È possibile creare un certificato di gestione autofirmato nel computer usando makecert.exe. Aprire un prompt dei comandi di Visual Studio come amministratore e usare il comando seguente, sostituendo AzureCertificate con il nome del certificato da usare:

makecert -sky exchange -r -n "CN=AzureCertificate" -pe -a sha1 -len 2048 -ss My "AzureCertificate.cer"

Il comando consente di creare il file .cer e di installarlo nell'archivio certificati Personale. Per altre informazioni, vedere Certificates overview for Azure Cloud Services (Panoramica sui certificati per Servizi cloud di Azure).

Dopo avere creato il certificato, caricare il file .cer in Azure. Nel portale di Azure nella scheda impostazioni selezionare Carica.

Dopo avere ottenuto l'ID sottoscrizione, avere creato un certificato e avere caricato il file .cer in Azure, connettersi all'endpoint di gestione di Azure. Eseguire la connessione passando l'ID sottoscrizione e il percorso del certificato nell'archivio certificati Personale a ServiceManagementService (anche in questo caso sostituire AzureCertificate con il nome del certificato).

from azure import *
from azure.servicemanagement import *

subscription_id = '<your_subscription_id>'
certificate_path = 'CURRENT_USER\\my\\AzureCertificate'

sms = ServiceManagementService(subscription_id, certificate_path)

Nell'esempio precedente sms è un oggetto ServiceManagementService . La classe ServiceManagementService è la classe principale usata per gestire i servizi di Azure.

Creare un elenco delle località disponibili

Per elencare i percorsi disponibili per i servizi di hosting, usare il metodo list_locations .

from azure import *
from azure.servicemanagement import *

sms = ServiceManagementService(subscription_id, certificate_path)

result = sms.list_locations()
for location in result:
    print(location.name)

Quando si crea un servizio cloud o un servizio di archiviazione, è necessario fornire una località valida. Il metodo list_locations restituisce sempre un elenco aggiornato delle posizioni attualmente disponibili. Al momento della stesura di questo articolo, le località disponibili sono le seguenti:

  • Europa occidentale
  • Europa settentrionale
  • Asia sud-orientale
  • Asia orientale
  • Stati Uniti centrali
  • Stati Uniti centro-settentrionali
  • Stati Uniti centro-meridionali
  • Stati Uniti occidentali
  • Stati Uniti orientali
  • Giappone orientale
  • Giappone occidentale
  • Brasile meridionale
  • Australia orientale
  • Australia sud-orientale

Creare un servizio cloud

Quando si crea un'applicazione e la si esegue in Azure, la combinazione del codice e della configurazione costituisce il cosiddetto servizio cloud di Azure È stato noto come servizio ospitato nelle versioni precedenti di Azure. È possibile usare il metodo create_hosted_service per creare un nuovo servizio ospitato. Creare il servizio specificando un nome di servizio ospitato univoco in Azure, un'etichetta con codifica base64 automatica, una descrizione e una località.

from azure import *
from azure.servicemanagement import *

sms = ServiceManagementService(subscription_id, certificate_path)

name = 'myhostedservice'
label = 'myhostedservice'
desc = 'my hosted service'
location = 'West US'

sms.create_hosted_service(name, label, desc, location)

È possibile elencare tutti i servizi ospitati per la sottoscrizione con il metodo list_hosted_services .

result = sms.list_hosted_services()

for hosted_service in result:
    print('Service name: ' + hosted_service.service_name)
    print('Management URL: ' + hosted_service.url)
    print('Location: ' + hosted_service.hosted_service_properties.location)
    print('')

Per ottenere informazioni su un particolare servizio ospitato, passare il nome del servizio ospitato al metodo get_hosted_service_properties .

hosted_service = sms.get_hosted_service_properties('myhostedservice')

print('Service name: ' + hosted_service.service_name)
print('Management URL: ' + hosted_service.url)
print('Location: ' + hosted_service.hosted_service_properties.location)

Dopo aver creato un servizio cloud, distribuire il codice nel servizio con il metodo create_deployment .

Eliminare un servizio cloud

È possibile eliminare un servizio cloud passando il nome del servizio al metodo delete_hosted_service .

sms.delete_hosted_service('myhostedservice')

Prima di eliminare un servizio è necessario eliminare tutte le distribuzioni del servizio. Per altre informazioni, vedere Eliminare una distribuzione.

Eliminare una distribuzione

Per eliminare una distribuzione, usare il metodo delete_deployment . L'esempio seguente mostra come eliminare una distribuzione denominata v1:

from azure import *
from azure.servicemanagement import *

sms = ServiceManagementService(subscription_id, certificate_path)

sms.delete_deployment('myhostedservice', 'v1')

Creare un servizio di archiviazione

Un servizio di archiviazione offre l'accesso ai BLOB, alle tabelle e alle code di Azure. Per creare un servizio di archiviazione, è necessario un nome per il servizio, compreso tra 3 e 24 caratteri minuscoli e univoco in Azure. Sono inoltre richieste una descrizione, un'etichetta fino a 100 caratteri con codifica base64 automatica e una località. Nell'esempio seguente viene illustrato come creare un servizio di archiviazione specificando una località:

from azure import *
from azure.servicemanagement import *

sms = ServiceManagementService(subscription_id, certificate_path)

name = 'mystorageaccount'
label = 'mystorageaccount'
location = 'West US'
desc = 'My storage account description.'

result = sms.create_storage_account(name, desc, label, location=location)

operation_result = sms.get_operation_status(result.request_id)
print('Operation status: ' + operation_result.status)

Nell'esempio precedente, lo stato dell'operazione di create_storage_account può essere recuperato passando il risultato restituito da create_storage_account al metodo get_operation_status .

È possibile elencare gli account di archiviazione e le relative proprietà con il metodo list_storage_accounts .

from azure import *
from azure.servicemanagement import *

sms = ServiceManagementService(subscription_id, certificate_path)

result = sms.list_storage_accounts()
for account in result:
    print('Service name: ' + account.service_name)
    print('Location: ' + account.storage_service_properties.location)
    print('')

Eliminare un servizio di archiviazione

Per eliminare un servizio di archiviazione, passare il nome del servizio di archiviazione al metodo delete_storage_account . L'eliminazione di un servizio di archiviazione comporta l'eliminazione di tutti i dati archiviati nel servizio: BLOB, tabelle e code.

from azure import *
from azure.servicemanagement import *

sms = ServiceManagementService(subscription_id, certificate_path)

sms.delete_storage_account('mystorageaccount')

Elencare i sistemi operativi disponibili

Per elencare i sistemi operativi disponibili per i servizi di hosting, usare il metodo list_operating_systems .

from azure import *
from azure.servicemanagement import *

sms = ServiceManagementService(subscription_id, certificate_path)

result = sms.list_operating_systems()

for os in result:
    print('OS: ' + os.label)
    print('Family: ' + os.family_label)
    print('Active: ' + str(os.is_active))

In alternativa, è possibile usare il metodo list_operating_system_families , che raggruppa i sistemi operativi per famiglia.

result = sms.list_operating_system_families()

for family in result:
    print('Family: ' + family.label)
    for os in family.operating_systems:
        if os.is_active:
            print('OS: ' + os.label)
            print('Version: ' + os.version)
    print('')

Creare un'immagine del sistema operativo

Per aggiungere un'immagine del sistema operativo al repository di immagini, usare il metodo add_os_image .

from azure import *
from azure.servicemanagement import *

sms = ServiceManagementService(subscription_id, certificate_path)

name = 'mycentos'
label = 'mycentos'
os = 'Linux' # Linux or Windows
media_link = 'url_to_storage_blob_for_source_image_vhd'

result = sms.add_os_image(label, media_link, name, os)

operation_result = sms.get_operation_status(result.request_id)
print('Operation status: ' + operation_result.status)

Per elencare le immagini del sistema operativo disponibili, usare il metodo list_os_images . Sono incluse tutte le immagini di piattaforma e utente.

result = sms.list_os_images()

for image in result:
    print('Name: ' + image.name)
    print('Label: ' + image.label)
    print('OS: ' + image.os)
    print('Category: ' + image.category)
    print('Description: ' + image.description)
    print('Location: ' + image.location)
    print('Media link: ' + image.media_link)
    print('')

Eliminare un'immagine del sistema operativo

Per eliminare un'immagine utente, usare il metodo delete_os_image .

from azure import *
from azure.servicemanagement import *

sms = ServiceManagementService(subscription_id, certificate_path)

result = sms.delete_os_image('mycentos')

operation_result = sms.get_operation_status(result.request_id)
print('Operation status: ' + operation_result.status)

Creare una macchina virtuale

Per creare una macchina virtuale, è necessario creare un servizio cloud Creare quindi la distribuzione della macchina virtuale usando il metodo create_virtual_machine_deployment .

from azure import *
from azure.servicemanagement import *

sms = ServiceManagementService(subscription_id, certificate_path)

name = 'myvm'
location = 'West US'

#Set the location
sms.create_hosted_service(service_name=name,
    label=name,
    location=location)

# Name of an os image as returned by list_os_images
image_name = 'OpenLogic__OpenLogic-CentOS-62-20120531-en-us-30GB.vhd'

# Destination storage account container/blob where the VM disk
# will be created
media_link = 'url_to_target_storage_blob_for_vm_hd'

# Linux VM configuration, you can use WindowsConfigurationSet
# for a Windows VM instead
linux_config = LinuxConfigurationSet('myhostname', 'myuser', 'mypassword', True)

os_hd = OSVirtualHardDisk(image_name, media_link)

sms.create_virtual_machine_deployment(service_name=name,
    deployment_name=name,
    deployment_slot='production',
    label=name,
    role_name=name,
    system_config=linux_config,
    os_virtual_hard_disk=os_hd,
    role_size='Small')

Eliminare una macchina virtuale

Per eliminare una macchina virtuale, eliminare prima di tutto la distribuzione usando il metodo delete_deployment .

from azure import *
from azure.servicemanagement import *

sms = ServiceManagementService(subscription_id, certificate_path)

sms.delete_deployment(service_name='myvm',
    deployment_name='myvm')

Il servizio cloud può quindi essere eliminato usando il metodo delete_hosted_service .

sms.delete_hosted_service(service_name='myvm')

Creare una macchina virtuale da un'immagine di macchina virtuale acquisita

Per acquisire un'immagine di macchina virtuale, chiamare prima il metodo capture_vm_image .

from azure import *
from azure.servicemanagement import *

sms = ServiceManagementService(subscription_id, certificate_path)

# replace the below three parameters with actual values
hosted_service_name = 'hs1'
deployment_name = 'dep1'
vm_name = 'vm1'

image_name = vm_name + 'image'
image = CaptureRoleAsVMImage    ('Specialized',
    image_name,
    image_name + 'label',
    image_name + 'description',
    'english',
    'mygroup')

result = sms.capture_vm_image(
        hosted_service_name,
        deployment_name,
        vm_name,
        image
    )

Per assicurarsi di aver acquisito correttamente l'immagine, usare l'API list_vm_images . e assicurarsi che l'immagine venga visualizzata nei risultati.

images = sms.list_vm_images()

Per creare infine la macchina virtuale usando l'immagine acquisita, usare il metodo create_virtual_machine_deployment come in precedenza, ma questa volta passa il vm_image_name.

from azure import *
from azure.servicemanagement import *

sms = ServiceManagementService(subscription_id, certificate_path)

name = 'myvm'
location = 'West US'

#Set the location
sms.create_hosted_service(service_name=name,
    label=name,
    location=location)

sms.create_virtual_machine_deployment(service_name=name,
    deployment_name=name,
    deployment_slot='production',
    label=name,
    role_name=name,
    system_config=linux_config,
    os_virtual_hard_disk=None,
    role_size='Small',
    vm_image_name = image_name)

Per altre informazioni su come acquisire una macchina virtuale Linux nel modello di distribuzione classica, vedere Acquisire una macchina virtuale Linux.

Per altre informazioni su come acquisire una macchina virtuale Windows nel modello di distribuzione classica, vedere Acquisire una macchina virtuale Windows.

Passaggi successivi

A questo punto, dopo avere appreso le nozioni di base della gestione dei servizi, è possibile accedere alla documentazione completa di riferimento all'API per Azure Python SDK ed eseguire facilmente le complesse attività di gestione dell'applicazione Python.

Per ulteriori informazioni, vedere il Centro per sviluppatori di Python.