Partilhar via


Tutorial: Criar um runbook em Python 3.8

Este tutorial orienta você pela criação de um runbook Python 3.8 na Automação do Azure. Os runbooks Python compilam em Python 2.7 e 3.8 Você pode editar diretamente o código do runbook usando o editor de texto no portal do Azure.

  • Crie um guia de execução Python simples
  • Testar e publicar o manual de execução
  • Executar e monitorizar o estado da tarefa do runbook
  • Atualizar o runbook para iniciar uma máquina virtual do Azure com os parâmetros do runbook

Pré-requisitos

Para concluir este tutorial, você precisa:

  • Uma assinatura do Azure. Se você ainda não tiver um, poderá ativar seus benefícios de assinante do MSDN ou se inscrever para uma conta gratuita.

  • Uma conta de Automação para manter o runbook e autenticar os recursos do Azure usando Identidades Gerenciadas. Uma identidade gerenciada é criada automaticamente para você quando você cria a conta de automação.

  • Uma máquina virtual do Azure. Durante este tutorial, você iniciará e parará essa máquina, portanto, ela não deve ser uma VM de produção.

Criar um novo runbook

Você começa criando um runbook simples que gera o texto Hello World.

  1. No portal do Azure, abra sua conta de automação.

    A página Conta de automação oferece uma visão rápida dos recursos dessa conta. Você já deve ter alguns ativos. A maioria desses ativos são os módulos que são automaticamente incluídos em uma nova conta de automação.

    Você também deve ter uma identidade gerenciada habilitada mencionada nos pré-requisitos. Você pode verificar isso exibindo o recurso Identidade em Configurações da conta.

  2. Selecione Runbooks em Process Automation para abrir a lista de runbooks.

  3. Selecione Criar um runbook para criar um novo runbook.

  4. Dê ao runbook o nome MyFirstRunbook-Python.

  5. Selecione Python para o tipo Runbook.

  6. Selecione Python 3.8 para a versão Runtime.

  7. Selecione Criar para criar o runbook e abrir o editor de texto.

Adicionar código ao runbook

Agora você adiciona um comando simples para imprimir o texto Hello World.

print("Hello World!")

Selecione Salvar para salvar o runbook.

Execute o manual técnico (runbook)

Antes de publicar o runbook para disponibilizá-lo na produção, deve-se testá-lo para garantir que funcione corretamente. Ao testar um runbook, executa-se a sua versão de rascunho e visualiza-se a sua saída de forma interativa.

  1. Selecione Painel de teste para abrir o painel Teste .

  2. Selecione Iniciar para iniciar o teste. Esta opção deve ser a única ativada.

  3. É criado um trabalho runbook e o seu estado é exibido. O estado do trabalho começa como Enfileirado, indicando que está aguardando que um agente do runbook na nuvem fique disponível. Ele muda para Iniciando quando um trabalhador reivindica o trabalho e, em seguida, Executando quando o runbook realmente começa a ser executado.

  4. Quando o trabalho do runbook é concluído, o seu resultado é exibido. Neste caso, você deve ver Hello World.

  5. Feche o painel Teste para voltar à tela.

Publicar e iniciar o runbook

O runbook que criaste ainda está no modo de rascunho. Você precisa publicá-lo antes de executá-lo em produção. Quando publica um runbook, substitui a versão publicada existente pela versão de rascunho. Neste caso, ainda não tens uma versão publicada porque acabaste de criar o runbook.

  1. Selecione Publicar para publicar o runbook e, em seguida, Sim quando solicitado.

  2. Se fechares o painel MyFirstRunbook_python, estarás de volta à página Runbooks, onde deverás ver um Estado de Autoria de Publicado.

  3. Selecione o nome MyFirstRunbook-Python na lista, você voltará para o painel MyFirstRunbook-Python .

    As opções na parte superior permitem que você inicie o runbook, visualize o runbook, edite o runbook, programe-o para começar em algum momento no futuro e outras ações.

  4. Selecione Iniciar e, em seguida, selecione OK quando o painel Iniciar Runbook estiver aberto.

  5. Um painel Trabalho é aberto para o trabalho de runbook que o utilizador criou. Você pode fechar esse painel, mas vamos mantê-lo aberto, para que você possa observar o progresso do trabalho.

  6. O status do trabalho é mostrado no campo Status em Essentials. Os valores aqui correspondem aos valores de status quando você testou o runbook.

  7. Quando o status do runbook mostrar Concluído, selecione a guia Saída. Na guia Saída, pode-se ver Hello World.

  8. Feche a guia Saída .

  9. Selecione a guia Todos os Logs para exibir fluxos para o trabalho de runbook. Você só deve ver Hello World no fluxo de saída. No entanto, essa guia pode mostrar outros fluxos para um trabalho de runbook, como Verbose e Error, se o runbook gravar neles.

  10. Feche o painel Trabalhos para retornar ao painel MyFirstRunbook-Python .

  11. Selecione o recurso Tarefas para abrir a página de Tarefas deste runbook. Esta página lista todos os trabalhos criados por este runbook. Você só deve ver um trabalho listado, pois você só executou o trabalho uma vez.

  12. Você pode selecionar esse trabalho para abrir o mesmo painel Trabalho que você visualizou quando iniciou o runbook. Este painel permite que se volte no tempo e visualize os detalhes de qualquer tarefa que tenha sido criada para um runbook específico.

