Compartir a través de


Tutorial: Invocación de funciones de datos de usuario desde una aplicación de consola de Python

Para invocar funciones de tratamiento de datos de usuario de Fabric desde una aplicación de consola en Python, puede enviar solicitudes HTTP al endpoint de la función que necesita ejecutarse. En este inicio rápido, aprenderá a configurar una aplicación de Python mediante Visual Studio Code.

Prerrequisitos

Crear una aplicación de Microsoft Entra

En los pasos siguientes se explica cómo configurar la compatibilidad con una aplicación ReactJS en Microsoft Entra.

  1. Registro de una aplicación mediante los pasos descritos en Inicio rápido: Registro de una aplicación con la plataforma de identidad de Microsoft.

  2. Los valores de Id. de aplicación de aplicación de Microsoft Entra (cliente) e Id. de directorio (inquilino) aparecen en el cuadro Resumen. Registre estos valores porque son necesarios más adelante.

  3. En la lista Administrar, seleccione permisos de APIy luego Agregar permiso.

  4. Agregue el servicio PowerBI, seleccione Permisos delegados y seleccione UserDataFunction.Execute.All o elemento. Permisos Execute.All . Confirme que el consentimiento del administrador no es necesario.

  5. Vuelva a la configuración Administrar y seleccione Autenticación>Agregar una> de plataforma.

  6. Para fines de desarrollo local, agregue http://localhost:3000 en URI de redirección y confirme que la aplicación está habilitada para el flujo de código de autorización con clave de prueba para Intercambio de código (PKCE). Seleccione el botón Configurar para guardar los cambios. Si la aplicación encuentra un error relacionado con las solicitudes entre orígenes, agregue la plataforma aplicaciones móviles y de escritorio en el paso anterior con el mismo URI de redirección.

  7. Vuelva a Autenticación, desplácese hasta Configuración avanzada y, en Permitir flujos de clientes públicos, seleccione para Habilitar los siguientes flujos de dispositivos móviles y de escritorio.

Creación de una aplicación de consola

  1. La función debe ser accesible públicamente. En el Explorador de Funciones, mantenga el puntero sobre el nombre de la función y seleccione el icono de puntos suspensivos (...) que aparece y, a continuación, seleccione Propiedades. En el panel Propiedades que se abre, habilite el acceso público. También debe tomar nota de la dirección URL pública que se va a usar en la aplicación Python.

  2. Cree una nueva carpeta para la aplicación de Python, por ejemplo my-data-app. Abra la carpeta en Visual Studio Code.

  3. Configure el entorno virtual de Python en Visual Studio Code. Para crear entornos locales en Visual Studio Code, abra la paleta Comandos con Ctrl+Mayús+P y, a continuación, busque y seleccione el comando Python: Create Environment.

    • El comando presenta una lista de tipos de entorno y selecciona venv.
    • Seleccione la versión del intérprete de Python Python 3.11.
  4. Ejecute el comando siguiente para activar el entorno virtual en el terminal de Visual Studio Code.

    venv\Scripts\activate.bat
    
  5. A continuación, ejecute el comando para instalar las bibliotecas de Python necesarias para este ejemplo.

    pip install azure-identity, requests 
    
  6. Cree un archivo app.py y use el código para invocar el elemento de funciones de datos de usuario.

    from azure.identity import InteractiveBrowserCredential
    import requests
    import json
    
    # Acquire a token
    # DO NOT USE IN PRODUCTION.
    # Below code to acquire token is to test the User data function endpoint and is for the purpose of development only.
    # For production, always register an application in a Microsoft Entra ID tenant and use the appropriate client_id and scopes.
    
    
    app = InteractiveBrowserCredential()
    scp = 'https://analysis.windows.net/powerbi/api/user_impersonation'
    result = app.get_token(scp)
    
    if not result.token:
        print('Error:', "Could not get access token")
    
    # Prepare headers
    headers = {
        'Authorization': f'Bearer {result.token}',
        'Content-Type': 'application/json'
    }
    
    FUNCTION_URL = '<REPLACE WITH USER DATA FUNCTION URL>'
    
    # Prepare the request data
    data = '{"name": "John"}' # JSON payload to send to the Azure Function
    headers = {
        #  "Authorization": f"Bearer {access_token}",
        "Content-Type": "application/json"
            }
    
    try:   
        # Call the user data function public URL 
        response = requests.post(FUNCTION_URL, json=data, headers=headers)
        response.raise_for_status()
        print(json.dumps(response.json()))
    except Exception as e:
        print({"error": str(e)}, 500)
    
    if __name__ == "__main__":
        app.run(debug=True)
    
    

    Nota:

    El ejemplo es solo para fines de desarrollo. Actualice la aplicación para usar la autenticación de Microsoft Entra ID antes de usar la aplicación para un caso de uso de producción.

Invocación de una función desde una aplicación externa

Las funciones se pueden invocar mediante la emisión de una llamada REST a la dirección URL del punto de conexión. Seleccione la función que desea invocar en el Explorador de Functions y seleccione Copiar dirección URL de la función. También puede activar o desactivar la capacidad de usar esta dirección URL externamente desde el menú Propiedades.

Recorte de pantalla en el que se muestra cómo depurar localmente con puntos de interrupción.

A continuación, use esta dirección URL en la aplicación para invocar la función. Consulte Invocar funciones de datos de usuario desde una aplicación

Esquema de salida

Al invocar una función de datos de usuario desde una aplicación externa, el esquema de salida tendrá el formato siguiente:

{
  "functionName": "hello_fabric",
  "invocationId": "1234567890", 
  "status": "Succeeded | BadRequest | Failed | Timeout | ResponseTooLarge",
  "output": /*shows the result of the function dependeing on the output type*/,
  "errors": [
     {
       "name": "Error name",
       "message": "Error message",
       "properties": {
          /*Key value pairs custom to error*/
       }
     },
  ]
}

Se devuelven las siguientes propiedades:

  • functionName: nombre de la función que se ejecutó.
  • invocationId: identificador de invocación para la ejecución de una función.
  • status: el resultado de la ejecución de la función y los valores admitidos son Succeeded, BadRequest, FailedTimeout y ResponseTooLarge.
  • salida: el valor de salida devuelto por la función.
  • errores: si se capturaron errores, devolverá una lista de cada error con su nombre, mensaje de error y propiedades de error.

Códigos de respuesta

La función devolverá los siguientes códigos HTTP como resultado de la ejecución.

Código de respuesta Mensaje Descripción
200 Success La solicitud fue exitosa.
400 Solicitud incorrecta La solicitud no era válida. Esta respuesta podría deberse a que faltan valores de parámetros de entrada, tipos de datos o nombres incorrectos. Esta respuesta también podría deberse a que el acceso público está desactivado para una función.
403 Prohibido La respuesta era demasiado grande y se produjo un error en la invocación.
408 Tiempo de espera de solicitud Error en la solicitud debido a que la ejecución tarda más de 200 segundos.
409 Conflicto No se pudo completar la solicitud debido a un estado en conflicto. Esto podría deberse a una excepción no controlada o a un error con credenciales de usuario.
422 Solicitud incorrecta Error en la solicitud debido a un userThrownError generado en la función .
500 Error interno del servidor Error en la solicitud debido a un error interno en el servicio.

Depuración y pruebas

Depure la aplicación en Visual Studio Code mediante el depurador de Python. Agregue puntos de interrupción si es necesario para depurar si hay algún problema. Más información

Pasos siguientes