Creación de una función desencadenada mediante HTTP en AzureCreate an HTTP triggered function in Azure

En este artículo se explica cómo usar las herramientas de línea de comandos para crear un proyecto de Python que se ejecuta en Azure Functions.This article shows you how to use command-line tools to create a Python project that runs in Azure Functions. También puede crear una función que desencadena una solicitud HTTP.You also create a function that is triggered by an HTTP request. Por último, publique el proyecto para que se ejecute como una función sin servidor en Azure.Finally, you publish your project to run as a serverless function in Azure.

Este artículo es el primero de dos artículos de inicio rápido de Python para Azure Functions.This article is the first of two Python quickstarts for Azure Functions. Después de completar este inicio rápido, puede agregar el enlace de salida de la cola de Azure Storage a la función.After you complete this quickstart, you can add an Azure Storage queue output binding to your function.

Requisitos previosPrerequisites

Antes de comenzar, debe hacer lo siguiente:Before you start, you must:

Creación y activación de un entorno virtual (opcional)Create and activate a virtual environment (optional)

Debe usar un entorno de Python 3.6.x para desarrollar localmente funciones de Python.You should use a Python 3.6.x environment to locally develop Python functions. Ejecute los comandos siguientes para crear y activar un entorno virtual denominado .venv.Run the following commands to create and activate a virtual environment named .venv.

Nota

Si Python no instaló venv en la distribución de Linux, puede instalarlo con el siguiente comando:If Python didn't install venv on your Linux distribution, you can install it using the following command:

sudo apt-get install python3-venv

Bash:Bash:

python -m venv .venv
source .venv/bin/activate

PowerShell o un símbolo del sistema de Windows:PowerShell or a Windows command prompt:

py -m venv .venv
.venv\scripts\activate

Ahora que ha activado el entorno virtual, ejecute los comandos restantes en él.Now that you activated the virtual environment, run the remaining commands in it. Para salir del entorno virtual, ejecute deactivate.To get out of the virtual environment, run deactivate.

Creación de un proyecto local de FunctionsCreate a local functions project

Un proyecto de Functions es el equivalente a una aplicación de funciones en Azure.A functions project is the equivalent of a function app in Azure. Puede tener varias funciones que comparten la misma configuración local y de host.It can have multiple functions that all share the same local and hosting configurations.

  1. En el entorno virtual, ejecute el comando siguiente:In the virtual environment, run the following command:

    func init MyFunctionProj
    
  2. Seleccione python como el tiempo de ejecución de trabajo.Select python as your worker runtime.

    El comando crea una carpeta MyFunctionProj.The command creates a MyFunctionProj folder. Contiene estos tres archivos:It contains these three files:

    • local.settings.json: se usa para almacenar las cadenas de conexión y la configuración de la aplicación cuando la ejecución se realiza a nivel local.local.settings.json: used to store app settings and connection strings when running locally. Este archivo no se publica en Azure.This file doesn't get published to Azure.
    • requirements. txt: contiene la lista de paquetes que el sistema instalará en la publicación en Azure.requirements.txt: contains the list of packages the system will install on publishing to Azure.
    • host.json: contiene las opciones de configuración global que afectan a todas las funciones de una aplicación de funciones.host.json: contains global configuration options that affect all functions in a function app. Este archivo se publica en Azure.This file does get published to Azure.
  3. Vaya a la nueva carpeta MyFunctionProj:Go to the new MyFunctionProj folder:

    cd MyFunctionProj
    

Creación de una funciónCreate a function

Adición de una función al nuevo proyecto.Add a function to the new project.

  1. Para agregar una función a su proyecto, ejecute el siguiente comando:To add a function to your project, run the following command:

    func new
    
  2. Use la flecha hacia abajo para seleccionar la plantilla HTTP trigger.Use your down-arrow to select the HTTP trigger template.

  3. Cuando se le pida un nombre de función, escriba HttpTrigger y, a continuación, presione Entrar.When you're prompted for a function name, enter HttpTrigger and then press Enter.

Estos comandos crean una subcarpeta llamada HttpTrigger.These commands create a subfolder named HttpTrigger. Contiene los archivos siguientes:It contains the following files:

  • function.json: archivo de configuración que define la función, el desencadenador y otros enlaces.function.json: configuration file that defines the function, trigger, and other bindings. Tenga en cuenta que, en este archivo, el valor de scriptFile apunta al archivo que contiene la función, mientras que la matriz bindings define el desencadenador de invocación y los enlaces.Notice that in this file, the value for scriptFile points to the file containing the function, and the bindings array defines the invocation trigger and bindings.

    Cada enlace requiere una dirección, un tipo y un nombre único.Each binding requires a direction, type and a unique name. El desencadenador HTTP tiene un enlace de entrada de tipo httpTrigger y un enlace de salida de tipo http.The HTTP trigger has an input binding of type httpTrigger and output binding of type http.

  • __init__.py: archivo de script que es su función de desencadenador HTTP.__init__.py: script file that is your HTTP triggered function. Tenga en cuenta que este script tiene el valor predeterminado main().Notice that this script has a default main(). Los datos HTTP del desencadenador pasan a la función mediante el req denominado binding parameter.HTTP data from the trigger passes to the function using the req named binding parameter. req, que se define en function.json, es una instancia de la clase azure.functions.HttpRequest.The req, which is defined in function.json, is an instance of the azure.functions.HttpRequest class.

    El objeto devuelto, definido como $return en function.json, es una instancia de la clase azure.functions.HttpResponse.The return object, defined as $return in function.json, is an instance of azure.functions.HttpResponse class. Para más información, vea Enlaces y desencadenadores HTTP de Azure Functions.To learn more, see Azure Functions HTTP triggers and bindings.

