Inicio rápido: Creación de una función en Azure que responda a solicitudes HTTPQuickstart: Create a function in Azure that responds to HTTP requests

En este artículo se usan herramientas de línea de comandos para crear una función basada en biblioteca de clases de C# que responda a solicitudes HTTP.In this article, you use command-line tools to create a C# class library-based function that responds to HTTP requests. Después de probar el código localmente, se implementa en el entorno sin servidor de Azure Functions.After testing the code locally, you deploy it to the serverless environment of Azure Functions.

En este artículo se usan herramientas de línea de comandos para crear una función de JavaScript que responda a solicitudes HTTP.In this article, you use command-line tools to create a JavaScript function that responds to HTTP requests. Después de probar el código localmente, se implementa en el entorno sin servidor de Azure Functions.After testing the code locally, you deploy it to the serverless environment of Azure Functions.

En este artículo se usan herramientas de línea de comandos para crear una función de TypeScript que responda a solicitudes HTTP.In this article, you use command-line tools to create a TypeScript function that responds to HTTP requests. Después de probar el código localmente, se implementa en el entorno sin servidor de Azure Functions.After testing the code locally, you deploy it to the serverless environment of Azure Functions.

En este artículo se usan herramientas de línea de comandos para crear una función de PowerShell que responda a solicitudes HTTP.In this article, you use command-line tools to create a PowerShell function that responds to HTTP requests. Después de probar el código localmente, se implementa en el entorno sin servidor de Azure Functions.After testing the code locally, you deploy it to the serverless environment of Azure Functions.

En este artículo se usan herramientas de línea de comandos para crear una función de Python que responda a solicitudes HTTP.In this article, you use command-line tools to create a Python function that responds to HTTP requests. Después de probar el código localmente, se implementa en el entorno sin servidor de Azure Functions.After testing the code locally, you deploy it to the serverless environment of Azure Functions.

En este artículo se usan herramientas de línea de comandos para crear una función de Java que responda a solicitudes HTTP.In this article, you use command-line tools to create a Java function that responds to HTTP requests. Después de probar el código localmente, se implementa en el entorno sin servidor de Azure Functions.After testing the code locally, you deploy it to the serverless environment of Azure Functions.

Este inicio rápido supone un pequeño costo en su cuenta de Azure.Completing this quickstart incurs a small cost of a few USD cents or less in your Azure account.

También hay una versión basada en Visual Studio Code de este artículo.There is also a Visual Studio Code-based version of this article.

Nota

Si Maven no es la herramienta de desarrollo elegida, consulte nuestros tutoriales análogos para desarrolladores de Java con Gradle, IntelliJ IDEA y Visual Studio Code.If Maven is not your prefered development tool, check out our similar tutorials for Java developers using Gradle, IntelliJ IDEA and Visual Studio Code.

Configuración del entorno localConfigure your local environment

Antes de empezar, debe disponer de lo siguiente:Before you begin, you must have the following:

  • Versiones de Node.js, Active LTS y Maintenance LTS (se recomiendan 8.11.1 y 10.14.1).Node.js, Active LTS and Maintenance LTS versions (8.11.1 and 10.14.1 recommended).

Importante

La variable de entorno JAVA_HOME se debe establecer en la ubicación de instalación del JDK para completar esta guía de inicio rápido.The JAVA_HOME environment variable must be set to the install location of the JDK to complete this quickstart.

Comprobación de requisitos previosPrerequisite check

  • En una ventana de terminal o de comandos, ejecute func --version para comprobar que la versión de Azure Functions Core Tools es 2.7.1846 u otra posterior.In a terminal or command window, run func --version to check that the Azure Functions Core Tools are version 2.7.1846 or later.

  • Ejecute az --version para comprobar que la versión de la CLI de Azure es 2.0.76 o posterior.Run az --version to check that the Azure CLI version is 2.0.76 or later.

  • Ejecute az login para iniciar sesión en Azure y comprobar una suscripción activa.Run az login to sign in to Azure and verify an active subscription.

  • Ejecute python --version (Linux/MacOS) o py --version (Windows) para comprobar que la versión de Python es la 3.8.x, 3.7.x o 3.6.x.Run python --version (Linux/MacOS) or py --version (Windows) to check your Python version reports 3.8.x, 3.7.x or 3.6.x.

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

