Usar o gerenciamento de serviços do Python

Atenção

Este artigo faz referência ao CentOS, uma distribuição Linux que está se aproximando do status de Fim da Vida Útil (EOL). Por favor, considere o seu uso e planejamento de acordo. Para obter mais informações, consulte as diretrizes de Fim da Vida Útil do CentOS.

Importante

Os Serviços de Nuvem (clássicos) agora foram preteridos para novos clientes e serão desativados em 31 de agosto de 2024 para todos os clientes. Novas implantações devem usar o novo modelo de implantação baseado no Azure Resource Manager Serviços de Nuvem do Azure (suporte estendido).

Este guia mostra como executar programaticamente tarefas comuns de gerenciamento de serviços a partir do Python. A classe ServiceManagementService no SDK do Azure para Python dá suporte ao acesso programático a grande parte da funcionalidade relacionada ao gerenciamento de serviços disponível no portal do Azure. Você pode usar essa funcionalidade para criar, atualizar e excluir serviços de nuvem, implantações, serviços de gerenciamento de dados e máquinas virtuais. Essa funcionalidade pode ser útil na criação de aplicativos que precisam de acesso programático ao gerenciamento de serviços.

O que é a gestão de serviços?

A API de Gerenciamento de Serviços do Azure fornece acesso programático a grande parte da funcionalidade de gerenciamento de serviços disponível por meio do portal do Azure. Você pode usar o SDK do Azure para Python para gerenciar seus serviços de nuvem e contas de armazenamento.

Para usar a API de Gerenciamento de Serviços, você precisa criar uma conta do Azure.

Conceitos

O SDK do Azure para Python encapsula a API de Gerenciamento de Serviços, que é uma API REST. Todas as operações de API são realizadas por TLS e autenticadas mutuamente usando certificados X.509 v3. O serviço de gerenciamento pode ser acessado de dentro de um serviço em execução no Azure. Ele também pode ser acessado diretamente pela Internet a partir de qualquer aplicativo que possa enviar uma solicitação HTTPS e receber uma resposta HTTPS.

Instalação

Todos os recursos descritos neste artigo estão disponíveis no azure-servicemanagement-legacy pacote, que você pode instalar usando pip. Para obter mais informações sobre a instalação (por exemplo, se você for novo no Python), consulte Instalar o Python e o SDK do Azure.

Conecte-se ao gerenciamento de serviços

Para se conectar ao ponto de extremidade de gerenciamento de serviços, você precisa de sua ID de assinatura do Azure e um certificado de gerenciamento válido. Você pode obter sua ID de assinatura por meio do portal do Azure.

Nota

Agora você pode usar certificados criados com OpenSSL ao executar no Windows. Python 2.7.4 ou posterior é necessário. Recomendamos que você use OpenSSL em vez de .pfx, porque o suporte para certificados .pfx provavelmente será removido no futuro.

Certificados de gerenciamento em Windows/Mac/Linux (OpenSSL)

Você pode usar OpenSSL para criar seu certificado de gerenciamento. Você precisa criar dois certificados, um para o servidor (um .cer arquivo) e outro para o cliente (um .pem arquivo). Para criar o .pem arquivo, execute:

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

Para criar o .cer certificado, execute:

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

Para obter mais informações sobre certificados do Azure, consulte Visão geral de certificados para Serviços de Nuvem do Azure. Para obter uma descrição completa dos parâmetros OpenSSL, consulte a documentação em https://www.openssl.org/docs/manmaster/man1/req.html.

Depois de criar esses arquivos, carregue o .cer arquivo no Azure. No portal do Azure, na guia Configurações, selecione Carregar. Observe onde você salvou o .pem arquivo.

Depois de obter sua ID de assinatura, criar um certificado e carregar o .cer arquivo no Azure, conecte-se ao ponto de extremidade de gerenciamento do Azure. Conecte-se passando a ID da assinatura e o caminho para o arquivo para ServiceManagementService..pem

from azure import *
from azure.servicemanagement import *

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

sms = ServiceManagementService(subscription_id, certificate_path)

No exemplo anterior, sms é um objeto ServiceManagementService . A classe ServiceManagementService é a classe primária usada para gerenciar serviços do Azure.

Certificados de gestão no Windows (MakeCert)

Você pode criar um certificado de gerenciamento autoassinado em sua máquina usando makecert.exe. Abra um prompt de comando do Visual Studio como administrador e use o seguinte comando, substituindo AzureCertificate pelo nome do certificado que você deseja usar:

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

O comando cria o .cer arquivo e o instala no armazenamento de certificados pessoais . Para obter mais informações, consulte Visão geral de certificados para Serviços de Nuvem do Azure.

Depois de criar o certificado, carregue o .cer arquivo no Azure. No portal do Azure, na guia Configurações, selecione Carregar.

Depois de obter sua ID de assinatura, criar um certificado e carregar o .cer arquivo no Azure, conecte-se ao ponto de extremidade de gerenciamento do Azure. Conecte-se passando a ID da assinatura e o local do certificado em seu armazenamento de certificados pessoais para ServiceManagementService (novamente, substitua AzureCertificate pelo nome do seu certificado).

from azure import *
from azure.servicemanagement import *

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

sms = ServiceManagementService(subscription_id, certificate_path)

No exemplo anterior, sms é um objeto ServiceManagementService . A classe ServiceManagementService é a classe primária usada para gerenciar serviços do Azure.

Listar locais disponíveis