Ejecución local de la funciónRun the function locally

La función se ejecuta localmente mediante el entorno de ejecución de Azure Functions.The function runs locally using the Azure Functions runtime.

  1. Este comando inicia la aplicación de funciones:This command starts the function app:

    func host start
    

    Cuando se inicia el host de Azure Functions, escribe una salida similar a la siguiente.When the Azure Functions host starts, it writes something like the following output. Se trunca aquí para que pueda leerlo mejor:It's truncated here so you can read it better:

    
                      %%%%%%
                     %%%%%%
                @   %%%%%%    @
              @@   %%%%%%      @@
           @@@    %%%%%%%%%%%    @@@
         @@      %%%%%%%%%%        @@
           @@         %%%%       @@
             @@      %%%       @@
               @@    %%      @@
                    %%
                    %
    
    ...
    
    Content root path: C:\functions\MyFunctionProj
    Now listening on: http://0.0.0.0:7071
    Application started. Press Ctrl+C to shut down.
    
    ...
    
    Http Functions:
    
            HttpTrigger: http://localhost:7071/api/HttpTrigger
    
    [8/27/2018 10:38:27 PM] Host started (29486ms)
    [8/27/2018 10:38:27 PM] Job host started
    
  2. Copie la dirección URL de la función HttpTrigger que aparece en la salida en entorno de ejecución y péguela en la barra de direcciones del explorador.Copy the URL of your HttpTrigger function from the runtime output and paste it into your browser's address bar.

  3. Agregue la cadena de consulta ?name=<yourname> a esta dirección URL y ejecute la solicitud.Append the query string ?name=<yourname> to this URL and execute the request. La captura de pantalla siguiente muestra la respuesta a la solicitud GET devuelta que la función local devuelve al explorador:The following screenshot shows the response to the GET request that the local function returns to the browser:

    Comprobación local en el explorador

  4. Seleccione Ctrl+C para cerrar la aplicación de funciones.Select Ctrl+C to shut down your function app.

Ahora que ejecutó localmente la función, puede crear la aplicación de función y otros recursos necesarios en Azure.Now that you have run your function locally, you can create the function app and other required resources in Azure.

Crear un grupo de recursosCreate a resource group

Cree un grupo de recursos con el comando az group create.Create a resource group with the az group create command. Un grupo de recursos de Azure es un contenedor lógico en el que se implementan y se administran recursos de Azure como instancias de Function App, bases de datos y cuentas de almacenamiento.An Azure resource group is a logical container into which Azure resources like function apps, databases, and storage accounts are deployed and managed.

En el ejemplo siguiente se crea un grupo de recursos denominado myResourceGroup.The following example creates a resource group named myResourceGroup.
Si no usa Cloud Shell, inicie sesión primero con az login.If you aren't using Cloud Shell, sign in first using az login.

az group create --name myResourceGroup --location westeurope

Conviene crear el grupo de recursos y los recursos en una región cercana.You generally create your resource group and the resources in a region near you.

Creación de una cuenta de Azure StorageCreate an Azure Storage account

Functions usa una cuenta de uso general en Azure Storage para mantener el estado y otra información acerca de sus funciones.Functions uses a general-purpose account in Azure Storage to maintain state and other information about your functions. Cree una cuenta de almacenamiento de uso general en el grupo de recursos que ha creado mediante el comando az storage account create.Create a general-purpose storage account in the resource group you created by using the az storage account create command.

En el siguiente comando, sustituya un nombre de cuenta de almacenamiento único de manera global donde vea el marcador de posición <storage_name>.In the following command, substitute a globally unique storage account name where you see the <storage_name> placeholder. Los nombres de las cuentas de almacenamiento deben tener entre 3 y 24 caracteres y solo pueden incluir números y letras en minúscula.Storage account names must be between 3 and 24 characters in length and may contain numbers and lowercase letters only.

az storage account create --name <storage_name> --location westeurope --resource-group myResourceGroup --sku Standard_LRS

Creación de una aplicación de función en AzureCreate a function app in Azure