En una carpeta adecuada, ejecute los comandos siguientes para crear y activar un entorno virtual denominado .venv.In a suitable folder, run the following commands to create and activate a virtual environment named .venv. Asegúrese de usar Python 3.8, 3.7 o 3.6, que son compatibles con Azure Functions.Be sure to use Python 3.8, 3.7 or 3.6, which are supported by Azure Functions.

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

Si Python no instaló el paquete venv en la distribución de Linux, ejecute el siguiente comando:If Python didn't install the venv package on your Linux distribution, run the following command:

sudo apt-get install python3-venv

Ejecute todos los comandos siguientes en este entorno virtual activado.You run all subsequent commands in this activated virtual environment. (Para salir del entorno virtual, ejecute deactivate).(To exit the virtual environment, run deactivate.)

Creación de un proyecto de función localCreate a local function project

En Azure Functions, un proyecto de función es un contenedor para una o varias funciones individuales que responden a un desencadenador específico.In Azure Functions, a function project is a container for one or more individual functions that each responds to a specific trigger. Todas las funciones de un proyecto comparten las mismas configuraciones locales y de hospedaje.All functions in a project share the same local and hosting configurations. En esta sección, se crea un proyecto de función que contiene una sola función.In this section, you create a function project that contains a single function.

Ejecute el comando func init, de la manera siguiente, para crear un proyecto de funciones en una carpeta llamada LocalFunctionProj con el entorno de ejecución especificado:Run the func init command, as follows, to create a functions project in a folder named LocalFunctionProj with the specified runtime:

func init LocalFunctionProj --python
func init LocalFunctionProj --dotnet
func init LocalFunctionProj --javascript
func init LocalFunctionProj --typescript
func init LocalFunctionProj --powershell

En una carpeta vacía, ejecute el comando siguiente para generar el proyecto de Functions desde un arquetipo Maven.In an empty folder, run the following command to generate the Functions project from a Maven archetype.

mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype 

Maven le pide los valores necesarios para finalizar la generación del proyecto en la implementación.Maven asks you for values needed to finish generating the project on deployment.
Indique los siguientes valores cuando se le solicite:Provide the following values when prompted:

PromptPrompt ValueValue DescripciónDescription
groupIdgroupId com.fabrikam Un valor que identifica de forma única su proyecto entre todos los demás y que sigue las reglas de nomenclatura de paquetes de Java.A value that uniquely identifies your project across all projects, following the package naming rules for Java.
artifactIdartifactId fabrikam-functions Un valor que es el nombre del archivo jar, sin un número de versión.A value that is the name of the jar, without a version number.
versionversion 1.0-SNAPSHOT Elija el valor predeterminado.Choose the default value.
packagepackage com.fabrikam.functions Un valor que es el paquete de Java para el código de función generado.A value that is the Java package for the generated function code. Use el valor predeterminado.Use the default.

Escriba Y o presione Entrar para confirmar.Type Y or press Enter to confirm.

Maven crea los archivos del proyecto en una carpeta nueva llamada artifactId que, en este ejemplo, es fabrikam-functions.Maven creates the project files in a new folder with a name of artifactId, which in this example is fabrikam-functions.

Vaya a la carpeta del proyecto:Navigate into the project folder:

cd LocalFunctionProj
cd fabrikam-functions

Esta carpeta contiene varios archivos del proyecto, incluidos los archivos de configuración local.settings.json y host.json.This folder contains various files for the project, including configurations files named local.settings.json and host.json. Como local.settings.json puede contener secretos descargados de Azure, el archivo se excluye del control de código fuente de forma predeterminada en el archivo .gitignore.Because local.settings.json can contain secrets downloaded from Azure, the file is excluded from source control by default in the .gitignore file.

Agregue una función al proyecto mediante el comando siguiente, donde el argumento --name es el nombre único de la función (HttpExample) y el argumento --template especifica el desencadenador de esta (HTTP).Add a function to your project by using the following command, where the --name argument is the unique name of your function (HttpExample) and the --template argument specifies the function's trigger (HTTP).

func new --name HttpExample --template "HTTP trigger"

