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

Nota

Python para Azure Functions actualmente se encuentra disponible en versión preliminar.Python for Azure Functions is currently in preview. Para recibir actualizaciones importantes, suscríbase al repositorio de anuncios de Azure App Service en GitHub.To receive important updates, subscribe to the Azure App Service announcements repository on GitHub.

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. La función creada la desencadenan las solicitudes HTTP.The function you create is triggered by HTTP requests. 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 guías de inicio rápido de Azure Functions.This article is the first of two quickstarts for Azure Functions. Después de completar este artículo, agregue el enlace de salida de la cola de Azure Storage a la función.After you complete this article, you add an Azure Storage queue output binding to your function.

Requisitos previosPrerequisites

Antes de empezar, debe hacer lo siguiente:Before you start, you must have the following:

Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.If you don't have an Azure subscription, create a free account before you begin.

Creación y activación de un entorno virtualCreate and activate a virtual environment

Para desarrollar y probar las funciones de Python a nivel local, debe trabajar en un entorno de Python 3.6.To locally develop and test Python functions, you must work in a Python 3.6 environment. Ejecute los comandos siguientes para crear y activar un entorno virtual denominado .env.Run the following commands to create and activate a virtual environment named .env.

Bash:Bash:

python3.6 -m venv .venv
source .venv/bin/activate

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

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

Los comandos restantes se ejecutan dentro del entorno virtual.The remaining commands are run inside the virtual environment.

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

Un proyecto de Functions es el equivalente a una aplicación de función 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.

En el entorno virtual, ejecute el siguiente comando y elija python como el rol de trabajo en tiempo de ejecución.In the virtual environment, run the following command, choosing python as your worker runtime.

func init MyFunctionProj

Se crea una carpeta denominada MyFunctionProj, que contiene los tres archivos siguientes:A folder named MyFunctionProj is created, which contains the following 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 is 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 se instalarán al publicarlos en Azure.requirements.txt contains the list of packages to be installed on publishing to Azure.
  • host.json contiene las opciones de configuración global que afectan a todas las funciones de una aplicación de función.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.

Vaya a la nueva carpeta MyFunctionProj:Navigate to the new MyFunctionProj folder:

cd MyFunctionProj

A continuación, actualice el archivo host.json para habilitar conjuntos de extensiones.Next, you update the host.json file to enable extension bundles.

Creación de una funciónCreate a function

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

Elija la plantilla Desencadenador de HTTP , escriba HttpTrigger como el nombre de la función y, a continuación, presione ENTRAR.Choose the HTTP trigger template, type HttpTrigger as the name for the function, then press Enter.

Se crea una subcarpeta denominada HttpTrigger, que contiene los archivos siguientes:A subfolder named HttpTrigger is created, which 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. Revise el archivo y observe que el valor de scriptFile apunta al archivo que contiene la función, mientras que el desencadenador de invocación y los enlaces se definen en la matriz bindings.Review this file and see that the value for scriptFile points to the file containing the function, while the invocation trigger and bindings are defined in the bindings array.

    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. Revise este script y observe que contiene un valor main() predeterminado.Review this script and see that it contains a default main(). Los datos HTTP del desencadenador se pasan a esta función con el uso del valor req que se llama parámetro de enlace.HTTP data from the trigger is passed to this function using the req named binding parameter. req es una instancia de la clase azure.functions.HttpRequest, que se define en function.json.Defined in function.json, req 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

El comando siguiente inicia la aplicación de función, que se ejecuta localmente mediante el mismo entorno de ejecución de Azure Functions que se encuentra en Azure.The following command starts the function app, which runs locally using the same Azure Functions runtime that is in Azure.

func host start

Cuando se inicia el host de Functions, escribe una salida similar a la siguiente, que se truncó para mejorar la legibilidad:When the Functions host starts, it writes something like the following output, which has been truncated for readability:


                  %%%%%%
                 %%%%%%
            @   %%%%%%    @
          @@   %%%%%%      @@
       @@@    %%%%%%%%%%%    @@@
     @@      %%%%%%%%%%        @@
       @@         %%%%       @@
         @@      %%%       @@
           @@    %%      @@
                %%
                %

