Codificación y comprobación de las funciones de Azure Functions en un entorno localCode and test Azure Functions locally

A pesar de que Azure Portal proporciona un conjunto completo de herramientas para desarrollar y probar Azure Functions, muchos desarrolladores prefieren desarrollar productos localmente.While the Azure portal provides a full set of tools for developing and testing Azure Functions, many developers prefer a local development experience. Azure Functions facilita el uso de su editor de código favorito y de las herramientas de desarrollo locales para desarrollar y probar sus funciones en un equipo local.Azure Functions makes it easy to use your favorite code editor and local development tools to develop and test your functions on your local computer. Las funciones pueden desencadenarse a partir de eventos de Azure, y puede depurar sus funciones en C# y JavaScript en el equipo local.Your functions can trigger on events in Azure, and you can debug your C# and JavaScript functions on your local computer.

Si es un desarrollador de C# de Visual Studio, Azure Functions también permite la integración con Visual Studio 2017.If you are a Visual Studio C# developer, Azure Functions also integrates with Visual Studio 2017.

Importante

No mezcle el desarrollo local con el desarrollo del portal en la misma aplicación de función.Do not mix local development with portal development in the same function app. Cuando cree y publique funciones desde un proyecto local, no debe intentar mantener o modificar el código del proyecto en el portal.When you create and publish functions from a local project, you should not try to maintain or modify project code in the portal.

Instalación de Azure Functions Core ToolsInstall the Azure Functions Core Tools

Azure Functions Core Tools es una versión local del entorno en tiempo de ejecución de Azure Functions que puede ejecutar en el equipo de desarrollo local.Azure Functions Core Tools is a local version of the Azure Functions runtime that you can run on your local development computer. No se trata de un emulador o simulador.It's not an emulator or simulator. Se trata del mismo entorno de ejecución que se usa en Functions en Azure.It's the same runtime that powers Functions in Azure. Hay dos versiones de Azure Functions Core Tools, una para la versión 1.x del entorno en tiempo de ejecución y otra para la versión 2.x.There are two versions of Azure Functions Core Tools, one for version 1.x of the runtime and one for version 2.x. Ambas versiones se proporcionan como un paquete npm.Both versions are provided as an npm package.

Nota

Antes de instalar cualquiera de ellas, debe instalar NodeJS, que incluye npm.Before you install either version, you must install NodeJS, which includes npm. Para la versión 2.x de las herramientas, solo se admite Node.js 8.5 y versiones posteriores.For version 2.x of the tools, only Node.js 8.5 and later versions are supported.

Entorno en tiempo de ejecución versión 1.xVersion 1.x runtime

La versión original de las herramientas usa el entorno en tiempo de ejecución versión 1.x de Functions.The original version of the tools uses the Functions 1.x runtime. Esta versión usa .NET Framework y solo se admite en equipos con Windows.This version uses the .NET Framework and is only supported on Windows computers. Use el siguiente comando para instalar las herramientas de la versión 1.x:Use the following command to install the version 1.x tools:

npm install -g azure-functions-core-tools

Entorno en tiempo de ejecución versión 2.xVersion 2.x runtime

La versión 2.x de las herramientas usa el entorno en tiempo de ejecución 2.x de Azure Functions, que se basa en .NET Core.Version 2.x of the tools uses the Azure Functions runtime 2.x that is built on .NET Core. Esta versión se admite en todas las plataformas que admiten .NET Core 2.x.This version is supported on all platforms .NET Core 2.x supports. Use esta versión para el desarrollo multiplataforma y cuando se necesite el entorno en tiempo de ejecución 2.x de Functions.Use this version for cross-platform development and when the Functions runtime 2.x is required.

Importante

Antes de instalar Azure Functions Core Tools, instale .NET Core 2.0.Before installing Azure Functions Core Tools, install .NET Core 2.0.

El entorno en tiempo de ejecución 2.0 de Azure Functions está en versión preliminar y actualmente no se admiten todas las características de Azure Functions.Azure Functions runtime 2.0 is in preview, and currently not all features of Azure Functions are supported. Para más información, consulte los problemas conocidos del entorno en tiempo de ejecución 2.0 de Azure Functions.For more information, see Azure Functions runtime 2.0 known issues