func new crea un archivo de código HttpExample.cs.func new creates a HttpExample.cs code file.

func new crea una subcarpeta que coincide con el nombre de la función que contiene un archivo de código apropiado para el lenguaje elegido del proyecto y un archivo de configuración denominado function.json.func new creates a subfolder matching the function name that contains a code file appropriate to the project's chosen language and a configuration file named function.json.

(Opcional) Examen del contenido del archivo(Optional) Examine the file contents

Si lo desea, puede ir a Ejecución local de la función y examine el contenido del archivo posteriormente.If desired, you can skip to Run the function locally and examine the file contents later.

HttpExample.csHttpExample.cs

HttpExample.cs contiene un método Run que recibe datos de solicitud en la variable req de tipo HttpRequest que está decorado con HttpTriggerAttribute, que define el comportamiento del desencadenador.HttpExample.cs contains a Run method that receives request data in the req variable is an HttpRequest that's decorated with the HttpTriggerAttribute, which defines the trigger behavior.

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;

namespace LocalFunctionProj
{
    public static class HttpExample
    {
        [FunctionName("HttpExample")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            string name = req.Query["name"];

            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            dynamic data = JsonConvert.DeserializeObject(requestBody);
            name = name ?? data?.name;

            return name != null
                ? (ActionResult)new OkObjectResult($"Hello, {name}")
                : new BadRequestObjectResult("Please pass a name on the query string or in the request body");
        }
    }
}

El objeto de devolución es un objeto ActionResult que devuelve un mensaje de respuesta como OkObjectResult (200) o BadRequestObjectResult (400).The return object is an ActionResult that returns an response message as either an OkObjectResult (200) or a BadRequestObjectResult (400). Para más información, vea Enlaces y desencadenadores HTTP de Azure Functions.To learn more, see Azure Functions HTTP triggers and bindings.

Function.javaFunction.java

Function.java contiene un método run que recibe datos de solicitud en la variable request de tipo HttpRequestMessage que está decorada con la anotación HttpTrigger, que define el comportamiento del desencadenador.Function.java contains a run method that receives request data in the request variable is an HttpRequestMessage that's decorated with the HttpTrigger annotation, which defines the trigger behavior.

package com.function;

import java.util.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.*;

/**
 * Azure Functions with HTTP Trigger.
 */
public class Function {
    /**
     * This function listens at endpoint "/api/HttpExample". Two ways to invoke it using "curl" command in bash:
     * 1. curl -d "HTTP Body" {your host}/api/HttpExample
     * 2. curl "{your host}/api/HttpExample?name=HTTP%20Query"
     */
    @FunctionName("HttpExample")
    public HttpResponseMessage run(
            @HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) 
            HttpRequestMessage<Optional<String>> request, 
            @QueueOutput(name = "msg", queueName = "outqueue", 
            connection = "AzureWebJobsStorage") OutputBinding<String> msg, 
            final ExecutionContext context) {
        context.getLogger().info("Java HTTP trigger processed a request.");

        // Parse query parameter
        String query = request.getQueryParameters().get("name");
        String name = request.getBody().orElse(query);

        if (name == null) {
            return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
            .body("Please pass a name on the query string or in the request body").build();
        } else {
            // Write the name to the message queue. 
            msg.setValue(name);

            return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
        }
    }
}

El mensaje de respuesta lo genera la API HttpResponseMessage.Builder.The response message is generated by the HttpResponseMessage.Builder API.

pom.xmlpom.xml

La configuración de los recursos de Azure creados para hospedar la aplicación se define en el elemento configuration del complemento con un valor de groupId de com.microsoft.azure en el archivo pom.xml generado.Settings for the Azure resources created to host your app are defined in the configuration element of the plugin with a groupId of com.microsoft.azure in the generated pom.xml file. Por ejemplo, el elemento de configuración siguiente indica a una implementación basada en Maven que cree una aplicación de función en el grupo de recursos java-functions-group de la región westus.For example, the configuration element below instructs a Maven-based deployment to create a function app in the java-functions-group resource group in the westus region. La propia aplicación de función se ejecuta en Windows hospedada en el plan java-functions-app-service-plan, que, de forma predeterminada, es un plan de consumo sin servidor.The function app itself runs on Windows hosted in the java-functions-app-service-plan plan, which by default is a serverless Consumption plan.