Adicionar autenticação para gerenciar recursos do Azure

Você testou e publicou o seu runbook, mas até agora não faz nada de útil. Você deseja que ele gerencie os recursos do Azure. Para gerenciar recursos, o script precisa ser autenticado.

A maneira recomendada de autenticar é com a identidade gerenciada. Quando você cria uma Conta de Automação do Azure, uma identidade gerenciada é criada automaticamente para você.

Para usar esses exemplos, adicione os seguintes pacotes no recurso Pacotes Python da Conta de Automação. Você pode adicionar os arquivos WHL para esses pacotes com esses links.

Ao adicionar estes pacotes, selecione uma versão do runtime que esteja em sintonia com o seu runbook.

Observação

O código a seguir foi testado com a versão 3.8 do runtime.

Identidade gerenciada

Para usar a identidade gerenciada, verifique se ela está habilitada:

  • Para verificar se a identidade gerenciada está habilitada para a conta de automação, vá para as Configurações da Conta de Automação e, em Identidade, defina o Status como Ativado.
  • A identidade gerenciada tem uma função atribuída para gerenciar o recurso. Neste exemplo de gerenciamento de um recurso de máquina virtual, adicione a função "Colaborador de Máquina Virtual" no grupo de recursos que contém a Máquina Virtual. Para obter mais informações, consulte Atribuir funções do Azure usando o portal do Azure

Com a função de gerenciar identidade configurada, você pode começar a adicionar código.

  1. Abra o editor de texto selecionando Editar no painel MyFirstRunbook-Python .

  2. Adicione o seguinte código para autenticar no Azure:

#!/usr/bin/env python3
from azure.identity import DefaultAzureCredential
from azure.mgmt.compute import ComputeManagementClient

SUBSCRIPTION_ID="YOUR_SUBSCRIPTION_ID"

azure_credential = DefaultAzureCredential()

import os
import requests
# printing environment variables
endpoint = os.getenv('IDENTITY_ENDPOINT')+"?resource=https://management.azure.com/"
identityHeader = os.getenv('IDENTITY_HEADER')
payload={}
headers = {
'X-IDENTITY-HEADER' : identityHeader,
'Metadata' : True
}
response = requests.get(endpoint, headers)
print(response.text)

Adicione código para criar o cliente Python Compute e inicie a VM

Para trabalhar com VMs do Azure, crie uma instância do cliente de computação do Azure para Python.

# Initialize client with the credential and subscription.
compute_client = ComputeManagementClient(
    azure_credential,
    SUBSCRIPTION_ID
)

print('\nStart VM')
async_vm_start = compute_client.virtual_machines.begin_start(
    "MyResourceGroup", "TestVM")
async_vm_start.wait()
print('\nFinished start.')

Onde MyResourceGroup é o nome do grupo de recursos que contém a VM e TestVM é o nome da VM que você deseja iniciar.

Teste e execute o runbook novamente para ver se ele inicia a VM.

Utilize os parâmetros de entrada

Atualmente, o runbook usa valores codificados para os nomes do grupo de recursos e da VM. Agora vamos adicionar código que obtém esses valores de parâmetros de entrada.

Use a sys.argv variável para obter os valores dos parâmetros. Adicione o seguinte código ao runbook imediatamente após as outras import instruções:

import sys

resource_group_name = str(sys.argv[1])
vm_name = str(sys.argv[2])

Esse código importa o sys módulo e cria duas variáveis para armazenar o grupo de recursos e os nomes da VM. Observe que o elemento da lista de argumentos, sys.argv[0], é o nome do script e não é inserido pelo usuário.

Agora você pode modificar as duas últimas linhas do runbook para usar os valores dos parâmetros de entrada em vez de usar valores codificados:

async_vm_start = compute_client.virtual_machines.begin_start(
    resource_group_name, vm_name)
async_vm_start.wait()

Quando você inicia um runbook Python, seja no painel Test ou como um runbook publicado, você pode inserir os valores para parâmetros na página Start Runbook em Parameters.

Depois de começar a inserir um valor na primeira caixa, um segundo será exibido, e assim por diante, para que você possa inserir quantos valores de parâmetro forem necessários.

Os valores estão disponíveis para o script na matriz sys.argv, tal como no código que foi adicionado.

Insira o nome do seu grupo de recursos como o valor para o primeiro parâmetro e o nome da VM para iniciar como o valor do segundo parâmetro.

Insira valores de parâmetro

Clique em OK para iniciar o runbook. O runbook é executado e inicia a VM que você especificou.

Tratamento de erros em Python

Você também pode usar as seguintes convenções para recuperar vários fluxos de seus runbooks do Python, incluindo fluxos WARNING, ERROR e DEBUG.

print("Hello World output")
print("ERROR: - Hello world error")
print("WARNING: - Hello world warning")
print("DEBUG: - Hello world debug")
print("VERBOSE: - Hello world verbose")

O exemplo a seguir mostra essa convenção usada em um try...except bloco.

try:
    raise Exception('one', 'two')
except Exception as detail:
    print ('ERROR: Handling run-time error:', detail)

Próximos passos