Use el siguiente comando para instalar las herramientas de la versión 2.0:Use the following command to install the version 2.0 tools:

npm install -g azure-functions-core-tools@core

Para instalar en Ubuntu, use sudo como se indica a continuación:When installing on Ubuntu use sudo, as follows:

sudo npm install -g azure-functions-core-tools@core

Para instalar en Mac OS y Linux, quizás necesite incluir la marca unsafe-perm, como se indica a continuación:When installing on macOS and Linux, you may need to include the unsafe-perm flag, as follows:

sudo npm install -g azure-functions-core-tools@core --unsafe-perm true

Ejecución de Azure Functions Core ToolsRun Azure Functions Core Tools

Azure Functions Core Tools agrega los siguientes alias de comando:Azure Functions Core Tools adds the following command aliases:

  • funcfunc
  • azfunazfun
  • azurefunctionsazurefunctions

Se puede utilizar cualquiera de estos alias donde se muestra func en los ejemplos.Any of these aliases can be used where func is shown in the examples.

func init MyFunctionProj

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

Cuando se ejecuta localmente, un proyecto de Functions es un directorio que tiene los archivos host.json y local.settings.json.When running locally, a Functions project is a directory that has the files host.json and local.settings.json. Este directorio es el equivalente a una aplicación de función en Azure.This directory is the equivalent of a function app in Azure. Para obtener más información sobre la estructura de carpetas de Azure Functions, vea la Guía para desarrolladores de Azure Functions.To learn more about the Azure Functions folder structure, see the Azure Functions developers guide.

En la ventana de terminal o desde un símbolo del sistema, ejecute el siguiente comando para crear el proyecto y el repositorio de Git local:In the terminal window or from a command prompt, run the following command to create the project and local Git repository:

func init MyFunctionProj

La salida tendrá un aspecto similar al siguiente:The output looks like the following example:

Writing .gitignore
Writing host.json
Writing local.settings.json
Created launch.json
Initialized empty Git repository in D:/Code/Playground/MyFunctionProj/.git/

Para crear el proyecto sin un repositorio Git local, use la opción --no-source-control [-n].To create the project without a local Git repository, use the --no-source-control [-n] option.

Archivo de configuración localLocal settings file

El archivo local.settings.json almacena la configuración de la aplicación, las cadenas de conexión y la configuración de Azure Functions Core Tools.The file local.settings.json stores app settings, connection strings, and settings for Azure Functions Core Tools. Tiene la siguiente estructura:It has the following structure:

{
  "IsEncrypted": false,   
  "Values": {
    "AzureWebJobsStorage": "<connection string>", 
    "AzureWebJobsDashboard": "<connection string>" 
  },
  "Host": {
    "LocalHttpPort": 7071, 
    "CORS": "*" 
  },
  "ConnectionStrings": {
    "SQLConnectionString": "Value"
  }
}
ConfiguraciónSetting DescripciónDescription
IsEncryptedIsEncrypted Cuando se establece en true, todos los valores se cifran con una clave de máquina local.When set to true, all values are encrypted using a local machine key. Se usa con los comandos func settings.Used with func settings commands. El valor predeterminado es false.Default value is false.
ValoresValues Colección de opciones de configuración de la aplicación que se usa en la ejecución local.Collection of application settings used when running locally. AzureWebJobsStorage y AzureWebJobsDashboard son ejemplos; para obtener una lista completa, consulte la referencia de las opciones de configuración de aplicaciones.AzureWebJobsStorage and AzureWebJobsDashboard are examples; for a complete list, see app settings reference.
HostHost La configuración que se muestra esta sección permite personalizar el proceso de host de Functions cuando se ejecuta localmente.Settings in this section customize the Functions host process when running locally.
LocalHttpPortLocalHttpPort Establece el puerto predeterminado que se usa cuando al ejecutar el host de Functions local (func host start y func run).Sets the default port used when running the local Functions host (func host start and func run). La opción de línea de comandos --port tiene prioridad sobre este valor.The --port command-line option takes precedence over this value.
CORSCORS Define los orígenes permitidos para el uso compartido de recursos entre orígenes (CORS).Defines the origins allowed for cross-origin resource sharing (CORS). Los orígenes se proporcionan en una lista de valores separados por comas y sin espacios.Origins are supplied as a comma-separated list with no spaces. Se admite el valor comodín (\), lo que permite realizar solicitudes desde cualquier origen.The wildcard value (****) is supported, which allows requests from any origin.
ConnectionStringsConnectionStrings Contiene las cadenas de conexión de la base de datos para las funciones.Contains the database connection strings for your functions. Las cadenas de conexión de este objeto se agregan al entorno con el tipo de proveedor de System.Data.SqlClient.Connection strings in this object are added to the environment with the provider type of System.Data.SqlClient.