<plugin>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>azure-functions-maven-plugin</artifactId>
    <configuration>
        <!-- function app name -->
        <appName>${functionAppName}</appName>
        <!-- function app resource group -->
        <resourceGroup>java-functions-group</resourceGroup>
        <!-- function app service plan name -->
        <appServicePlanName>java-functions-app-service-plan</appServicePlanName>
        <!-- function app region-->
        <!-- refers https://github.com/microsoft/azure-maven-plugins/tree/develop/azure-functions-maven-plugin#supported-regions for all valid values -->
        <region>westus</region>
        <!-- function pricingTier, default to be consumption if not specified -->
        <!-- refers https://github.com/microsoft/azure-maven-plugins/tree/develop/azure-functions-maven-plugin#supported-pricing-tiers for all valid values -->
        <!-- <pricingTier></pricingTier> -->
        <runtime>
            <!-- runtime os, could be windows, linux or docker-->
            <os>windows</os>
            <!-- for docker function, please set the following parameters -->
            <!-- <image>[hub-user/]repo-name[:tag]</image> -->
            <!-- <serverId></serverId> -->
            <!-- <registryUrl></registryUrl>  -->
        </runtime>
        <appSettings>
            <property>
                <name>FUNCTIONS_EXTENSION_VERSION</name>
                <value>~3</value>
            </property>
        </appSettings>
    </configuration>
    <executions>
        <execution>
            <id>package-functions</id>
            <goals>
                <goal>package</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Puede cambiar esta configuración para controlar cómo se crean los recursos en Azure, por ejemplo, cambiando runtime.os de windows a linux antes de la implementación inicial.You can change these settings to control how resources are created in Azure, such as by changing runtime.os from windows to linux before initial deployment. Para obtener una lista completa de los valores de configuración admitidos por el complemento Maven, consulte los detalles de configuración.For a complete list of settings supported by the Maven plug-in, see the configuration details.

FunctionTest.javaFunctionTest.java

El arquetipo también genera una prueba unitaria para la función.The archetype also generates a unit test for your function. Al cambiar la función para agregar enlaces o agregar nuevas funciones al proyecto, también deberá modificar las pruebas en el archivo FunctionTest.java.When you change your function to add bindings or add new functions to the project, you'll also need to modify the tests in the FunctionTest.java file.

__init__.py__init__.py

__init__.py contiene una función main() de Python que se desencadena en función de la configuración de function.json.__init__.py contains a main() Python function that's triggered according to the configuration in function.json.

import logging

import azure.functions as func


def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    name = req.params.get('name')
    if not name:
        try:
            req_body = req.get_json()
        except ValueError:
            pass
        else:
            name = req_body.get('name')

    if name:
        return func.HttpResponse(f"Hello, {name}. This HTTP triggered function executed successfully.")
    else:
        return func.HttpResponse(
             "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.",
             status_code=200
        )

Con un desencadenador HTTP, la función recibe datos de solicitud en la variable req, como se define en function.json.For an HTTP trigger, the function receives request data in the variable req as defined in function.json. req es una instancia de la clase azure.functions.HttpRequest.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.

index.jsindex.js

index.js exporta una función que se desencadena según la configuración de function.json.index.js exports a function that's triggered according to the configuration in function.json.

module.exports = async function (context, req) {
    context.log('JavaScript HTTP trigger function processed a request.');

    const name = (req.query.name || (req.body && req.body.name));
    const responseMessage = name
        ? "Hello, " + name + ". This HTTP triggered function executed successfully."
        : "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.";

    context.res = {
        // status: 200, /* Defaults to 200 */
        body: responseMessage
    };
}

Con un desencadenador HTTP, la función recibe datos de solicitud en la variable req, como se define en function.json.For an HTTP trigger, the function receives request data in the variable req as defined in function.json. El objeto devuelto, definido como $return en function.json, es la respuesta.The return object, defined as $return in function.json, is the response. Para más información, vea Enlaces y desencadenadores HTTP de Azure Functions.To learn more, see Azure Functions HTTP triggers and bindings.

index.tsindex.ts