Para listar os locais que estão disponíveis para serviços de hospedagem, use o método 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)

Ao criar um serviço de nuvem ou serviço de armazenamento, você precisa fornecer um local válido. O método list_locations sempre retorna uma lista atualizada dos locais atualmente disponíveis. No momento em que este artigo foi escrito, os locais disponíveis são:

  • Europa Ocidental
  • Europa do Norte
  • Sudeste Asiático
  • Ásia Leste
  • E.U.A. Central
  • E.U.A. Centro-Norte
  • E.U.A. Centro-Sul
  • E.U.A. Oeste
  • E.U.A. Leste
  • Leste do Japão
  • Oeste do Japão
  • Sul do Brasil
  • Leste da Austrália
  • Austrália Sudeste

Criar um serviço na nuvem

Quando você cria um aplicativo e o executa no Azure, o código e a configuração juntos são chamados de serviço de nuvem do Azure. (Ele era conhecido como um serviço hospedado em versões anteriores do Azure.) Você pode usar o método create_hosted_service para criar um novo serviço hospedado. Crie o serviço fornecendo um nome de serviço hospedado (que deve ser exclusivo no Azure), um rótulo (codificado automaticamente para base64), uma descrição e um local.

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)

Você pode listar todos os serviços hospedados para sua assinatura com o método 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('')

Para obter informações sobre um determinado serviço hospedado, passe o nome do serviço hospedado para o método 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)

Depois de criar um serviço de nuvem, implante seu código no serviço com o método create_deployment .

Excluir um serviço de nuvem

Você pode excluir um serviço de nuvem passando o nome do serviço para o método delete_hosted_service .

sms.delete_hosted_service('myhostedservice')

Antes de excluir um serviço, todas as implantações do serviço devem primeiro ser excluídas. Para obter mais informações, consulte Excluir uma implantação.

Excluir uma implantação

Para excluir uma implantação, use o método delete_deployment . O exemplo a seguir mostra como excluir uma implantação chamada v1:

from azure import *
from azure.servicemanagement import *

sms = ServiceManagementService(subscription_id, certificate_path)

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

Criar um serviço de armazenamento

Um serviço de armazenamento dá acesso a blobs, tabelas e filas do Azure. Para criar um serviço de armazenamento, você precisa de um nome para o serviço (entre 3 e 24 caracteres minúsculos e exclusivo no Azure). Você também precisa de uma descrição, um rótulo (até 100 caracteres, codificado automaticamente para base64) e um local. O exemplo a seguir mostra como criar um serviço de armazenamento especificando um local:

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)

No exemplo anterior, o status da operação create_storage_account pode ser recuperado passando o resultado retornado por create_storage_account para o método get_operation_status .

Você pode listar suas contas de armazenamento e suas propriedades com o método 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('')

Excluir um serviço de armazenamento

Para excluir um serviço de armazenamento, passe o nome do serviço de armazenamento para o método delete_storage_account . A exclusão de um serviço de armazenamento exclui todos os dados armazenados no serviço (blobs, tabelas e filas).

from azure import *
from azure.servicemanagement import *

sms = ServiceManagementService(subscription_id, certificate_path)

sms.delete_storage_account('mystorageaccount')

Listar sistemas operacionais disponíveis

Para listar os sistemas operacionais que estão disponíveis para serviços de hospedagem, use o método 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))

Como alternativa, você pode usar o método list_operating_system_families , que agrupa os sistemas operacionais por família.

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('')

Criar uma imagem do sistema operacional

Para adicionar uma imagem do sistema operacional ao repositório de imagens, use o método 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)

Para listar as imagens do sistema operacional disponíveis, use o método list_os_images . Inclui todas as imagens da plataforma e imagens do utilizador.

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('')

Excluir uma imagem do sistema operacional

Para excluir uma imagem de usuário, use o método 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)

Criar uma máquina virtual

Para criar uma máquina virtual, primeiro você precisa criar um serviço de nuvem. Em seguida, crie a implantação da máquina virtual usando o método 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')

Excluir uma máquina virtual

Para excluir uma máquina virtual, primeiro exclua a implantação usando o método delete_deployment .

from azure import *
from azure.servicemanagement import *

sms = ServiceManagementService(subscription_id, certificate_path)

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

O serviço de nuvem pode ser excluído usando o método delete_hosted_service .

sms.delete_hosted_service(service_name='myvm')

Criar uma máquina virtual a partir de uma imagem de máquina virtual capturada

Para capturar uma imagem de VM, primeiro chame o método 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
    )

Para se certificar de que capturou a imagem com êxito, utilize a API list_vm_images . Certifique-se de que a sua imagem é apresentada nos resultados.

images = sms.list_vm_images()

Para finalmente criar a máquina virtual usando a imagem capturada, use o método create_virtual_machine_deployment como antes, mas esse tempo passa no vm_image_name em vez disso.

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)

Para saber mais sobre como capturar uma máquina virtual Linux no modelo de implantação clássico, consulte Capturar uma máquina virtual Linux.

Para saber mais sobre como capturar uma máquina virtual do Windows no modelo de implantação clássico, consulte Capturar uma máquina virtual do Windows.

Passos seguintes

Agora que você aprendeu as noções básicas de gerenciamento de serviços, pode acessar a documentação de referência completa da API para o SDK do Azure Python e executar tarefas complexas facilmente para gerenciar seu aplicativo Python.

Para obter mais informações, consulte o Centro para Programadores do Python.