La mayoría de los desencadenadores y los enlaces tienen una propiedad Connection que se asigna al nombre de una variable de entorno o a una configuración de aplicación.Most triggers and bindings have a Connection property that maps to the name of an environment variable or app setting. Por cada propiedad de conexión debe haber una configuración de aplicación definida en el archivo local.settings.json.For each connection property, there must be app setting defined in local.settings.json file.

Esta configuración también se puede leer en el código como variables de entorno.These settings can also be read in your code as environment variables. En C#, use System.Environment.GetEnvironmentVariable o ConfigurationManager.AppSettings.In C#, use System.Environment.GetEnvironmentVariable or ConfigurationManager.AppSettings. En JavaScript, use process.env.In JavaScript, use process.env. Las opciones de configuración especificadas como variable de entorno del sistema tienen prioridad sobre otros valores del archivo local.settings.json.Settings specified as a system environment variable take precedence over values in the local.settings.json file.

Las herramientas de Functions solo usan las opciones de configuración de dicho archivo cuando las herramientas se ejecutan localmente.Settings in the local.settings.json file are only used by Functions tools when running locally. De manera predeterminada, estas opciones de configuración no se migran automáticamente cuando el proyecto se publica en Azure.By default, these settings are not migrated automatically when the project is published to Azure. Use el conmutador --publish-local-settings al publicarlo para asegurarse de que la configuración se agregue a la aplicación de función en Azure.Use the --publish-local-settings switch when you publish to make sure these settings are added to the function app in Azure.

Cuando no se establece ninguna cadena de conexión de almacenamiento válida para AzureWebJobsStorage, se muestra el siguiente mensaje de error:When no valid storage connection string is set for AzureWebJobsStorage, the following error message is shown:

Missing value for AzureWebJobsStorage in local.settings.json.Missing value for AzureWebJobsStorage in local.settings.json. This is required for all triggers other than HTTP.This is required for all triggers other than HTTP. You can run 'func azure functionapp fetch-app-settings ' or specify a connection string in local.settings.json (Puede ejecutar "func azure functionapp fetch-app-settings" o especificar una cadena de conexión en local settings.json).You can run 'func azure functionapp fetch-app-settings ' or specify a connection string in local.settings.json.

Nota

No se admite el uso del Emulador de Azure Storage con herramientas de Azure Functions cuando la implementación sea local.Use of the Azure Storage Emulator is not supported by Azure Functions tools when developing locally.

Configuración de aplicacionesConfigure app settings

Para establecer un valor para las cadenas de conexión, puede realizar alguna de las siguientes acciones:To set a value for connection strings, you can do one of the following options:

  • Indique la cadena de conexión desde el Explorador de Azure Storage.Enter the connection string from Azure Storage Explorer.
  • Use uno de los siguientes comandos:Use one of the following commands:

    func azure functionapp fetch-app-settings <FunctionAppName>
    
    func azure storage fetch-connection-string <StorageAccountName>
    

    Ambos comandos requieren que primero inicie sesión en Azure.Both commands require you to first sign-in to Azure.

Creación de una funciónCreate a function

Para crear una función, ejecute el siguiente comando:To create a function, run the following command:

func new

func new admite los siguientes argumentos opcionales:func new supports the following optional arguments:

ArgumentoArgument DescripciónDescription
--language -l Lenguaje de programación de la plantilla, como C#, F# o JavaScript.The template programming language, such as C#, F#, or JavaScript.
--template -t Nombre de la plantilla.The template name.
--name -n Nombre de la función.The function name.

Por ejemplo, para crear un desencadenador HTTP de JavaScript, ejecute:For example, to create a JavaScript HTTP trigger, run:

func new --language JavaScript --template HttpTrigger --name MyHttpTrigger

Para crear una función desencadenada por la cola, ejecute:To create a queue-triggered function, run:

func new --language JavaScript --template QueueTrigger --name QueueTriggerJS

Ejecución local de funcionesRun functions locally

Para ejecutar un proyecto de Functions, ejecute el host de Functions.To run a Functions project, run the Functions host. El host habilita desencadenadores para todas las funciones del proyecto:The host enables triggers for all functions in the project:

func host start

func host start admite las siguientes opciones:func host start supports the following options:

OpciónOption DescripciónDescription
--port -p Puerto local en el que se escucha.The local port to listen on. Valor predeterminado: 7071.Default value: 7071.
--debug <type> Las opciones son VSCode y VS.The options are VSCode and VS.
--cors Lista separada por comas de orígenes CORS, sin espacios en blanco.A comma-separated list of CORS origins, with no spaces.
--nodeDebugPort -n Puerto del depurador de nodo que se va a usar.The port for the node debugger to use. Valor predeterminado: un valor de launch.json o 5858.Default: A value from launch.json or 5858.
--debugLevel -d Nivel de seguimiento de la consola (desactivado, detallado, información, advertencia o error).The console trace level (off, verbose, info, warning, or error). Valor predeterminado: información.Default: Info.
--timeout -t Tiempo de espera en segundos para que se inicie el host de Functions.The timeout for the Functions host to start, in seconds. Valor predeterminado: 20 segundos.Default: 20 seconds.
--useHttps Se enlaza a https://localhost:{port} en lugar de a http://localhost:{port}.Bind to https://localhost:{port} rather than to http://localhost:{port}. De forma predeterminada, esta opción crea un certificado de confianza en el equipo.By default, this option creates a trusted certificate on your computer.
--pause-on-error Se pone en pausa en espera de entrada adicional antes de salir del proceso.Pause for additional input before exiting the process. Resulta útil cuando se inicia Azure Functions Core Tools desde un entorno de desarrollo integrado (IDE).Useful when launching Azure Functions Core Tools from an integrated development environment (IDE).

Cuando se inicia el host de Functions, devuelve la dirección URL de las funciones desencadenadas por HTTP:When the Functions host starts, it outputs the URL of HTTP-triggered functions:

Found the following functions:
Host.Functions.MyHttpTrigger

ob host started
Http Function MyHttpTrigger: http://localhost:7071/api/MyHttpTrigger

Depuración en VS Code o Visual StudioDebug in VS Code or Visual Studio

Para asociar un depurador, pase el argumento --debug.To attach a debugger, pass the --debug argument. Para depurar funciones de JavaScript, use Visual Studio Code.To debug JavaScript functions, use Visual Studio Code. Para funciones de C#, use Visual Studio.For C# functions, use Visual Studio.

Para depurar funciones de C#, use --debug vs.To debug C# functions, use --debug vs. También puede usar Azure Functions Visual Studio 2017 Tools.You can also use Azure Functions Visual Studio 2017 Tools.

Para iniciar el host y configurar la depuración de JavaScript, ejecute:To launch the host and set up JavaScript debugging, run:

func host start --debug vscode

Luego, en la vista de depuración de Visual Studio Code, seleccione Attach to Azure Functions (Asociar a Azure Functions).Then, in Visual Studio Code, in the Debug view, select Attach to Azure Functions. Puede asociar puntos de interrupción, inspeccionar variables y recorrer el código.You can attach breakpoints, inspect variables, and step through code.

Depuración de JavaScript con Visual Studio Code

Paso de datos de prueba a una funciónPassing test data to a function

Para probar sus funciones localmente, inicie el host de Functions y llame a puntos de conexión del servidor local mediante solicitudes HTTP.To test your functions locally, you start the Functions host and call endpoints on the local server using HTTP requests. El punto de conexión al que llama depende del tipo de función.The endpoint you call depends on the type of function.

Nota

En los ejemplos de este tema se usa la herramienta cURL para enviar solicitudes HTTP desde el terminal o un símbolo del sistema.Examples in this topic use the cURL tool to send HTTP requests from the terminal or a command prompt. Puede usar una herramienta de su elección para enviar solicitudes HTTP al servidor local.You can use a tool of your choice to send HTTP requests to the local server. La herramienta cURL está disponible de forma predeterminada en los sistemas basados en Linux.The cURL tool is available by default on Linux-based systems. En Windows, primero debe descargar e instalar la herramienta cURL.On Windows, you must first download and install the cURL tool.