index.ts exporta una función que se desencadena de acuerdo con la configuración de function.json.index.ts exports a function that's triggered according to the configuration in function.json.

import { AzureFunction, Context, HttpRequest } from "@azure/functions"

const httpTrigger: AzureFunction = async function (context: Context, req: HttpRequest): Promise<void> {
    context.log('HTTP trigger function processed a request.');
    const name = (req.query.name || (req.body && req.body.name));
    const responseMessage = name
        ? "Hello, " + name + ". This HTTP triggered function executed successfully."
        : "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.";

    context.res = {
        // status: 200, /* Defaults to 200 */
        body: responseMessage
    };

};

export default httpTrigger;

Con un desencadenador HTTP, la función recibe datos de solicitud en la variable req de tipo HttpRequest, como se define en function.json.For an HTTP trigger, the function receives request data in the variable req of type HttpRequest as defined in function.json. El objeto devuelto, definido como $return en function.json, es la respuesta.The return object, defined as $return in function.json, is the response.

run.ps1run.ps1

run.ps1 define un script de función que se desencadena de acuerdo con la configuración de function.json.run.ps1 defines a function script that's triggered according to the configuration in function.json.

using namespace System.Net

# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)

# Write to the Azure Functions log stream.
Write-Host "PowerShell HTTP trigger function processed a request."

# Interact with query parameters or the body of the request.
$name = $Request.Query.Name
if (-not $name) {
    $name = $Request.Body.Name
}

$body = "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."

if ($name) {
    $body = "Hello, $name. This HTTP triggered function executed successfully."
}

# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
    StatusCode = [HttpStatusCode]::OK
    Body = $body
})

Con un desencadenador HTTP, la función recibe los datos de solicitud pasados al parámetro $Request definido en function.json.For an HTTP trigger, the function receives request data passed to the $Request param defined in function.json. El objeto devuelto, definido como Response en function.json, se pasa al cmdlet Push-OutputBinding como respuesta.The return object, defined as Response in function.json, is passed to the Push-OutputBinding cmdlet as the response.

function.jsonfunction.json

function.json es un archivo de configuración que define la entrada y salida bindings de la función, lo que incluye el tipo de desencadenador.function.json is a configuration file that defines the input and output bindings for the function, including the trigger type.

Si lo desea, puede cambiar scriptFile para invocar otro un archivo de Python.You can change scriptFile to invoke a different Python file if desired.

{
    "scriptFile": "__init__.py",
    "bindings": [
        {
            "authLevel": "function",
            "type": "httpTrigger",
            "direction": "in",
            "name": "req",
            "methods": [
                "get",
                "post"
            ]
        },
        {
            "type": "http",
            "direction": "out",
            "name": "$return"
        }
    ]
}
{
    "bindings": [
        {
            "authLevel": "function",
            "type": "httpTrigger",
            "direction": "in",
            "name": "req",
            "methods": [
                "get",
                "post"
            ]
        },
        {
            "type": "http",
            "direction": "out",
            "name": "res"
        }
    ]
}
{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "Request",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "Response"
    }
  ]
}

Cada enlace requiere una dirección, un tipo y un nombre único.Each binding requires a direction, a 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.

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

Para ejecutar una función, inicie el host en tiempo de ejecución local de Azure Functions desde la carpeta LocalFunctionProj:Run your function by starting the local Azure Functions runtime host from the LocalFunctionProj folder:

func start
npm install
npm start
mvn clean package 
mvn azure-functions:run

Hacia el final de la salida, deberían aparecer las líneas siguientes:Toward the end of the output, the following lines should appear:

...

Now listening on: http://0.0.0.0:7071
Application started. Press Ctrl+C to shut down.

Http Functions:

        HttpExample: [GET,POST] http://localhost:7071/api/HttpExample
...

Nota

Si HttpExample no aparece como se muestra a continuación, es probable que haya iniciado el host desde fuera de la carpeta raíz del proyecto.If HttpExample doesn't appear as shown below, you likely started the host from outside the root folder of the project. En ese caso, use Ctrl+C para detener el host, vaya a la carpeta raíz del proyecto y vuelva a ejecutar el comando anterior.In that case, use Ctrl+C to stop the host, navigate to the project's root folder, and run the previous command again.