Una aplicación de función proporciona un entorno para la ejecución del código de su función.A function app provides an environment for executing your function code. Le permite agrupar funciones como una unidad lógica para facilitar la administración, la implementación y el uso compartido de recursos.It lets you group functions as a logical unit for easier management, deployment, and sharing of resources.

Ejecute el siguiente comando.Run the following command. Reemplace <APP_NAME> por un nombre único de aplicación de funciones.Replace <APP_NAME> with a unique function app name. Reemplace <STORAGE_NAME> por el nombre de la cuenta de almacenamiento.Replace <STORAGE_NAME> with a storage account name. <APP_NAME> también es el dominio DNS predeterminado de la aplicación de función.The <APP_NAME> is also the default DNS domain for the function app. Este nombre debe ser único entre todas las aplicaciones de Azure.This name needs to be unique across all apps in Azure.

Nota

No se pueden hospedar aplicaciones de Windows y Linux en el mismo grupo de recursos.You can't host Linux and Windows apps in the same resource group. Si tiene un grupo de recursos existente llamado myResourceGroup con una aplicación web o aplicación de función de Windows, debe usar un grupo de recursos diferente.If you have an existing resource group named myResourceGroup with a Windows function app or web app, you must use a different resource group.

az functionapp create --resource-group myResourceGroup --os-type Linux \
--consumption-plan-location westeurope  --runtime python \
--name <APP_NAME> --storage-account  <STORAGE_NAME>

El comando anterior también aprovisiona una instancia asociada de Azure Application Insights en el mismo grupo de recursos.The preceding command also provisions an associated Azure Application Insights instance in the same resource group. Puede usar esta instancia para supervisar la aplicación de funciones y ver los registros.You can use this instance to monitor your function app and view logs.

Ahora ya está listo para publicar el proyecto de funciones local en la aplicación de función en Azure.You're now ready to publish your local functions project to the function app in Azure.

Implementación del proyecto de aplicación de función en AzureDeploy the function app project to Azure

Después de crear la aplicación de funciones en Azure, puede usar el comando func azure functionapp publish de Core Tools para implementar el código del proyecto en Azure.After you create the function app in Azure, you can use the func azure functionapp publish Core Tools command to deploy your project code to Azure. En este ejemplo, reemplace <APP_NAME> por el nombre de la aplicación.In this example, replace <APP_NAME> with the name of your app.

func azure functionapp publish <APP_NAME> --build remote

La opción --build remote compila el proyecto de Python de forma remota en Azure desde los archivos del paquete de implementación.The --build remote option builds your Python project remotely in Azure from the files in the deployment package.

Verá una salida similar al del mensaje siguiente.You'll see output similar to the following message. Se trunca aquí para que pueda leerlo mejor:It's truncated here so you can read it better:

Getting site publishing info...
...

Preparing archive...
Uploading content...
Upload completed successfully.
Deployment completed successfully.
Syncing triggers...
Functions in myfunctionapp:
    HttpTrigger - [httpTrigger]
        Invoke url: https://myfunctionapp.azurewebsites.net/api/httptrigger?code=cCr8sAxfBiow548FBDLS1....

Puede copiar el valor Invoke url para HttpTrigger y usarlo para comprobar la función en Azure.You can copy the Invoke url value for your HttpTrigger and use it to verify your function in Azure. La dirección URL contiene un valor de cadena de consulta code que es la clave de función, lo que dificulta que otros usuarios llamen al punto de conexión del desencadenador HTTP en Azure.The URL contains a code query string value that is your function key, which makes it difficult for others to call your HTTP trigger endpoint in Azure.

Comprobación de la función en AzureVerify the function in Azure

Use cURL para comprobar la función implementada.Use cURL to verify the deployed function. Con la dirección URL que copió del paso anterior, anexe la cadena de consulta &name=<yourname> a la dirección URL.Using the URL, including the function key, that you copied from the previous step, append the query string &name=<yourname> to the URL.

Uso de cURL para llamar a la función en Azure.

También puede pegar la dirección URL que copió, incluida la clave de función, en la barra de direcciones del explorador web.You can also paste the copied URL, including the function key, into the address bar of your web browser. Vuelva a anexar la cadena de consulta &name=<yourname> a la dirección URL antes de ejecutar la solicitud.Again, append the query string &name=<yourname> to the URL before you execute the request.

Uso de un explorador web para llamar a la función.

Nota

Para ver los registros casi en tiempo real de una aplicación de Python publicada, utilice Live Metrics Stream de Application Insights.To view near real-time logs for a published Python app, use the Application Insights Live Metrics Stream.

Pasos siguientesNext steps

Ha creado un proyecto de funciones de Python con una función desencadenada por HTTP, lo ha ejecutado en el equipo local y lo ha implementado en Azure.You've created a Python functions project with an HTTP triggered function, run it on your local machine, and deployed it to Azure. Ahora, amplíe la función como sigue...Now, extend your function by...