Para obtener información más general sobre cómo probar funciones, consulte Estrategias para probar el código en Azure Functions.For more general information on testing functions, see Strategies for testing your code in Azure Functions.

Funciones desencadenadas por HTTP y webhookHTTP and webhook triggered functions

Llama al siguiente punto de conexión para ejecutar de forma local funciones desencadenadas por HTTP y webhook:You call the following endpoint to locally run HTTP and webhook triggered functions:

http://localhost:{port}/api/{function_name}

Asegúrese de usar el mismo nombre del servidor y puerto en el que escucha el host de Functions.Make sure to use the same server name and port that the Functions host is listening on. Puede ver esto en la salida generada al iniciar el host de Functions.You see this in the output generated when starting the Function host. Puede llamar a esta dirección URL mediante cualquier método HTTP admitido por el desencadenador.You can call this URL using any HTTP method supported by the trigger.

El siguiente comando cURL desencadena la función de inicio rápido MyHttpTrigger desde una solicitud GET con el parámetro name transferido en la cadena de consulta.The following cURL command triggers the MyHttpTrigger quickstart function from a GET request with the name parameter passed in the query string.

curl --get http://localhost:7071/api/MyHttpTrigger?name=Azure%20Rocks

En el siguiente ejemplo está la misma función a la que se llama desde una solicitud POST que transfiere name en el cuerpo de la solicitud:The following example is the same function called from a POST request passing name in the request body:

curl --request POST http://localhost:7071/api/MyHttpTrigger --data '{"name":"Azure Rocks"}'

Tenga en cuenta que puede realizar solicitudes GET desde un explorador que transfiere datos en la cadena de consulta.Note that you can make GET requests from a browser passing data in the query string. Para todos los demás métodos HTTP, debe usar cURL, Fiddler, Postman o una herramienta de pruebas HTTP similar.For all other HTTP methods, you must use cURL, Fiddler, Postman, or a similar HTTP testing tool.

Funciones no desencadenadas por HTTPNon-HTTP triggered functions

En el caso de todos los tipos de funciones distintas de los desencadenadores HTTP y HTTP webhooks, puede probar sus funciones localmente llamando a un punto de conexión de administración.For all kinds of functions other than HTTP triggers and webhooks, you can test your functions locally by calling an administration endpoint. Al llamar a este punto de conexión con una solicitud HTTP POST en el servidor local se desencadena esta función.Calling this endpoint with an HTTP POST request on the local server triggers the function. Opcionalmente, puede transferir los datos de prueba a la ejecución en el cuerpo de la solicitud POST.You can optionally pass test data to the execution in the body of the POST request. Esta funcionalidad es similar a la pestaña Prueba de Azure Portal.This functionality is similar to the Test tab in the Azure portal.

Se llama al siguiente punto de conexión de administrador para desencadenar funciones ajenas a HTTP:You call the following administrator endpoint to trigger non-HTTP functions:

http://localhost:{port}/admin/functions/{function_name}

Para transferir datos de prueba al punto de conexión de administrador de una función, debe proporcionar los datos en el cuerpo de un mensaje de solicitud POST.To pass test data to the administrator endpoint of a function, you must supply the data in the body of a POST request message. Es necesario que el cuerpo del mensaje tenga el siguiente formato JSON:The message body is required to have the following JSON format:

{
    "input": "<trigger_input>"
}

El valor <trigger_input> contiene datos en un formato esperado por la función.The <trigger_input> value contains data in a format expected by the function. El siguiente ejemplo de cURL es una solicitud POST dirigida a una función QueueTriggerJS.The following cURL example is a POST to a QueueTriggerJS function. En este caso, la entrada es una cadena que equivale al mensaje que se espera encontrar en la cola.In this case, the input is a string that is equivalent to the message expected to be found in the queue.

curl --request POST -H "Content-Type:application/json" --data '{"input":"sample queue data"}' http://localhost:7071/admin/functions/QueueTriggerJS

Uso del comando func run en la versión 1.xUsing the func run command in version 1.x

Importante