Copie la dirección URL de la función HttpExample de esta salida en un explorador y anexe la cadena de consulta ?name=<your-name>, lo que hará que la dirección URL completa sea http://localhost:7071/api/HttpExample?name=Functions.Copy the URL of your HttpExample function from this output to a browser and append the query string ?name=<your-name>, making the full URL like http://localhost:7071/api/HttpExample?name=Functions. El explorador debe mostrar un mensaje como este Hello Functions:The browser should display a message like Hello Functions:

Resultado de la ejecución de la función localmente en el explorador

El terminal en el que inició el proyecto también muestra la salida del registro cuando realiza solicitudes.The terminal in which you started your project also shows log output as you make requests.

Cuando esté listo, presione Ctrl+C y elija y para detener el host de Functions.When you're ready, use Ctrl+C and choose y to stop the functions host.

Creación de recursos auxiliares de Azure para la funciónCreate supporting Azure resources for your function

Antes de poder implementar el código de la función en Azure, debe crear tres recursos:Before you can deploy your function code to Azure, you need to create three resources:

  • Un grupo de recursos, que es un contenedor lógico de recursos relacionados.A resource group, which is a logical container for related resources.
  • Una cuenta de almacenamiento, que mantiene el estado y otra información sobre los proyectos.A Storage account, which maintains state and other information about your projects.
  • Una aplicación de funciones, que proporciona el entorno para ejecutar el código de función.A function app, which provides the environment for executing your function code. Una aplicación de funciones se asigna al proyecto de funciones y le permite agrupar funciones como una unidad lógica para facilitar la administración, la implementación y el uso compartido de recursos.A function app maps to your local function project and lets you group functions as a logical unit for easier management, deployment, and sharing of resources.

Use los siguientes comandos de la CLI de Azure para crear estos elementos.Use the following Azure CLI commands to create these items. Cada comando proporciona una salida JSON al finalizar.Each command provides JSON output upon completion.

Si aún no lo ha hecho, inicie sesión en Azure con el comando az login:If you haven't done so already, sign in to Azure with the az login command:

az login

Para crear un grupo de recursos, use el comando az group create.Create a resource group with the az group create command. En el ejemplo siguiente se crea un grupo de recursos denominado AzureFunctionsQuickstart-rg en la región westeurope.The following example creates a resource group named AzureFunctionsQuickstart-rg in the westeurope region. (Por lo general, tanto los grupos de recursos como los recursos se crean en una región cercana y se utiliza alguna de las regiones disponibles del comando az account list-locations).(You generally create your resource group and resources in a region near you, using an available region from the az account list-locations command.)

az group create --name AzureFunctionsQuickstart-rg --location westeurope

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 AzureFunctionsQuickstart-rg 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 AzureFunctionsQuickstart-rg with a Windows function app or web app, you must use a different resource group.

Cree una cuenta de almacenamiento de uso general en el grupo de recursos con el comando az storage account create.Create a general-purpose storage account in your resource group and region by using the az storage account create command. En el siguiente ejemplo, reemplace <STORAGE_NAME> por un nombre único global que sea adecuado.In the following example, replace <STORAGE_NAME> with a globally unique name appropriate to you. Los nombres deben contener entre 3 y 24 caracteres y solo letras minúsculas.Names must contain three to 24 characters numbers and lowercase letters only. Standard_LRS especifica una cuenta de uso general, que es compatible con Functions.Standard_LRS specifies a general-purpose account, which is supported by Functions.

az storage account create --name <STORAGE_NAME> --location westeurope --resource-group AzureFunctionsQuickstart-rg --sku Standard_LRS

Este inicio rápido solo le supondrá unos pequeños gastos a la cuenta de almacenamiento.The storage account incurs only a few cents (USD) for this quickstart.

Cree la aplicación de funciones mediante el comando az functionapp create.Create the function app using the az functionapp create command. En el ejemplo siguiente, reemplace <STORAGE_NAME> por el nombre de la cuenta que usó en el paso anterior y <APP_NAME> por un nombre único global que le resulte adecuado.In the following example, replace <STORAGE_NAME> with the name of the account you used in the previous step, and replace <APP_NAME> with a globally unique name appropriate to you. <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.

