Compartir a través de


Parte 6: Código de inicio de la aplicación principal

Parte anterior: Dependencias y variables de entorno

Inmediatamente después de las import instrucciones , el código de inicio de la aplicación inicializa las variables clave usadas en las funciones de control de solicitudes.

En primer lugar, la aplicación crea el objeto de aplicación flask, que sirve como base para definir rutas y controlar las solicitudes HTTP entrantes. A continuación, recupera la dirección URL del punto de conexión de API de terceros de una variable de entorno. Esto permite configurar fácilmente el punto de conexión sin modificar el código base:

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

number_url = os.environ["THIRD_PARTY_API_ENDPOINT"]

A continuación, obtiene el DefaultAzureCredential objeto , que es la credencial recomendada que se usará al autenticarse con los servicios de Azure. Consulte Autenticación de aplicaciones hospedadas en Azure con DefaultAzureCredential.

credential = DefaultAzureCredential()

Cuando se ejecuta localmente, DefaultAzureCredential busca las variables de entorno AZURE_TENANT_ID, AZURE_CLIENT_ID y AZURE_CLIENT_SECRET que contienen información para el principal de servicio que está usando para el desarrollo local. Cuando se ejecuta en Azure, DefaultAzureCredential el valor predeterminado es usar la identidad administrada asignada por el sistema habilitada en la aplicación. Es posible invalidar el comportamiento predeterminado con la configuración de la aplicación, pero en este escenario de ejemplo, se usa el comportamiento predeterminado.

El código siguiente recupera la clave de acceso de la API de terceros de Azure Key Vault. En el script de aprovisionamiento, key Vault se crea mediante az keyvault createy el secreto se almacena con az keyvault secret set.

Se accede al propio recurso de Key Vault a través de una dirección URL, que se carga desde la KEY_VAULT_URL variable de entorno.

key_vault_url = os.environ["KEY_VAULT_URL"]

Para recuperar un secreto de Azure Key Vault, la aplicación debe crear un objeto de cliente que se comunique con el servicio Key Vault. Dado que el objetivo es leer un secreto, la aplicación usa la SecretClient clase de la azure.keyvault.secrets biblioteca. Este cliente requiere dos entradas:

  • Dirección URL de Key Vault: normalmente se recupera de una variable de entorno.
  • Objeto de credencial, como la DefaultAzureCredential instancia creada anteriormente, que representa la identidad en la que se ejecuta la aplicación.
keyvault_client = SecretClient(vault_url=key_vault_url, credential=credential)

La creación de un SecretClient objeto no autentica inmediatamente la aplicación. El cliente es simplemente una construcción local que almacena la dirección URL de Key Vault y el objeto de credencial. La autenticación y la autorización solo se producen cuando se invoca una operación a través del cliente, como get_secret, que genera una llamada API REST al recurso de 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

Incluso si la identidad de una aplicación está autorizada para acceder a Azure Key Vault, también debe estar autorizada explícitamente para realizar operaciones específicas, como la lectura de secretos. Sin este permiso, se produce un error en una llamada a get_secret() , incluso si la identidad es válida de otro modo. Para solucionar este problema, el script de aprovisionamiento establece una directiva de acceso "obtener secretos" para la aplicación mediante el comando de la CLI de Azure, az keyvault set-policy. Para más información, consulte Autenticación de Key Vault y Concesión de acceso a la aplicación a Key Vault. En este último artículo se muestra cómo establecer una directiva de acceso mediante Azure Portal. (El artículo también se escribe para la identidad administrada, pero se aplica igualmente a un principio de servicio que se usa en el desarrollo local).

Por último, el código de la aplicación configura el objeto de cliente a través del cual puede escribir mensajes en una cola de Azure Storage. La dirección URL de la cola está en la variable de entorno STORAGE_QUEUE_URL.

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

Al igual que con Azure Key Vault, la aplicación usa un objeto de cliente específico del SDK de Azure para interactuar con Azure Queue Storage. En este caso, usa la QueueClient clase de la biblioteca azure-storage-queue.

Para inicializar el cliente, la aplicación usa el método from_queue_url, proporcionando la dirección URL completa de la cola y un objeto de credencial. Este objeto de credencial es de nuevo la DefaultAzureCredential instancia creada anteriormente, que representa la identidad en la que se ejecuta la aplicación.

Como se indicó anteriormente en esta guía, dicha autorización se concede asignando el rol "Colaborador de datos de almacenamiento en cola" a la identidad de la aplicación, ya sea una identidad administrada en Azure o un principal del servicio durante el desarrollo local. Esta asignación de roles se realiza en el script de aprovisionamiento mediante el comando az role assignment createde la CLI de Azure .

Suponiendo que todo este código de inicio se ejecuta correctamente, la aplicación tiene todas sus variables internas en lugar para admitir su punto de conexión API /api/v1/getcode.