Codificación y comprobación de las funciones de Azure Functions en un entorno local

Aunque puede programar y probar las funciones de Azure en Azure Portal, muchos desarrolladores prefieren una experiencia de desarrollo local. Cuando usa Functions, el uso del editor de código y las herramientas de desarrollo que prefiere para crear y probar funciones en un equipo local se vuelve más sencillo. Las funciones locales pueden conectarse a servicios de Azure en directo, y puede depurar sus funciones en el equipo local con el entorno de tiempo de ejecución de Functions completo.

En este artículo se proporcionan vínculos a entornos de desarrollo específicos para su lenguaje preferido. También se proporcionan algunas instrucciones compartidas para el desarrollo local, como trabajar con el archivo local.settings.json.

Entornos de desarrollo locales

La manera en la que desarrolla las funciones en el equipo local depende del lenguaje y las herramientas que prefiera. Los entornos de la siguiente tabla admiten el desarrollo local:

Entorno Lenguajes Descripción
Visual Studio Code C# (dentro de proceso)
C# (proceso de trabajo aislado)
JavaScript
PowerShell
Python
La extensión de Azure Functions para VS Code agrega a Functions compatibilidad con VS Code. Requiere Core Tools. Admite el desarrollo en Linux, macOS y Windows, cuando se usa la versión 2.x de Core Tools. Para más información, vea Creación de la primera función mediante Visual Studio Code.
Símbolo del sistema o terminal C# (dentro de proceso)
C# (proceso de trabajo aislado)
JavaScript
PowerShell
Python
Azure Functions Core Tools proporciona el entorno de tiempo de ejecución central y las plantillas para crear las funciones, lo que permite desarrollar localmente. La versión 2.x es compatible con el desarrollo en Linux, macOS y Windows. Todos los entornos usan Core Tools para el entorno de tiempo de ejecución local de Functions.
Visual Studio C# (dentro de proceso)
C# (proceso de trabajo aislado)
Las herramientas de Azure Functions se incluyen en la carga de trabajo de desarrollo de Azure de Visual Studio a partir de Visual Studio 2019. Le permite compilar funciones en una biblioteca de clases y publicar el archivo .dll en Azure. Incluye Core Tools para realizar pruebas locales. Para más información, consulte Desarrollo de Azure Functions con Visual Studio
Maven (varios) Java El arquetipo Maven admite Core Tools para habilitar el desarrollo de funciones con Java. La versión 2.x es compatible con el desarrollo en Linux, macOS y Windows. Para más información, consulte Creación de la primera función con Java y Maven. También es compatible con el desarrollo con Eclipse y IntelliJ IDEA.

Nota:

Debido a limitaciones en la edición del código de función en Azure Portal, debe desarrollar las funciones localmente y publicar el proyecto de código en una aplicación de funciones en Azure. Para más información, consulte Limitaciones de desarrollo en Azure Portal.

Cada uno de estos entornos de desarrollo local le permite crear proyectos de aplicación de función y usar plantillas de función predefinidas para crear nuevas funciones. Cada una usa Core Tools para probar y depurar sus funciones en el entorno de tiempo de ejecución real de Functions en su propia máquina, igual que haría con cualquier otra aplicación. También puede publicar su proyecto de aplicación de función desde cualquiera de estos entornos en Azure.

Archivos del proyecto locales

Un directorio de proyecto de Functions contiene los siguientes archivos en la carpeta raíz del proyecto, independientemente del lenguaje:

Nombre de archivo Descripción
host.json Para obtener más información, consulte la referencia de host.json.
local.settings.json Configuración que usa Core Tools cuando se ejecuta localmente, incluida la configuración de la aplicación. Para más información, consulte archivo de configuración local.
.gitignore Impide que el archivo local.settings.json se publique accidentalmente en un repositorio de Git. Para más información, consulte archivo de configuración local.
.vscode\extensions.json Archivo de configuración que se usa al abrir la carpeta del proyecto en Visual Studio Code.

Otros archivos del proyecto dependen del lenguaje y las funciones específicas. Para más información, consulte la guía para desarrolladores para su lenguaje.

Archivo de configuración local

El archivo local.settings.json almacena la configuración de la aplicación y la configuración que usan las herramientas locales de desarrollo. La configuración del archivo local.settings.json solo se usa al ejecutar el proyecto de forma local. Al publicar el proyecto en Azure, asegúrese de agregar también cualquier configuración necesaria a la configuración de la aplicación para la aplicación de funciones.

Importante