Si usa Python 3.8, cambie --runtime-version a 3.8 y --functions_version a 3.If you are using Python 3.8, change --runtime-version to 3.8 and --functions_version to 3.

Si usa Python 3.6, cambie --runtime-version a 3.6.If you are using Python 3.6, change --runtime-version to 3.6.

az functionapp create --resource-group AzureFunctionsQuickstart-rg --os-type Linux --consumption-plan-location westeurope --runtime python --runtime-version 3.7 --functions-version 2 --name <APP_NAME> --storage-account <STORAGE_NAME>

Si usa Node.js 8, cambie también --runtime-version a 8.If you are using Node.js 8, also change --runtime-version to 8.

az functionapp create --resource-group AzureFunctionsQuickstart-rg --consumption-plan-location westeurope --runtime node --runtime-version 10 --functions-version 2 --name <APP_NAME> --storage-account <STORAGE_NAME>
az functionapp create --resource-group AzureFunctionsQuickstart-rg --consumption-plan-location westeurope --runtime dotnet --functions-version 2 --name <APP_NAME> --storage-account <STORAGE_NAME>
az functionapp create --resource-group AzureFunctionsQuickstart-rg --consumption-plan-location westeurope --runtime powershell --functions-version 2 --name <APP_NAME> --storage-account <STORAGE_NAME>

Este comando crea una aplicación de funciones que se ejecuta en el entorno de ejecución del lenguaje especificado en el plan de consumo de Azure Functions, que es gratuito para la cantidad de uso que se realiza aquí.This command creates a function app running in your specified language runtime under the Azure Functions Consumption Plan, which is free for the amount of usage you incur here. El comando también aprovisiona una instancia asociada de Azure Application Insights en el mismo grupo de recursos con la que puede supervisar la aplicación de funciones y ver registros.The command also provisions an associated Azure Application Insights instance in the same resource group, with which you can monitor your function app and view logs. Para más información, consulte Supervisión de Azure Functions.For more information, see Monitor Azure Functions. La instancia no incurrirá en ningún costo hasta que se active.The instance incurs no costs until you activate it.

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

Antes de usar Core Tools para implementar el proyecto en Azure, creará una compilación lista para producción de archivos de JavaScript a partir de los archivos de origen de TypeScript.Before you use Core Tools to deploy your project to Azure, you create a production-ready build of JavaScript files from the TypeScript source files.

El siguiente comando prepara el proyecto de TypeScript para la implementación:The following command prepares your TypeScript project for deployment:

npm run build:production 

Con los recursos necesarios en vigor, ya está listo para implementar el proyecto de funciones local en la aplicación de funciones de Azure mediante el comando func azure functionapp publish.With the necessary resources in place, you're now ready to deploy your local functions project to the function app in Azure by using the func azure functionapp publish command. En el ejemplo siguiente, reemplace <APP_NAME> por el nombre de su aplicación.In the following example, replace <APP_NAME> with the name of your app.

func azure functionapp publish <APP_NAME>

Si aparece el error "Can't find app with name..." (No se encuentra la aplicación...), espere unos segundos e inténtelo de nuevo, ya que es posible que Azure no haya inicializado completamente la aplicación después del comando az functionapp create anterior.If you see the error, "Can't find app with name ...", wait a few seconds and try again, as Azure may not have fully initialized the app after the previous az functionapp create command.

El comando de publicación muestra un resultado similar a lo que se muestra a continuación (se ha truncado para que resulte más simple):The publish command shows results similar to the following output (truncated for simplicity):

...

Getting site publishing info...
Creating archive for current directory...
Performing remote build for functions project.

...

Deployment successful.
Remote build succeeded!
Syncing triggers...
Functions in msdocs-azurefunctions-qs:
    HttpExample - [httpTrigger]
        Invoke url: https://msdocs-azurefunctions-qs.azurewebsites.net/api/httpexample?code=KYHrydo4GFe9y0000000qRgRJ8NdLFKpkakGJQfC3izYVidzzDN4gQ==

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

