Creación de la primera función durable en Python

Durable Functions es una extensión de Azure Functions que le permite escribir funciones con estado en un entorno sin servidor. La extensión administra el estado, establece puntos de control y reinicia en su nombre.

En este artículo, aprenderá a usar la extensión de Azure Functions para Visual Studio Code con el fin de crear y probar localmente una función durable "Hola mundo". Esta función organizará y encadenará llamadas a otras funciones. Después, podrá publicar el código de función en Azure.

Captura de pantalla de ejecución de una función durable en Azure.

Requisitos previos

Para completar este tutorial:

  • Instale Visual Studio Code.

  • Instale la extensión de Azure Functions para Visual Studio Code.

  • Asegúrese de que tiene la versión más reciente de Azure Functions Core Tools.

  • Durable Functions requiere una cuenta de almacenamiento de Azure. Necesita una suscripción de Azure.

  • Asegúrese de tener instalada la versión 3.7, 3.8, 3.9 o 3.10 de Python.

Si no tiene una suscripción a Azure, cree una cuenta gratuita de Azure antes de empezar.

Creación del proyecto local

En esta sección se usa Visual Studio Code para crear un proyecto local en Azure Functions.

  1. En Visual Studio Code, presione la tecla F1 (o Ctrl/Cmd+Mayús+P) para abrir la paleta de comandos. En la paleta de comandos, busque y seleccione Azure Functions: Create New Project....

    Captura de pantalla de la creación de una ventana de funciones.

  2. Elija una ubicación de carpeta vacía para el proyecto y elija Seleccionar.

  1. Siga las solicitudes y proporcione la siguiente información:

    Prompt Valor Descripción
    Seleccionar el lenguaje para el proyecto de la aplicación de funciones Python Cree un proyecto local de Functions en Python.
    Selección de una versión Azure Functions v4 Esta opción solo se ve si las herramientas principales no estén instaladas. En este caso, las herramientas principales se instalan la primera vez que se ejecuta la aplicación.
    Versión de Python Python 3.7, 3.8, 3.9 o 3.10 Al elegir este valor, Visual Studio Code creará un entorno virtual con la versión que seleccione.
    Seleccionar una plantilla para la primera función de su proyecto Omitir por ahora
    Seleccionar cómo desea que se abra el proyecto Abrir en la ventana actual Al elegir este valor, Visual Studio Code volverá a abrirse en la carpeta que seleccionó.
  1. Siga las solicitudes y proporcione la siguiente información:

    Prompt Valor Descripción
    Selección de un idioma Python (modelo de programación V2) Cree un proyecto de Funciones para Python local mediante el modelo de programación V2.
    Selección de una versión Azure Functions v4 Esta opción solo se ve si las herramientas principales no estén instaladas. En este caso, las herramientas principales se instalan la primera vez que se ejecuta la aplicación.
    Versión de Python Python 3.7, 3.8, 3.9 o 3.10 Al elegir este valor, Visual Studio Code creará un entorno virtual con la versión que seleccione.
    Seleccionar cómo desea que se abra el proyecto Abrir en la ventana actual Al elegir este valor, Visual Studio Code volverá a abrirse en la carpeta que seleccionó.

Visual Studio Code instalará el conjunto de herramientas Azure Functions Core Tools si este fuera necesario. También crea el proyecto de una aplicación de funciones en una carpeta. Este proyecto contiene los archivos de configuración host.json y local.settings.json.

También se creará un archivo requirements.txt en la carpeta raíz. Este sirve para especificar los paquetes de Python que se necesitan para ejecutar la aplicación de funciones.

Instalación de azure-functions-durable desde PyPI