Dado que local.settings.json puede contener secretos, como cadenas de conexión, nunca debe almacenarlo en un repositorio remoto. Las herramientas que admiten Functions proporcionan maneras de sincronizar la configuración del archivo local.settings.json con la configuración de la aplicación en la aplicación de funciones en la que se implementa el proyecto.

El archivo de configuración local tiene la siguiente estructura:

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "<language worker>",
    "AzureWebJobsStorage": "<connection-string>",
    "MyBindingConnection": "<binding-connection-string>",
    "AzureWebJobs.HttpExample.Disabled": "true"
  },
  "Host": {
    "LocalHttpPort": 7071,
    "CORS": "*",
    "CORSCredentials": false
  },
  "ConnectionStrings": {
    "SQLConnectionString": "<sqlclient-connection-string>"
  }
}

Esta configuración se admite al ejecutar los proyectos de forma local:

Configuración Descripción
IsEncrypted Cuando la configuración se establece en true, todos los valores se cifran con una clave de máquina local. Se usa con los comandos func settings. El valor predeterminado es false. El archivo local.settings.json se puede cifrar en su equipo local cuando contiene secretos, como las cadenas de conexión de servicios. El host descifra automáticamente la configuración cuando se ejecuta. Use el comando func settings decrypt antes de intentar leer la configuración cifrada localmente.
Values Colección de opciones de configuración de la aplicación que se usan al ejecutar un proyecto de forma local. Estos pares clave-valor (cadena-cadena) corresponden a la configuración de la aplicación en su aplicación de funciones de Azure, como AzureWebJobsStorage. Muchos desencadenadores y enlaces tienen una propiedad que hace referencia a una configuración de la aplicación de cadena de conexión, por ejemplo, Connection para el Connection. Para estas propiedades, se necesita una configuración de la aplicación definida en la matriz Values. Consulte la tabla posterior, donde encontrará una lista de los valores que se usan con más frecuencia.
Los valores deben ser cadenas y no objetos JSON o matrices. Los nombres de la configuración no pueden incluir un subrayado doble (__) y no deben incluir dos puntos (:). Los caracteres dobles de subrayado están reservados para el tiempo de ejecución, mientras que el signo de dos puntos está reservado para admitir la inserción de dependencias.
Host La configuración que se muestra en esta sección permite personalizar el proceso de host de Functions al ejecutar los proyectos de forma local. Dicha configuración es independiente de la de host.json, que también se aplica al ejecutar proyectos en Azure.
LocalHttpPort Establece el puerto predeterminado que se usa cuando al ejecutar el host de Functions local (func host start y func run). La opción de línea de comandos --port tiene prioridad sobre esta configuración. Por ejemplo, cuando trabaje en IDE de Visual Studio, puede cambiar el número de puerto. Para ello, vaya a la ventana "Propiedades de proyecto -> Depurar" y especifique de manera explícita el número de puerto en un comando host start --port <your-port-number> que se puede suministrar en el campo "Argumentos de aplicación".
CORS Define los orígenes permitidos para el uso compartido de recursos entre orígenes (CORS). Los orígenes se proporcionan en una lista de valores separados por comas y sin espacios. Se admite el valor comodín (*), lo que permite realizar solicitudes desde cualquier origen.
CORSCredentials Al establecer el valor en true, se permiten las solicitudes withCredentials.
ConnectionStrings Identificador de colección. No use dicha colección para las cadenas de conexión que empleen enlaces de función. Esta colección solo la usan los marcos que habitualmente obtienen las cadenas de conexión de la sección ConnectionStrings de un archivo de configuración, como ConnectionStrings. Las cadenas de conexión de este objeto se agregan al entorno con el tipo de proveedor de System.Data.SqlClient. Los elementos de esta colección no se publican en Azure con otra configuración de aplicación. Debe agregar explícitamente estos valores a la colección Connection strings de la configuración de la aplicación de función. Si quiere crear un objeto SqlConnection en el código de la función, debe almacenar el valor de la cadena de conexión con las otras conexiones en SqlConnection, en el portal.

Los siguientes valores de la aplicación se pueden incluir en la matriz Values cuando la ejecución se realiza en un entorno local:

Configuración Valores Descripción
AzureWebJobsStorage Cadena de conexión de la cuenta de almacenamiento, o bien
UseDevelopmentStorage=true
Contiene la cadena de conexión de una cuenta de Azure Storage. Se requiere cuando se utilizan desencadenadores distintos de HTTP. Para más información, consulte la referencia de AzureWebJobsStorage.
Cuando tiene el emulador de Azurite instalado localmente y configura AzureWebJobsStorage en UseDevelopmentStorage=true, Core Tools usa el emulador. Para más información, consulte Emulador de almacenamiento local.
AzureWebJobs.<FUNCTION_NAME>.Disabled true|false Para deshabilitar una función cuando la ejecución se realizar en un entorno local, agregue "AzureWebJobs.<FUNCTION_NAME>.Disabled": "true" a la colección, donde <FUNCTION_NAME> es el nombre de la función. Para más información, consulte Deshabilitamiento de funciones en Azure Functions.
FUNCTIONS_WORKER_RUNTIME dotnet
dotnet-isolated
node
java
powershell
python
Indica el lenguaje de destino del runtime de Functions. Se requiere para la versión 2.x y superior del runtime de Functions. Este valor lo genera Azure Functions Core Tools para el proyecto. Para más información, consulte la referencia de FUNCTIONS_WORKER_RUNTIME.
FUNCTIONS_WORKER_RUNTIME_VERSION ~7 Indica que se use PowerShell 7 cuando se ejecuta localmente. Si no se establece, se usa PowerShell Core 6. Este valor solo se usa cuando la ejecución se realice localmente. La versión del runtime de PowerShell viene determinada por el valor de configuración del sitio powerShellVersion, cuando se ejecuta en Azure, que se puede establecer en el portal.

Sincronizar la configuración

Al desarrollar las funciones localmente, cualquier configuración local requerida por la aplicación también debe estar presente en la configuración de la aplicación de la aplicación de funciones en la que se implementa el código. Es posible que también tenga que descargar la configuración actual de la aplicación de funciones en el proyecto local. Aunque puede configurar manualmente los valores de la aplicación en Azure Portal, las siguientes herramientas también le permiten sincronizar los valores de la aplicación con la configuración local en el proyecto:

Desencadenadores y enlaces

Al desarrollar las funciones localmente, debe tener en cuenta los comportamientos de desencadenador y enlace. En el caso de los desencadenadores HTTP puede llamar al punto de conexión HTTP en el equipo local mediante http://localhost/. En el caso de las funciones desencadenadas sin HTTP, hay varias opciones para ejecutarse localmente:

  • La manera más fácil de probar los enlaces durante el desarrollo local es usar cadenas de conexión destinadas a servicios de Azure activos. Puede dirigirse a servicios activos agregando la configuración de cadena de conexión adecuada en la Values matriz en el archivo local.settings.json. Al hacerlo, las ejecuciones locales durante las pruebas afectan a los datos del servicio activo. Por este motivo, considere la posibilidad de configurar servicios independientes para usarlos durante el desarrollo y las pruebas y, luego, cambiar a servicios diferentes durante la producción.
  • En el caso de los desencadenadores basados en almacenamiento, puede usar un emulador de almacenamiento local.
  • Puede ejecutar manualmente funciones de desencadenador que no son HTTP mediante puntos de conexión de administrador especiales. Para obtener más información, consulte Ejecución manual de una función no desencadenada por HTTP.

Durante las pruebas locales, debe ejecutar localmente el host proporcionado por Core Tools (func.exe). Para obtener más información, consulte Azure Functions Core Tools.

Emulador de almacenamiento local

Durante el desarrollo local, puede usar el emulador de Azurite local al probar funciones con enlaces de Azure Storage (Queue Storage, Blob Storage y Table Storage), sin tener que conectarse a servicios de almacenamiento remoto. Azurite se integra con Visual Studio Code y Visual Studio, y también puede ejecutarlo desde el símbolo del sistema mediante npm. Para más información, consulte Uso del emulador de Azurite para desarrollo y pruebas locales de Azure Storage.

La siguiente configuración de la Values colección del archivo local.settings.json indica al host de Functions local que use Azurite para la conexión predeterminada AzureWebJobsStorage:

"AzureWebJobsStorage": "UseDevelopmentStorage=true"

Con este valor de configuración, cualquier desencadenador o enlace de Azure Storage que use AzureWebJobsStorage como conexión se conecta a Azurite cuando se ejecuta localmente. Tenga en cuenta estas consideraciones al usar la emulación de almacenamiento durante la ejecución local:

  • Debe tener Azurite instalado y en ejecución.
  • Pruebe con una conexión de almacenamiento real a los servicios de Azure antes de publicar en Azure.
  • Al publicar el proyecto, no publique la configuración AzureWebJobsStorage como UseDevelopmentStorage=true. En Azure, la configuración de AzureWebJobsStorage siempre debe ser la cadena de conexión de la cuenta de almacenamiento que usa la aplicación de funciones. Para obtener más información, vea AzureWebJobsStorage.

Pasos siguientes