La primera vez que implementa un proyecto de funciones, se crea una aplicación de funciones y los recursos relacionados en Azure.A function app and related resources are created in Azure when you first deploy your functions project. La configuración de los recursos de Azure que se crean para hospedar la aplicación se define en el archivo pom.xml.Settings for the Azure resources created to host your app are defined in the pom.xml file. En este artículo, aceptará los valores predeterminados.In this article, you'll accept the defaults.

Sugerencia

Para crear una aplicación de función que se ejecute en Linux en lugar de Windows, cambie el elemento runtime.os del archivo pom.xml de windows a linux.To create a function app running on Linux instead of Windows, change the runtime.os element in the pom.xml file from windows to linux. La ejecución de Linux en un plan de consumo se admite en estas regiones.Running Linux in a consumption plan is supported in these regions. No puede tener aplicaciones que se ejecuten en Linux y aplicaciones que se ejecuten en Windows en el mismo grupo de recursos.You can't have apps that run on Linux and apps that run on Windows in the same resource group.

Antes de poder implementar, use el comando az login de la CLI de Azure para iniciar sesión en la suscripción de Azure.Before you can deploy, use the az login Azure CLI command to sign in to your Azure subscription.

az login

Use el siguiente comando para implementar el proyecto en una nueva aplicación de funciones.Use the following command to deploy your project to a new function app.

mvn azure-functions:deploy

Esta operación crea los siguientes recursos en Azure:This creates the following resources in Azure:

  • Un grupo de recursosResource group. Se nombra como java-functions-group.Named as java-functions-group.
  • Una cuenta de almacenamientoStorage account. Necesaria con Functions.Required by Functions. El nombre se genera aleatoriamente según los requisitos de nombre de la cuenta de almacenamiento.The name is generated randomly based on Storage account name requirements.
  • Plan de hospedaje.Hosting plan. El hospedaje sin servidor de la aplicación de función en la región westus.Serverless hosting for your function app in the westus region. El nombre es java-functions-app-service-plan.The name is java-functions-app-service-plan.
  • Aplicación de funciones.Function app. Una aplicación de funciones es la unidad de implementación y ejecución de las funciones.A function app is the deployment and execution unit for your functions. El nombre se genera de forma aleatoria según el valor de artifactId, anexado con un número generado de forma aleatoria.The name is randomly generated based on your your artifactId, appended with a randomly generated number.

La implementación empaqueta los archivos de proyecto y los implementa en la nueva aplicación de función mediante la implementación de archivos ZIP.The deployment packages the project files and deploys them to the new function app using zip deployment. El código se ejecuta desde el paquete de implementación en Azure.The code runs from the deployment package in Azure.

Invocación de la función en AzureInvoke the function on Azure

Como la función usa un desencadenador HTTP, para invocarla es preciso realizar una solicitud HTTP a su dirección URL en el explorador o con una herramienta como CURL.Because your function uses an HTTP trigger, you invoke it by making an HTTP request to its URL in the browser or with a tool like curl. En ambas instancias, el parámetro de dirección URL code es la clave de función exclusiva que autoriza la invocación del punto de conexión de la función.In both instances, the code URL parameter is your unique function key that authorizes the invocation of your function endpoint.

Copie la dirección URL de invocación completa que se muestra en la salida del comando de publicación en una barra de direcciones del explorador, y anexe el parámetro de consulta &name=Functions.Copy the complete Invoke URL shown in the output of the publish command into a browser address bar, appending the query parameter &name=Functions. El explorador debe mostrar una salida similar a cuando ejecutó la función localmente.The browser should display similar output as when you ran the function locally.

La salida de la función ejecutada en Azure en un explorador

Sugerencia

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

Limpieza de recursosClean up resources

Si continúa con el paso siguiente, Adición de un enlace de salida de la cola de Azure Storage, conserve todos los recursos intactos, ya que va a crear a partir de lo que ya ha hecho.If you continue to the next step, Add an Azure Storage queue output binding, keep all your resources in place as you'll build on what you've already done.

De lo contrario, use el siguiente comando para eliminar el grupo de recursos y todos los recursos que contiene para evitar incurrir en costos adicionales.Otherwise, use the following command to delete the resource group and all its contained resources to avoid incurring further costs.

az group delete --name AzureFunctionsQuickstart-rg
az group delete --name java-functions-group

Pasos siguientesNext steps