Uso di Libcloud per elencare le macchine virtuali in Azure e AWS

Libcloud è una libreria Python per interagire con più provider cloud usando un’API unificata. La versione 1.0.0 è stata rilasciata ieri, quindi ho pensato di provare e elencare le macchine virtuali (VM) da Azure e Amazon Web Services (AWS). È stato facile e veloce. Tuttavia, ho finito per prendere alcune note, soprattutto durante l’impostazione. Quindi ho pensato di condividerli in questo articolo.

Produzione

Il programma elenca tre macchine virtuali (demo1, demo2 di AWS e shonsoft di Azure) con il loro stato (in esecuzione o arrestato).

Codice

In sostanza, ci sono tre passaggi:

  1. Utilizzo del metodo get_driver () per ottenere un riferimento al driver del provider cloud
  2. Creare un’istanza del driver con le credenziali per accedere al cloud
  3. Utilizzo del metodo list_nodes () per elencare le macchine virtuali

Le cinque variabili (contrassegnate in grassetto ) cambieranno in base all’impostazione specifica.

  # Programma per usare Libcloud per elencare le VM da Azure e AWS 
# Shon Shah - 23 giugno 2016
  # Variabili correlate ad AWS 
AWS_ACCESS_KEY_ID = ' AKIAIOSFODNN7EXAMPLE '
AWS_SECRET_ACCESS_KEY = ' wJalrXUtnFEMI / K7MDENG / bPxRfiCYEXAMPLEKEY '
AWS_REGION = ' us-west-2 '
  # Variabili correlate ad Azure 
AZURE_SUBSCRIPTION_ID = ' xxxxxxxx – xxxx-xxxx-xxxx-xxxxxxxxxxxx '
AZURE_MANAGEMENT_CERT_PATH = 'C: /Demo/azure_cert.pem'
AZURE_CLOUD_SERVICE_NAME = ' MyCloudService '
  # Import 
dal fornitore di importazione libcloud.compute.types
da libcloud.compute.providers importare get_driver
  # Elenco delle macchine virtuali AWS 
cls = get_driver (Provider.EC2)
driver = cls (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, regione = AWS_REGION)
nodes = driver.list_nodes ()
print ("Elenco delle macchine virtuali AWS ...")
per nodo nei nodi:
print (node.name, node.state)

# Elenca le macchine virtuali di Azure
cls = get_driver (Provider.AZURE)
driver = cls (registration_id = AZURE_SUBSCRIPTION_ID, key_file = AZURE_MANAGEMENT_CERT_PATH)
nodes = driver.list_nodes (AZURE_CLOUD_SERVICE_NAME)
print ('Elenco delle macchine virtuali Azure (classiche) ...')
per nodo nei nodi:
print (node.name, node.state)

Impostare

Come ho già detto, l’impostazione delle cose ha richiesto un po ‘più di tempo e fatica a causa della caccia e della risoluzione dei problemi. Quindi, sarò un po ‘più elaborato nel descrivere questi passaggi. Suppongo che C: \ Demo sia la directory di lavoro e che tu abbia copiato il codice sopra come demo.py lì.

1. Azure

Assicurarsi di disporre di un account Azure con alcune macchine virtuali già create. Assicurarsi di distribuire queste macchine virtuali utilizzando il modello di distribuzione classico . Non sono riuscito a trovare il supporto Libcloud per le macchine virtuali distribuite usando il modello di distribuzione di Azure Resource Manager (ARM) .

Creare un certificato di gestione che il codice può usare come credenziale per accedere al proprio account Azure. Puoi usare OpenSSL per questo come descritto di seguito.

Scarica e installa OpenSSL per Windows.

Creare un certificato autofirmato eseguendo i due comandi seguenti nella directory bin del percorso di installazione di OpenSSL. Per me, era C: \ Programmi (x86) \ GnuWin32 \ bin .

  openssl req -x509 -nodes -days 365 -newkey rsa: 2048 -keyout azure_cert.pem -out azure_cert.pem -config “C: \ Programmi (x86) \ GnuWin32 \ share \ openssl.cnf” 
  openssl x509 -inform pem -in azure_cert.pem -outform der -out azure_cert.cer 

Assicurati di specificare il parametro -config . In caso contrario, verrà visualizzato il seguente errore: Impossibile caricare le informazioni di configurazione da /usr/local/ssl/openssl.cnf .

Caricare il certificato (file .cer) in Azure usando il portale di Azure classico.

Spostare la chiave privata (file .pem) in C: \ Demo .

2. AWS

Assicurati di avere un account AWS con alcune macchine virtuali già create.

Ottieni l’ID chiave di accesso e la chiave di accesso segreta che il codice può utilizzare come credenziale per accedere al tuo account AWS.

Libcloud supporta anche l’uso di credenziali di sicurezza temporanee che forniscono una migliore sicurezza a causa della natura a scadenza automatica delle credenziali. Non li ho usati per mantenere le cose semplici.

3. Libcloud

Assicurati di aver scaricato e installato Python 3.5.1. Assicurati di selezionare la casella Aggiungi Python 3.5 a PATH quando installi Python. Anche altre versioni di Python supportate da Libcloud dovrebbero funzionare, ma ho usato 3.5.1

Installa Libcloud 1.0.0 usando il seguente comando:

  pip installa apache-libcloud == 1.0.0 

Quando si stabilisce una connessione sicura a un endpoint del provider cloud, Libcloud verifica il certificato SSL del server. Per questo, deve conoscere la posizione del bundle di certificati dell’autorità di certificazione (CA). Scarica il bundle di certificati CA e copialo in C: \ Demo . Quindi impostare la variabile SSL_CERT_FILE come segue:

  SET SSL_CERT_FILE = C: \ Demo \ ca-bundle.crt 

Se non viene trovato alcun certificato CA valido, verrà visualizzato il seguente errore: Nessun certificato CA trovato in CA_CERTS_PATH.

Sommario

Libcloud fornisce un’API Python unificata per interagire con più provider cloud. È stato facile elencare le macchine virtuali di Azure e AWS con poche righe di codice Python e un paio di ore di lavoro mirato.

Spero che sia di aiuto.

– Shon