Compartilhar via


Parte 6: Código de inicialização do aplicativo principal

Parte anterior: dependências e variáveis de ambiente

Imediatamente após as import instruções, o código de inicialização do aplicativo inicializa as variáveis de chave usadas em todas as funções de tratamento de solicitação.

Primeiro, o aplicativo cria o objeto de aplicativo Flask, que serve como base para definir rotas e lidar com solicitações HTTP de entrada. Em seguida, ele recupera a URL do endpoint da API de terceiros de uma variável de ambiente. Isso permite que o ponto de extremidade seja facilmente configurado sem modificar a base de código:

app = Flask(__name__)
app.config["DEBUG"] = True

number_url = os.environ["THIRD_PARTY_API_ENDPOINT"]

Em seguida, ele obtém o DefaultAzureCredential objeto, que é a credencial recomendada a ser usada ao autenticar com os serviços do Azure. Consulte Autenticar aplicativos hospedados no Azure com DefaultAzureCredential.

credential = DefaultAzureCredential()

Quando executado localmente, DefaultAzureCredential procura as variáveis de ambiente AZURE_TENANT_ID, AZURE_CLIENT_ID e AZURE_CLIENT_SECRET que contêm informações para o principal de serviço que você está usando para desenvolvimento local. Quando executado no Azure, DefaultAzureCredential o padrão é usar a identidade gerenciada atribuída pelo sistema habilitada no aplicativo. É possível substituir o comportamento padrão com as configurações do aplicativo, mas neste cenário de exemplo, usamos o comportamento padrão.

O código em seguida recupera a chave de acesso da API de terceiros do Azure Key Vault. No script de provisionamento, o Key Vault é criado usando az keyvault createe o segredo é armazenado com az keyvault secret set.

O recurso do Key Vault em si é acessado por meio de uma URL, que é carregada da KEY_VAULT_URL variável de ambiente.

key_vault_url = os.environ["KEY_VAULT_URL"]

Para recuperar um segredo do Azure Key Vault, o aplicativo deve criar um objeto cliente que se comunique com o serviço do Key Vault. Como o objetivo é ler um segredo, o aplicativo usa a SecretClient classe da azure.keyvault.secrets biblioteca. Esse cliente requer duas entradas:

  • A URL do Key Vault – normalmente recuperada de uma variável de ambiente
  • Um objeto de credencial , como a DefaultAzureCredential instância criada anteriormente, que representa a identidade sob a qual o aplicativo está em execução.
keyvault_client = SecretClient(vault_url=key_vault_url, credential=credential)

A criação de um SecretClient objeto não autentica imediatamente o aplicativo. O cliente é simplesmente um constructo local que armazena a URL do Key Vault e o objeto de credencial. A autenticação e a autorização ocorrem somente quando você invoca uma operação por meio do cliente, como get_secret, que gera uma chamada à API REST para o recurso do Azure.

api_secret_name = os.environ["THIRD_PARTY_API_SECRET_NAME"]
vault_secret = keyvault_client.get_secret(api_secret_name)

# The "secret" from Key Vault is an object with multiple properties. The key we
# want for the third-party API is in the value property. 
access_key = vault_secret.value

Mesmo que a identidade de um aplicativo esteja autorizada a acessar o Azure Key Vault, ela também deverá estar explicitamente autorizada a executar operações específicas, como a leitura de segredos. Sem essa permissão, uma chamada para get_secret() falhará, mesmo que a identidade seja válida de outra forma. Para resolver isso, o script de provisionamento define uma política de acesso "get secrets" para o aplicativo usando o comando da CLI do Azure. az keyvault set-policy Para obter mais informações, consulte Autenticação do Key Vault e conceda ao aplicativo acesso ao Key Vault. Este último artigo mostra como definir uma política de acesso usando o portal do Azure. (O artigo também é escrito para identidade gerenciada, mas aplica-se igualmente a um princípio de serviço usado no desenvolvimento local.)

Por fim, o código do aplicativo configura o objeto cliente por meio do qual ele pode gravar mensagens em uma Fila de Armazenamento do Azure. A URL da Fila está na variável de ambiente STORAGE_QUEUE_URL.

queue_url = os.environ["STORAGE_QUEUE_URL"]
queue_client = QueueClient.from_queue_url(queue_url=queue_url, credential=credential)

Assim como acontece com o Azure Key Vault, o aplicativo usa um objeto cliente específico do SDK do Azure para interagir com o Armazenamento de Filas do Azure. Nesse caso, ele usa a QueueClient classe da biblioteca azure-storage-queue.

Para inicializar o cliente, o aplicativo usa o from_queue_url método, fornecendo a URL totalmente qualificada da fila e um objeto de credencial. Esse objeto de credencial é novamente a DefaultAzureCredential instância criada anteriormente, que representa a identidade sob a qual o aplicativo está em execução.

Conforme observado anteriormente neste guia, essa autorização é concedida ao atribuir a função "Colaborador de Dados da Fila de Armazenamento" à identidade do aplicativo - uma identidade gerenciada no Azure ou um principal de serviço durante o desenvolvimento local. Essa atribuição de função é feita no script de provisionamento usando o comando az role assignment createda CLI do Azure.

Supondo que todo esse código de inicialização seja bem-sucedido, o aplicativo tem todas as suas variáveis internas preparadas para dar suporte ao endpoint da API /api/v1/getcode.