Al crear el proyecto, la extensión de Azure Functions para Visual Studio Code creará automáticamente un entorno virtual con la versión de Python que seleccionó. Deberá activar este entorno virtual en un terminal e instalar algunas dependencias que necesitan las extensiones Azure Functions y Durable Functions.

  1. Abra el archivo requirements.txt en el editor y cambie su contenido por el siguiente código:

    azure-functions
    azure-functions-durable
    
  2. Abra el terminal integrado del editor en la carpeta actual (Ctrl+Mayús+`).

  3. En el terminal integrado, active el entorno virtual en la carpeta actual. Utilice el método que se corresponda con el sistema operativo que esté usando:

    source .venv/bin/activate
    
  4. En el terminal integrado en el que está activado el entorno virtual, use un comando con pip para instalar los paquetes que acaba de definir.

    python -m pip install -r requirements.txt
    

Creación de las funciones

Una aplicación de Durable Functions básica contiene tres funciones:

  • Función de orquestador: es una función que describe un flujo de trabajo que organiza otras funciones.
  • Función de actividad: es una función que recibe llamadas de la función de orquestador, lleva a cabo los procesos y, opcionalmente, devuelve un valor.
  • Función de cliente: es una función común de Azure que inicia una función de orquestador. En este ejemplo se usa una función desencadenada por HTTP.

Función de orquestador

Se usa una plantilla para crear el código de la función de Durable Functions del proyecto.

  1. En la paleta de comandos, busque y seleccione Azure Functions: Create Function....

  2. Siga las solicitudes y proporcione la siguiente información:

    Prompt Valor Descripción
    Seleccionar una plantilla para la función Orquestador de Durable Functions Crear una orquestación de Durable Functions
    Proporcionar un nombre de función HelloOrchestrator Nombre de la función de Durable Functions

Hemos agregado un orquestador para coordinar las funciones de actividad. Abra HelloOrchestrator/__init__.py para ver la función de orquestador. Cada llamada a context.call_activity invoca una función de actividad denominada Hello.

A continuación, agregará la función de actividad Hello a la que se hace referencia.

Función de actividad

  1. En la paleta de comandos, busque y seleccione Azure Functions: Create Function....

  2. Siga las solicitudes y proporcione la siguiente información:

    Prompt Valor Descripción
    Seleccionar una plantilla para la función Actividad de Durable Functions Crear una función de actividad
    Proporcionar un nombre de función Hola Nombre de la función de actividad

Ha agregado la función de actividad Hello que el orquestador invoca. Abra Hello/__init__.py para comprobar que toma un nombre como entrada y devuelve un saludo. Una función de actividad es donde realizará acciones como realizar una llamada a la base de datos o realizar un cálculo.

Por último, agregará una función desencadenada por HTTP que inicie la orquestación.

Función de cliente (inicio de HTTP)

  1. En la paleta de comandos, busque y seleccione Azure Functions: Create Function....

  2. Siga las solicitudes y proporcione la siguiente información:

    Prompt Valor Descripción
    Seleccionar una plantilla para la función Inicio de HTTP de Durable Functions Crear una función de inicio de HTTP
    Proporcionar un nombre de función DurableFunctionsHttpStart Nombre de la función del cliente
    Nivel de autorización Anónimas Para la demostración, permita que se llame a la función sin autenticación.

Ha agregado una función desencadenada por HTTP que inicia una orquestación. Open DurableFunctionsHttpStart/__init__.py para ver que usa client.start_new para iniciar una nueva orquestación. A continuación, usa client.create_check_status_response para devolver una respuesta HTTP que contiene las direcciones URL que se pueden usar para supervisar y administrar la nueva orquestación.

Ahora tiene una aplicación de Durable Functions que se puede ejecutar localmente e implementar en Azure.

Requisitos

La versión 2 del modelo de programación de Python requiere las siguientes versiones mínimas:

Habilitar el modelo de programación v2

La siguiente configuración de aplicación es necesaria para ejecutar el modelo de programación v2:

  • Nombre: AzureWebJobsFeatureFlags
  • Valor: EnableWorkerIndexing

Si se ejecuta localmente con Azure Functions Core Tools, debe agregar esta configuración al archivo local.settings.json. Si se ejecuta en Azure, siga estos pasos con la herramienta que prefiera:

Sustituya <FUNCTION_APP_NAME> y <RESOURCE_GROUP_NAME> por el nombre de su aplicación de función y grupo de recursos, respectivamente.

az functionapp config appsettings set --name <FUNCTION_APP_NAME> --resource-group <RESOURCE_GROUP_NAME> --settings AzureWebJobsFeatureFlags=EnableWorkerIndexing

Para crear una aplicación de Durable Functions básica con estos 3 tipos de función, reemplace el contenido de function_app.py por el siguiente código de Python.

import azure.functions as func
import azure.durable_functions as df

myApp = df.DFApp(http_auth_level=func.AuthLevel.ANONYMOUS)

# An HTTP-Triggered Function with a Durable Functions Client binding
@myApp.route(route="orchestrators/{functionName}")
@myApp.durable_client_input(client_name="client")
async def http_start(req: func.HttpRequest, client):
    function_name = req.route_params.get('functionName')
    instance_id = await client.start_new(function_name)
    response = client.create_check_status_response(req, instance_id)
    return response

# Orchestrator
@myApp.orchestration_trigger(context_name="context")
def hello_orchestrator(context):
    result1 = yield context.call_activity("hello", "Seattle")
    result2 = yield context.call_activity("hello", "Tokyo")
    result3 = yield context.call_activity("hello", "London")

    return [result1, result2, result3]

# Activity
@myApp.activity_trigger(input_name="city")
def hello(city: str):
    return f"Hello {city}"

Revise la tabla siguiente para obtener una explicación de cada función y su propósito en el ejemplo.

Método Descripción
hello_orchestrator La función de orquestador describe el flujo de trabajo. En este caso, la orquestación se inicia, invoca tres funciones en una secuencia y devuelve los resultados ordenados de las tres funciones de una lista.
hello La función de actividad realiza el trabajo que se está orquestando. La función devuelve un simple saludo a la ciudad pasada como argumento.
http_start Una función desencadenada por HTTP que inicia una instancia de la orquestación y devuelve una respuesta de comprobación de estado.

Nota

Durable Functions también admite planos técnicos de Python V2. Para usarlos, deberá registrar las funciones de plano técnico mediante la clase azure-functions-durableBlueprint, como se muestra aquí. A continuación, el plano técnico resultante se puede registrar como normal. Consulte nuestra muestra para obtener un ejemplo.

Prueba local de la función

Azure Functions Core Tools le permite ejecutar un proyecto de Azure Functions en el equipo de desarrollo local. Si no las tiene instaladas, se le solicita que instale estas herramientas la primera vez que inicie una función de Visual Studio Code.

  1. Para probar la función, establezca un punto de interrupción en el código de la función de actividad de Hello (Hello/__init__.py). Presione la tecla F5 o seleccione Debug: Start Debugging en la paleta de comandos para iniciar el proyecto de la aplicación de funciones. La salida de Core Tools aparece en el panel Terminal.
  1. Para probar la función, establezca un punto de interrupción en el código de la función de actividad de hello. Presione la tecla F5 o seleccione Debug: Start Debugging en la paleta de comandos para iniciar el proyecto de la aplicación de funciones. La salida de Core Tools aparece en el panel Terminal.

Nota

Para más información sobre los procesos de depuración, consulte los Diagnósticos de Durable Functions.

  1. Para ejecutar Durable Functions, es necesaria una cuenta de Azure Storage. Cuando Visual Studio Code le pida que seleccione una cuenta de almacenamiento, seleccione Seleccionar cuenta de almacenamiento.

    Captura de pantalla de cómo crear una cuenta de almacenamiento.

  2. Siga las indicaciones y proporcione la siguiente información para crear una nueva cuenta de almacenamiento en Azure:

    Prompt Valor Descripción
    Seleccionar suscripción nombre de la suscripción Selección de su suscripción a Azure
    Seleccione una cuenta de almacenamiento Creación de una cuenta de almacenamiento nueva
    Escriba el nombre de la nueva cuenta de almacenamiento nombre único Nombre de la cuenta de almacenamiento que se creará
    Selección de un grupo de recursos nombre único Nombre del grupo de recursos que se creará
    Seleccionar una ubicación region Seleccione una región cercana
  3. En el panel Terminal, copie el punto de conexión de la dirección URL de la función desencadenada por HTTP.

    Captura de pantalla de salida local de Azure.

  1. Mediante el explorador web o una herramienta como Postman o cURL, envíe una solicitud HTTP al punto de conexión de la URL. Reemplace el último segmento por el nombre de la función de orquestador (HelloOrchestrator). La URL debe ser similar a http://localhost:7071/api/orchestrators/HelloOrchestrator.

    La respuesta es el resultado inicial de la función HTTP que le informa de que la orquestación perdurable se ha iniciado correctamente. No obstante, este no es el resultado final de la tarea de orquestación. La respuesta incluye algunas direcciones URL útiles. De momento, vamos a consultar el estado de la orquestación.

  1. Mediante el explorador web o una herramienta como Postman o cURL, envíe una solicitud HTTP al punto de conexión de la URL. Reemplace el último segmento por el nombre de la función de orquestador (hello_orchestrator). La URL debe ser similar a http://localhost:7071/api/orchestrators/hello_orchestrator.

    La respuesta es el resultado inicial de la función HTTP que le informa de que la orquestación perdurable se ha iniciado correctamente. No obstante, este no es el resultado final de la tarea de orquestación. La respuesta incluye algunas direcciones URL útiles. De momento, vamos a consultar el estado de la orquestación.

  1. Copie el valor de la URL que corresponde a statusQueryGetUri, péguelo en la barra de direcciones del explorador y ejecute la solicitud. Como alternativa, también puede usar Postman para emitir la solicitud GET.

    La solicitud consultará la instancia de orquestación sobre el estado. Después de un tiempo, obtendrá una respuesta que mostrará que la instancia se ha completado e incluirá las salidas o los resultados de la función duradera. Su aspecto es similar a:

{
    "name": "HelloOrchestrator",
    "instanceId": "9a528a9e926f4b46b7d3deaa134b7e8a",
    "runtimeStatus": "Completed",
    "input": null,
    "customStatus": null,
    "output": [
        "Hello Tokyo!",
        "Hello Seattle!",
        "Hello London!"
    ],
    "createdTime": "2020-03-18T21:54:49Z",
    "lastUpdatedTime": "2020-03-18T21:54:54Z"
}
{
    "name": "hello_orchestrator",
    "instanceId": "9a528a9e926f4b46b7d3deaa134b7e8a",
    "runtimeStatus": "Completed",
    "input": null,
    "customStatus": null,
    "output": [
        "Hello Tokyo!",
        "Hello Seattle!",
        "Hello London!"
    ],
    "createdTime": "2020-03-18T21:54:49Z",
    "lastUpdatedTime": "2020-03-18T21:54:54Z"
}
  1. Para detener el proceso de depuración, presione las teclas Mayús+F5 en Visual Studio Code.

Después de comprobar que la función se ejecuta correctamente en el equipo local es el momento de publicar el proyecto en Azure.

Inicio de sesión en Azure

Para poder crear recursos de Azure o publicar la aplicación, debe iniciar sesión en Azure.

  1. Si aún no ha iniciado sesión, elija el icono de Azure en la barra de actividades. Después, en el área Recursos, elija Iniciar sesión en Azure...

    Captura de pantalla del inicio de sesión en la ventana de Azure dentro de VS Code.

    Si ya ha iniciado sesión y puede ver las suscripciones existentes, vaya a la siguiente sección. Si aún no tiene una cuenta de Azure, elija Crear una cuenta de Azure.... Los estudiantes pueden elegir Crear una cuenta de Microsoft Azure for Students....

  2. Cuando se le solicite en el explorador, elija su cuenta de Azure e inicie sesión con las credenciales de la misma. Si opta por crear una cuenta, podrá iniciar sesión una vez que haya completado el proceso de creación.

  3. Cuando haya iniciado sesión correctamente, puede cerrar la nueva ventana del explorador. Las suscripciones que pertenezcan a la cuenta de Azure se mostrarán en la barra lateral.

Cree la aplicación de funciones en Azure

Durante el transcurso de esta sección, podrá crear una aplicación de funciones y los recursos relacionados con esta en la suscripción de Azure.

  1. Seleccione el icono de Azure en la barra de actividades. A continuación, en el área Recursos, seleccione el icono + y elija la opción Crear aplicación de funciones en Azure.

    Creación de un recurso en la suscripción de Azure

  2. Escriba la siguiente información cuando se le indique:

    Prompt Número de selección
    Seleccionar suscripción elija la suscripción que desee usar. Si solo tiene una suscripción visible en el área Recursos, esta solicitud no se mostrará.
    Escribir un nombre único global para la aplicación de funciones Escriba un nombre que sea válido en una ruta de acceso de la dirección URL. El nombre que escriba se valida para asegurarse de que es único en Azure Functions.
    Seleccione una pila en tiempo de ejecución Elija la versión de lenguaje que ha estado ejecutando localmente.
    Seleccionar una ubicación para los nuevos recursos Para mejorar el rendimiento, elija una región cerca de usted.

    La extensión mostrará el estado de los recursos individuales en el panel Azure: Registro de actividad a medida que estos se creen.

    Registro de creación de recursos de Azure

  3. Cuando se complete el proceso de creación, se crearán los siguientes recursos de Azure en la suscripción. Los recursos se denominarán en función del nombre de la aplicación de funciones:

    • Un grupo de recursos, que es un contenedor lógico de recursos relacionados.
    • Una cuenta de Azure Storage estándar, que mantiene información de estado y de otro tipo sobre los proyectos.
    • Una aplicación de funciones, que proporciona el entorno para ejecutar el código de función. Una aplicación de funciones permite agrupar funciones como una unidad lógica para facilitar la administración, la implementación y el uso compartido de recursos en el mismo plan de hospedaje.
    • Un plan de App Service, que define al host subyacente de la aplicación de funciones.
    • Una instancia de Application Insights conectada a la aplicación de funciones, que hace un seguimiento del uso de las funciones de la aplicación.

    Una vez que se haya creado la aplicación de función se mostrará una notificación y se aplicará el paquete de implementación.

    Sugerencia

    De forma predeterminada, los recursos de Azure que requiere la aplicación de funciones se crean según el nombre de la aplicación de funciones que proporcione. De forma predeterminada, estos también se crean en el mismo nuevo grupo de recursos que contiene la aplicación de funciones. Si lo que quiere es personalizar los nombres de estos recursos o reutilizar recursos existentes, deberá publicar el proyecto con opciones de creación avanzadas.

Implementar el proyecto en Azure

Importante

Los procesos de implementación en aplicaciones de funciones existentes siempre sobrescriben el contenido de esas aplicaciones en Azure.

  1. En el área Recursos de la actividad de Azure, busque el recurso de la aplicación de funciones que acaba de crear, haga clic con el botón derecho en el recurso y seleccione Implementar en la aplicación de funciones....

  2. Cuando se le solicite sobrescribir las implementaciones anteriores, seleccione Implementar para implementar el código de función en el nuevo recurso de aplicación de funciones.

  3. Cuando se complete el proceso de implementación, seleccione Ver salida para visualizar los resultados de la creación y la implementación, incluidos los recursos de Azure que ha creado. Si se pierde la notificación, seleccione el icono de campana en la esquina inferior derecha para verlo de nuevo.

    Captura de pantalla de la vista de la ventana de salida.

Prueba de una función en Azure

  1. Copie la dirección URL del desencadenador HTTP del panel Salida. La URL que llama a la función desencadenada mediante HTTP debe tener el siguiente formato: https://<functionappname>.azurewebsites.net/api/orchestrators/HelloOrchestrator
  1. Copie la dirección URL del desencadenador HTTP del panel Salida. La URL que llama a la función desencadenada mediante HTTP debe tener el siguiente formato: https://<functionappname>.azurewebsites.net/api/orchestrators/hello_orchestrator
  1. Pegue esta nueva URL de la solicitud HTTP en la barra de direcciones del explorador. Cuando use la aplicación publicada, deberá obtener la misma respuesta de estado que obtuvo antes.

Pasos siguientes

Ha usado Visual Studio Code para crear y publicar una aplicación de función perdurable con Python.