El comando func run no se admite en la versión 2.x de las herramientas.The func run command is not supported in version 2.x of the tools. Para obtener más información, consulte el tema How to target Azure Functions runtime versions (Cómo seleccionar un destino para versiones en tiempo de ejecución de Azure Functions).For more information, see the topic How to target Azure Functions runtime versions.

También puede invocar una función directamente con func run <FunctionName> y proporcionar datos de entrada para la función.You can also invoke a function directly by using func run <FunctionName> and provide input data for the function. Este comando es similar a la ejecución de una función con la pestaña Prueba de Azure Portal.This command is similar to running a function using the Test tab in the Azure portal.

func run admite las siguientes opciones:func run supports the following options:

OpciónOption DescripciónDescription
--content -c Contenido alineado.Inline content.
--debug -d Se asocia un depurador al proceso de host antes de ejecutar la función.Attach a debugger to the host process before running the function.
--timeout -t Tiempo de espera (en segundos) hasta que el host local de Functions está listo.Time to wait (in seconds) until the local Functions host is ready.
--file -f Nombre del archivo que se usa como contenido.The file name to use as content.
--no-interactive No pide entrada.Does not prompt for input. Resulta útil en escenarios de automatización.Useful for automation scenarios.

Por ejemplo, para llamar a una función desencadenada por HTTP y pasar cuerpo del contenido, ejecute el siguiente comando:For example, to call an HTTP-triggered function and pass content body, run the following command:

func run MyHttpTrigger -c '{\"name\": \"Azure\"}'

Publicación en AzurePublish to Azure

Para publicar un proyecto de Functions en una aplicación de función en Azure, use el comando publish:To publish a Functions project to a function app in Azure, use the publish command:

func azure functionapp publish <FunctionAppName>

Puede usar las siguientes opciones:You can use the following options:

OpciónOption DescripciónDescription
--publish-local-settings -i Se publica la configuración de local.settings.json en Azure, se pide que se sobrescriba si la configuración ya existe.Publish settings in local.settings.json to Azure, prompting to overwrite if the setting already exists.
--overwrite-settings -y Debe usarse con -i.Must be used with -i. Sobrescribe AppSettings en Azure con el valor local si es distinto.Overwrites AppSettings in Azure with local value if different. El valor predeterminado es Preguntar.Default is prompt.

Este comando se publica en una aplicación de función existente en Azure.This command publishes to an existing function app in Azure. Se produce un error cuando <FunctionAppName> no existe en la suscripción.An error occurs when the <FunctionAppName> doesn't exist in your subscription. Para obtener información sobre cómo crear una aplicación de función desde el símbolo del sistema o la ventana de Terminal mediante la CLI de Azure, consulte Creación de una instancia de Function App para la ejecución sin servidor.To learn how to create a function app from the command prompt or terminal window using the Azure CLI, see Create a Function App for serverless execution.

El comando publish carga el contenido del directorio del proyecto de Functions.The publish command uploads the contents of the Functions project directory. Si elimina archivos localmente, el comando publish no los eliminará de Azure.If you delete files locally, the publish command does not delete them from Azure. Puede eliminar archivos de Azure con la herramienta Kudu de Azure Portal.You can delete files in Azure by using the Kudu tool in the Azure portal.

Importante

Cuando se crea una aplicación de función en Azure, se usa la versión 1.x del entorno en tiempo de ejecución de Functions de forma predeterminada.When you create a function app in Azure, it uses version 1.x of the Function runtime by default. Para hacer que la aplicación de función use la versión 2.x del entorno en tiempo de ejecución, agregue la opción de configuración de aplicación FUNCTIONS_EXTENSION_VERSION=beta.To make the function app use version 2.x of the runtime, add the application setting FUNCTIONS_EXTENSION_VERSION=beta.
Use el siguiente código de la CLI de Azure para agregar esta opción de configuración a la aplicación de función:Use the following Azure CLI code to add this setting to your function app:

az functionapp config appsettings set --name <function_app> \
--resource-group myResourceGroup \
--settings FUNCTIONS_EXTENSION_VERSION=beta   

Pasos siguientesNext steps

Azure Functions Core Tools es código abierto que se hospeda en GitHub.Azure Functions Core Tools is open source and hosted on GitHub.
Para notificar un error o realizar una solicitud de característica, abra un problema de GitHub.To file a bug or feature request, open a GitHub issue.