...

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/MyHttpTrigger

[8/27/2018 10:38:27 PM] Host started (29486ms)
[8/27/2018 10:38:27 PM] Job host started

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. 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. A continuación, se muestra la respuesta del explorador para la solicitud GET devuelta por la función local:The following shows the response in the browser to the GET request returned by the local function:

Prueba local en el explorador

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. 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 are not using Cloud Shell, sign in first using az login.

az group create --name myResourceGroup --location westeurope

Generalmente se crean 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. Para ver todas las ubicaciones compatibles con los planes de App Service, ejecute el comando az appservice list-locations.To see all supported locations for App Service plans, run the az appservice list-locations command.

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

Después de que se haya creado la cuenta de almacenamiento, la CLI de Azure muestra información similar al ejemplo siguiente:After the storage account has been created, the Azure CLI shows information similar to the following example:

{
  "creationTime": "2017-04-15T17:14:39.320307+00:00",
  "id": "/subscriptions/bbbef702-e769-477b-9f16-bc4d3aa97387/resourceGroups/myresourcegroup/...",
  "kind": "Storage",
  "location": "westeurope",
  "name": "myfunctionappstorage",
  "primaryEndpoints": {
    "blob": "https://myfunctionappstorage.blob.core.windows.net/",
    "file": "https://myfunctionappstorage.file.core.windows.net/",
    "queue": "https://myfunctionappstorage.queue.core.windows.net/",
    "table": "https://myfunctionappstorage.table.core.windows.net/"
  },
     ....
    // Remaining output has been truncated for readability.
}

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 mediante un nombre de aplicación de función único en lugar del marcador de posición <APP_NAME> y el nombre de la cuenta de almacenamiento para <STORAGE_NAME>.Run the following command using a unique function app name in place of the <APP_NAME> placeholder and the storage account name for <STORAGE_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.

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

Nota

Azure Functions, el plan de consumo de Linux está actualmente en versión preliminar y solo está disponible en las siguientes regiones: Oeste de EE. UU., Oeste de Europa y Asia Oriental.Azure Functions, Consumption plan for Linux is currently in preview and only available on following regions: West US, East US, West Europe, East Asia. Además, no se pueden hospedar aplicaciones de Windows y Linux en el mismo grupo de recursos.Moreover, Linux and Windows apps cannot be hosted 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.

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

Una vez creada la aplicación de función en Azure, puede usar el comando func azure functionapp publish de Core Tools para implementar el código del proyecto en Azure.After the function app is created in Azure, you can use the func azure functionapp publish Core Tools command to deploy your project code to Azure. En el comando siguiente, reemplace <APP_NAME> por el nombre de la aplicación del paso anterior.In the following command, replace <APP_NAME> with the name of your app from the previous step.

func azure functionapp publish <APP_NAME>

Verá resultados similares a los siguientes, que se truncaron para mejorar la legibilidad.You will see output similar to the following, which has been truncated for readability.

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....

Copie el valor de la dirección URL de invocación del desencadenador HttpTrigger, que ahora puede usar para probar su función en Azure.Copy the Invoke URL value for your HttpTrigger, which you can now use to test your function in Azure. La dirección URL contiene un valor de cadena de consulta code que es la clave de la función.The URL contains a code query string value that is your function key. Esta clave dificulta que otros llamen a su punto de conexión del desencadenador HTTP en Azure.This key makes it difficult for others to call your HTTP trigger endpoint in Azure.

Prueba de la función en AzureTest the function in Azure

Use cURL para probar la función implementada.Use cURL to test 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 como en el ejemplo siguiente:Using the URL that you copied from the previous step, append the query string &name=<yourname> to the URL, as in the following example:

curl https://myfunctionapp.azurewebsites.net/api/httptrigger?code=cCr8sAxfBiow548FBDLS1....&name=<yourname>

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

También puede pegar la dirección URL que copió en la barra de direcciones del explorador web.You can also paste the copied URL in to the address 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.

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...