Desarrollo de Azure Functions con Visual StudioDevelop Azure Functions using Visual Studio

Visual Studio le permite desarrollar, probar e implementar funciones de la biblioteca de clases C# en Azure.Visual Studio lets you develop, test, and deploy C# class library functions to Azure. Si esta es su primera experiencia con Azure Functions, puede obtener más información en Introducción a Azure Functions.If this experience is your first with Azure Functions, you can learn more at An introduction to Azure Functions.

Visual Studio proporcionan las siguientes ventajas al desarrollar funciones:Visual Studio provides the following benefits when develop your functions:

  • Editar, compilar y ejecutar funciones en el equipo de desarrollo local.Edit, build, and run functions on your local development computer.
  • Publique su proyecto de Azure Functions directamente en Azure y cree recursos de Azure según sea necesario.Publish your Azure Functions project directly to Azure, and create Azure resources as needed.
  • Use atributos de C# para declarar enlaces de función directamente en el código de C#.Use C# attributes to declare function bindings directly in the C# code.
  • Desarrollar e implementar funciones de C# compiladas previamente.Develop and deploy pre-compiled C# functions. Las funciones compiladas previamente proporcionan un mejor rendimiento de arranque en frío que las funciones basadas en scripts de C#.Pre-complied functions provide a better cold-start performance than C# script-based functions.
  • Programar las funciones en C# a la vez que se tienen todos los beneficios del desarrollo de Visual Studio.Code your functions in C# while having all of the benefits of Visual Studio development.

En este artículo se dan detalles sobre cómo usar Visual Studio para desarrollar funciones de biblioteca de clases C# y publicarlas en Azure.This article provides details about how to use Visual Studio to develop C# class library functions and publish them to Azure. Antes de leer este artículo, debe completar la guía de inicio rápido de Functions para Visual Studio.Before you read this article, you should complete the Functions quickstart for Visual Studio.

A menos que se indique lo contrario, los procedimientos y los ejemplos que se muestran son para Visual Studio 2019.Unless otherwise noted, procedures and examples shown are for Visual Studio 2019.

Requisitos previosPrerequisites

Las herramientas de Azure Functions forman parte de la carga de trabajo de desarrollo de Azure de Visual Studio a partir de Visual Studio 2017.Azure Functions Tools is included in the Azure development workload of Visual Studio starting with Visual Studio 2017. Asegúrese de incluir la carga de trabajo de desarrollo de Azure en la instalación de Visual Studio.Make sure you include the Azure development workload in your Visual Studio installation.

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.

Los demás recursos que necesita, como una cuenta de Azure Storage, se crean en la suscripción durante el proceso de publicación.Other resources that you need, such as an Azure Storage account, are created in your subscription during the publishing process.

Nota

En Visual Studio 2017, la carga de trabajo de desarrollo de Azure instala las herramientas de Azure Functions como una extensión independiente.In Visual Studio 2017, the Azure development workload installs the Azure Functions Tools as a separate extension. Al actualizar Visual Studio 2017, también debe asegurarse de que está usando la versión más reciente de las herramientas de Azure Functions.When you update your Visual Studio 2017, also make sure that you are using the most recent version of the Azure Functions tools. En las secciones siguientes se muestra cómo comprobar y, si es necesario, actualizar la extensión de herramientas de Azure Functions en Visual Studio 2017.The following sections show you how to check and (if needed) update your Azure Functions Tools extension in Visual Studio 2017.

Omita esta sección al usar Visual Studio 2019.Please skip these section when using Visual Studio 2019.

Comprobar la versión de las herramientas en Visual Studio 2017Check your tools version in Visual Studio 2017

  1. En el menú Herramientas, seleccione Extensiones y actualizaciones.From the Tools menu, choose Extensions and Updates. Expanda Herramientas > instaladas y elija Azure Functions and Web Jobs Tools.Expand Installed > Tools and choose Azure Functions and Web Jobs Tools.

    Comprobación de la versión de herramientas de Functions

  2. Observe la versión instalada.Note the installed Version. Puede comparar esta versión con la versión más reciente que aparece en las notas de la versión.You can compare this version with the latest version listed in the release notes.

  3. Si su versión es anterior, actualice las herramientas en Visual Studio como se muestra en la siguiente sección.If your version is older, update your tools in Visual Studio as shown in the following section.

Actualización de las herramientas en Visual Studio 2017Update your tools in Visual Studio 2017

  1. En el cuadro de diálogo Extensiones y actualizaciones, expanda Actualizaciones > Visual Studio Marketplace, elija Azure Functions and Web Jobs Tools y seleccione Actualizar.In the Extensions and Updates dialog, expand Updates > Visual Studio Marketplace, choose Azure Functions and Web Jobs Tools and select Update.

    Actualización de la versión de herramientas de Functions

  2. Después de descargar la actualización de las herramientas, cierre Visual Studio para desencadenar la actualización de las herramientas mediante el programa de instalación de VSIX.After the tools update is downloaded, close Visual Studio to trigger the tools update using the VSIX installer.

  3. En el programa de instalación, elija Aceptar para iniciar y, a continuación, Modificar para actualizar las herramientas.In the installer, choose OK to start and then Modify to update the tools.

  4. Una vez completada la actualización, elija Cerrar y reinicie Visual Studio.After the update is complete, choose Close and restart Visual Studio.

Nota

En Visual Studio 2019 y versiones posteriores, la extensión de herramientas de Azure Functions se actualiza como parte de Visual Studio.In Visual Studio 2019 and later, the Azure Functions tools extension is updated as part of Visual Studio.

Creación de un proyecto de Azure FunctionsCreate an Azure Functions project

La plantilla del proyecto de Azure Functions de Visual Studio crea un proyecto que se puede publicar en una aplicación de función en Azure.The Azure Functions project template in Visual Studio creates a project that can be published to a function app in Azure. Puede usar una aplicación de función para agrupar funciones como una unidad lógica para la administración, la implementación y el uso compartido de recursos.You can use a function app to group functions as a logical unit for management, deployment, and sharing of resources.

  1. En Visual Studio, en el menú Archivo, seleccione Nuevo > Proyecto.In Visual Studio, on the File menu, select New > Project.

  2. En el cuadro de diálogo Crear un proyecto, busque functions, elija la plantilla de Azure Functions y, a continuación, seleccione Siguiente.In the Create a new project dialog box, search for functions, choose the Azure Functions template, and select Next.

  3. Escriba un nombre para el proyecto y seleccione Crear.Enter a name for your project, and select Create. El nombre de la aplicación de función debe ser válido como espacio de nombres de C#, por lo que no debe usar guiones bajos, guiones u otros caracteres no alfanuméricos.The function app name must be valid as a C# namespace, so don't use underscores, hyphens, or any other nonalphanumeric characters.

  4. En Crear una aplicación de Azure Functions, utilice las siguientes opciones:In Create a new Azure Functions application, use the following options:

    • Azure Functions v2 (.NET Core) 1Azure Functions v2 (.NET Core) 1
    • desencadenador HTTPHTTP trigger
    • Storage Account (Cuenta de almacenamiento): Emulador de StorageStorage Account: Storage Emulator
    • Nivel de autorización: AnonymousAuthorization level: Anonymous
    OpciónOption Valor sugeridoSuggested value DESCRIPCIÓNDescription
    Sistema en tiempo de ejecución de FunctionsFunctions runtime Azure Functions 2. x
    (.NET Core)
    Azure Functions 2.x
    (.NET Core)
    Este valor crea un proyecto de función que usa la versión 2.x del entorno de ejecución de Azure Functions, que es compatible con .NET Core.This setting creates a function project that uses the version 2.x runtime of Azure Functions, which supports .NET Core. Azure Functions 1.x admite .NET Framework.Azure Functions 1.x supports the .NET Framework. Para más información, consulte Cómo seleccionar un destino para versiones en tiempo de ejecución de Azure Functions.For more information, see Target Azure Functions runtime version.
    Plantilla de funciónFunction template desencadenador HTTPHTTP trigger Con este valor se crea una función desencadenada por una solicitud HTTP.This setting creates a function triggered by an HTTP request.
    Storage AccountStorage Account Emulador de StorageStorage Emulator Un desencadenador HTTP no usa la conexión de la cuenta de Azure Storage.An HTTP trigger doesn't use the Azure Storage account connection. Todos los demás tipos de desencadenador requieren una cadena de conexión de cuenta de Storage válida.All other trigger types require a valid Storage account connection string. Dado que Azure Functions necesita una cuenta de Storage, se asigna una o se crea al publicar el proyecto en Azure.Because Functions requires a storage account, one is assigned or created when you publish your project to Azure.
    Nivel de autorizaciónAuthorization level AnonymousAnonymous Cualquier cliente puede desencadenar una función creada sin tener que proporcionar una clave.The created function can be triggered by any client without providing a key. Esta configuración de autorización facilita probar la función nueva.This authorization setting makes it easy to test your new function. Para más información sobre las claves y la autorización, consulte Claves de autorización en los enlaces HTTP y de webhook.For more information about keys and authorization, see Authorization keys in the HTTP and webhook bindings.

    Nota

    Asegúrese de establecer el Nivel de autorización en Anonymous.Make sure you set the Authorization level to Anonymous. Al elegir el nivel predeterminado de Function, tiene que presentar la tecla de función en las solicitudes para acceder al punto de conexión de la función.If you choose the default level of Function, you're required to present the function key in requests to access your function endpoint.

  5. Seleccione Crear para crear el proyecto de función y la función que se desencadena mediante HTTP.Select Create to create the function project and HTTP-triggered function.

La plantilla de proyecto crea un proyecto de C#, instala el paquete NuGet Microsoft.NET.Sdk.Functions y establece la plataforma de destino.The project template creates a C# project, installs the Microsoft.NET.Sdk.Functions NuGet package, and sets the target framework. El proyecto nuevo contiene los archivos siguientes:The new project has the following files:

  • host.json: permite configurar el host de Functions.host.json: Lets you configure the Functions host. Esta configuración se aplica tanto cuando se ejecuta localmente como en Azure.These settings apply both when running locally and in Azure. Para más información, consulte la referencia sobre host.json.For more information, see host.json reference.

  • local.settings.json: mantiene la configuración que se usa cuando se ejecutan localmente las funciones.local.settings.json: Maintains settings used when running functions locally. Esta configuración no se usa cuando se ejecuta en Azure.These settings aren't used when running in Azure. Para más información, consulte Archivo de configuración local.For more information, see Local settings file.

    Importante

    Debido a que el archivo local.settings.json puede contener secretos, debe excluirlo del control de origen del proyecto.Because the local.settings.json file can contain secrets, you must excluded it from your project source control. La opción Copiar en el directorio de salida para este archivo siempre debe ser Copiar si es más nuevo.The Copy to Output Directory setting for this file should always be Copy if newer.

Para más información, consulte Proyecto de biblioteca de clases de Functions.For more information, see Functions class library project.

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 que usan las herramientas locales de desarrollo.The local.settings.json file stores app settings, connection strings, and settings used by local development tools. La configuración del archivo local.settings.json solo se usa al ejecutar los proyectos de forma local.Settings in the local.settings.json file are used only when you're running projects locally. El archivo de configuración local tiene la siguiente estructura:The local settings file has this structure:

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

Esta configuración se admite al ejecutar los proyectos de forma local:These settings are supported when you run projects locally:

ConfiguraciónSetting DESCRIPCIÓNDescription
IsEncrypted Cuando la configuración se establece en true, todos los valores se cifran con una clave de máquina local.When this setting is set to true, all values are encrypted with 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.
Values Matriz de opciones de configuración de la aplicación y cadenas de conexión que se usan al ejecutar un proyecto de forma local.Array of application settings and connection strings used when a project is running locally. 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.These key-value (string-string) pairs correspond to application settings in your function app in Azure, like 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 desencadenador del almacén de blobs.Many triggers and bindings have a property that refers to a connection string app setting, like Connection for the Blob storage trigger. Para estas propiedades, se necesita una configuración de la aplicación definida en la matriz Values.For these properties, you need an application setting defined in the Values array.
AzureWebJobsStorage es una configuración de aplicación necesaria para los desencadenadores que no sean HTTP.AzureWebJobsStorage is a required app setting for triggers other than HTTP.
La versión 2.x del tiempo de ejecución de Functions requiere la configuración [FUNCTIONS_WORKER_RUNTIME] que Core Tools genera para su proyecto.Version 2.x of the Functions runtime requires the [FUNCTIONS_WORKER_RUNTIME] setting, which is generated for your project by Core Tools.
Si tiene el emulador de Azure Storage instalado localmente y ha establecido AzureWebJobsStorage en UseDevelopmentStorage=true, Core Tools usará el emulador.When you have the Azure storage emulator installed locally and you set AzureWebJobsStorage to UseDevelopmentStorage=true, Core Tools uses the emulator. Dicho emulador es útil durante el desarrollo, pero conviene probarlo con una conexión de almacenamiento real antes de la implementación.The emulator is useful during development, but you should test with an actual storage connection before deployment.
Los valores deben ser cadenas y no objetos JSON o matrices.Values must be strings and not JSON objects or arrays. Los nombres de la configuración no pueden incluir dos puntos (:) ni un subrayado doble (__).Setting names can't include a colon (:) or a double underline (__). Estos caracteres están reservados para el entorno de ejecución.These characters are reserved by the runtime.
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.Settings in this section customize the Functions host process when you run projects locally. Dicha configuración es independiente de la de host.json, que también se aplica al ejecutar proyectos en Azure.These settings are separate from the host.json settings, which also apply when you run projects in Azure.
LocalHttpPort 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 esta configuración.The --port command-line option takes precedence over this setting.
CORS 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.
CORSCredentials Al establecer el valor en true, se permiten las solicitudes withCredentials.When set to true, allows withCredentials requests.
ConnectionStrings Corresponde a una colección.A collection. No use dicha colección para las cadenas de conexión que empleen enlaces de función.Don't use this collection for the connection strings used by your function bindings. 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 Entity Framework.This collection is used only by frameworks that typically get connection strings from the ConnectionStrings section of a configuration file, like Entity Framework. 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. Los elementos de esta colección no se publican en Azure con otra configuración de aplicación.Items in this collection aren't published to Azure with other app settings. Debe agregar explícitamente estos valores a la colección Connection strings de la configuración de la aplicación de función.You must explicitly add these values to the Connection strings collection of your function app settings. 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 Configuración de la aplicación, en el portal.If you're creating a SqlConnection in your function code, you should store the connection string value with your other connections in Application Settings in the portal.

La configuración en local.settings.json no se carga automáticamente cuando publica el proyecto.Settings in local.settings.json aren't uploaded automatically when you publish the project. Para asegurarse de que esta configuración también existe en la aplicación de funciones de Azure, debe cargarla después de publicar el proyecto.To make sure that these settings also exist in your function app in Azure, you must upload them after you publish your project. Para más información, consulte Function app settings (Configuración de la aplicación de funciones).To learn more, see Function app settings.

Los valores de ConnectionStrings nunca se publican.Values in ConnectionStrings are never published.

Esta configuración de la aplicación de función también se puede leer en el código como variables de entorno.The function app settings values can also be read in your code as environment variables. Para más información, consulte Variables de entorno.For more information, see Environment variables.

Configuración del proyecto para el desarrollo localConfigure the project for local development

El entorno de tiempo de ejecución de Functions usa internamente una cuenta de Azure Storage.The Functions runtime uses an Azure Storage account internally. Para todos los tipos de desencadenadores distintos de HTTP y webhooks, debe establecer la clave Values.AzureWebJobsStorage en una cadena de conexión de cuenta de Azure Storage válida.For all trigger types other than HTTP and webhooks, you must set the Values.AzureWebJobsStorage key to a valid Azure Storage account connection string. La aplicación de función puede usar el Emulador de Azure Storage para la configuración de conexión AzureWebJobsStorage que el proyecto requiere.Your function app can also use the Azure storage emulator for the AzureWebJobsStorage connection setting that is required by the project. Para usar el emulador, establezca el valor de AzureWebJobsStorage en UseDevelopmentStorage=true.To use the emulator, set the value of AzureWebJobsStorage to UseDevelopmentStorage=true. Cambie esta configuración a una cadena de conexión de la cuenta de almacenamiento real antes de la implementación.Change this setting to an actual storage account connection string before deployment.

Para establecer la cadena de conexión de cuenta de almacenamiento:To set the storage account connection string:

  1. En Visual Studio, abra Cloud Explorer, expanda Cuenta de almacenamiento > Su cuenta de almacenamiento y, a continuación, en la pestaña Propiedades, copie el valor Cadena de conexión principal.In Visual Studio, open Cloud Explorer, expand Storage Account > Your Storage Account, then in the Properties tab copy the Primary Connection String value.

  2. En el proyecto, abra el archivo local.settings.json y establezca el valor de la clave AzureWebJobsStorage en la cadena de conexión que copió.In your project, open the local.settings.json file and set the value of the AzureWebJobsStorage key to the connection string you copied.

  3. Repita el paso anterior para agregar claves únicas a la matriz de valores para cualquier otra conexión que requieran sus funciones.Repeat the previous step to add unique keys to the Values array for any other connections required by your functions.

Incorporación de una función al proyectoAdd a function to your project

En las funciones de biblioteca de clases C#, los enlaces que la función usa se definen mediante la aplicación de atributos en el código.In C# class library functions, the bindings used by the function are defined by applying attributes in the code. Al crear los desencadenadores de funciones a partir de las plantillas proporcionadas, los atributos del desencadenador se aplican automáticamente.When you create your function triggers from the provided templates, the trigger attributes are applied for you.

  1. En el Explorador de soluciones, haga clic con el botón derecho en el nodo del proyecto y seleccione Agregar > Nuevo elemento.In Solution Explorer, right-click on your project node and select Add > New Item. Seleccione Función de Azure, escriba un nombre para la clase y, luego, haga clic en Agregar.Select Azure Function, type a Name for the class, and click Add.

  2. Elija el desencadenador, establezca las propiedades de enlace y haga clic en Crear.Choose your trigger, set the binding properties, and click Create. En el ejemplo siguiente se muestra la configuración cuando se crea una función desencadenada de Queue Storage.The following example shows the settings when creating a Queue storage triggered function.

    Crear una función desencadenada por la cola

    Este ejemplo de desencadenador usa una cadena de conexión con una clave denominada QueueStorage.This trigger example uses a connection string with a key named QueueStorage. Esta configuración de la cadena de conexión se debe definir en el archivo local.settings.json.This connection string setting must be defined in the local.settings.json file.

  3. Examine la clase recién agregada.Examine the newly added class. Verá un método Run estático, que cuenta con el atributo FunctionName.You see a static Run method, that is attributed with the FunctionName attribute. Este atributo indica que el método es el punto de entrada de la función.This attribute indicates that the method is the entry point for the function.

    Por ejemplo, la clase C# siguiente representa una función desencadenada de Queue Storage:For example, the following C# class represents a basic Queue storage triggered function:

    using System;
    using Microsoft.Azure.WebJobs;
    using Microsoft.Azure.WebJobs.Host;
    using Microsoft.Extensions.Logging;
    
    namespace FunctionApp1
    {
        public static class Function1
        {
            [FunctionName("QueueTriggerCSharp")]
            public static void Run([QueueTrigger("myqueue-items", 
                Connection = "QueueStorage")]string myQueueItem, ILogger log)
            {
                log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
            }
        }
    }
    

    Se aplica un atributo específico de enlace a cada parámetro de enlace que se suministra al método de punto de entrada.A binding-specific attribute is applied to each binding parameter supplied to the entry point method. El atributo toma la información de enlace como parámetros.The attribute takes the binding information as parameters. En el ejemplo anterior, el primer parámetro tiene aplicado un atributo QueueTrigger, que indica la función desencadenada de cola.In the previous example, the first parameter has a QueueTrigger attribute applied, indicating queue triggered function. El nombre de la configuración de cadena de conexión y el nombre de cola se pasan como parámetros en el atributo QueueTrigger.The queue name and connection string setting name are passed as parameters to the QueueTrigger attribute. Para más información, consulte Enlaces de Azure Queue Storage para Azure Functions.For more information, see Azure Queue storage bindings for Azure Functions.

Puede utilizar el procedimiento anterior para agregar más funciones a su proyecto de aplicación de funciones.You can use the above procedure to add more functions to your function app project. Cada función del proyecto puede tener un desencadenador diferente, pero una función no puede tener más de un desencadenador.Each function in the project can have a different trigger, but a function must have exactly one trigger. Para más información, consulte Conceptos básicos sobre los enlaces y desencadenadores de Azure Functions.For more information, see Azure Functions triggers and bindings concepts.

Adición de enlacesAdd bindings

Al igual que sucede con los desencadenadores, los enlaces de entrada y salida se agregan a la función como atributos de enlace.As with triggers, input and output bindings are added to your function as binding attributes. Agregue los enlaces a una función como se indica a continuación:Add bindings to a function as follows:

  1. Asegúrese de que ha configurado el proyecto para desarrollo local.Make sure you've configured the project for local development.

  2. Agregue el paquete de extensión de NuGet adecuado para el enlace concreto.Add the appropriate NuGet extension package for the specific binding. Para más información, consulte Desarrollo local con C# mediante Visual Studio en el artículo Conceptos básicos sobre los enlaces y desencadenadores de Azure Functions.For more information, see Local C# development using Visual Studio in the Triggers and Bindings article. Los requisitos del paquete NuGet específico del enlace se encuentran en el artículo de referencia del enlace.The binding-specific NuGet package requirements are found in the reference article for the binding. Por ejemplo, buscar los requisitos del paquete para el desencadenador de Event Hubs en el artículo de referencia Enlaces de Azure Event Hubs.For example, find package requirements for the Event Hubs trigger in the Event Hubs binding reference article.

  3. Si hay valores de la aplicación que necesite el enlace, agréguelos a la colección Valores en el archivo de configuración local.If there are app settings that the binding needs, add them to the Values collection in the local setting file. Estos valores se utilizan cuando la función se ejecuta localmente.These values are used when the function runs locally. Cuando la función se ejecuta en la aplicación de funciones en Azure, se usan los valores de la aplicación de aplicaciones.When the function runs in the function app in Azure, the function app settings are used.

  4. Agregue el atributo de enlace apropiado para la firma del método.Add the appropriate binding attribute to the method signature. En el ejemplo siguiente, un mensaje de la cola desencadena la función y el enlace de salida, se crea un nuevo mensaje de la cola con el mismo texto en otra cola.In the following example, a queue message triggers the function, and the output binding creates a new queue message with the same text in a different queue.

    public static class SimpleExampleWithOutput
    {
        [FunctionName("CopyQueueMessage")]
        public static void Run(
            [QueueTrigger("myqueue-items-source", Connection = "AzureWebJobsStorage")] string myQueueItem, 
            [Queue("myqueue-items-destination", Connection = "AzureWebJobsStorage")] out string myQueueItemCopy,
            ILogger log)
        {
            log.LogInformation($"CopyQueueMessage function processed: {myQueueItem}");
            myQueueItemCopy = myQueueItem;
        }
    }
    

    La conexión con el almacenamiento en la cola se obtiene del valor AzureWebJobsStorage.The connection to Queue storage is obtained from the AzureWebJobsStorage setting. Para más información, consulte el artículo de referencia del enlace concreto.For more information, see the reference article for the specific binding.

En esta tabla se muestran los enlaces que son compatibles con las dos versiones principales del entorno de ejecución de Azure Functions:This table shows the bindings that are supported in the two major versions of the Azure Functions runtime:

typeType 1.x1.x 2.x12.x1 DesencadenadorTrigger EntradaInput OutputOutput
Blob StorageBlob storage
Cosmos DBCosmos DB
Event GridEvent Grid
Event HubsEvent Hubs
HTTP y webhooksHTTP & webhooks
IoT HubIoT Hub
Microsoft Graph
Tablas de Excel
Microsoft Graph
Excel tables
Microsoft Graph
Archivos de OneDrive
Microsoft Graph
OneDrive files
Microsoft Graph
Correo electrónico de Outlook
Microsoft Graph
Outlook email
Eventos de
Microsoft Graph
Microsoft Graph
events
Microsoft Graph
Tokens de autenticación
Microsoft Graph
Auth tokens
Mobile AppsMobile Apps
Centros de notificacionesNotification Hubs
Queue StorageQueue storage
SendGridSendGrid
Service BusService Bus
SignalRSignalR
Table storageTable storage
TemporizadorTimer
TwilioTwilio

1 En 2.x, se deben registrar todos los enlaces, excepto HTTP y el temporizador.1 In 2.x, all bindings except HTTP and Timer must be registered. Consulte Registro de extensiones de enlace.See Register binding extensions.

Funciones de pruebaTesting functions

Azure Functions Core Tools le permite ejecutar un proyecto de Azure Functions en el equipo de desarrollo local.Azure Functions Core Tools lets you run Azure Functions project on your local development computer. Se le solicita que instale estas herramientas la primera vez que inicie una función de Visual Studio.You are prompted to install these tools the first time you start a function from Visual Studio.

Para probar la función, presione F5.To test your function, press F5. Si se le solicita, acepte la solicitud de Visual Studio para descargar e instalar las herramientas de Azure Functions Core (CLI).If prompted, accept the request from Visual Studio to download and install Azure Functions Core (CLI) tools. También es preciso que habilite una excepción de firewall para que las herramientas para controlen las solicitudes de HTTP.You may also need to enable a firewall exception so that the tools can handle HTTP requests.

Con el proyecto en ejecución, puede probar el código tal como probaría la función implementada.With the project running, you can test your code as you would test deployed function. Para más información, consulte Estrategias para probar el código en Azure Functions.For more information, see Strategies for testing your code in Azure Functions. Cuando se ejecuta en modo de depuración, los puntos de interrupción se alcanzan en Visual Studio tal como se esperaba.When running in debug mode, breakpoints are hit in Visual Studio as expected.

Para más información sobre cómo usar Azure Functions Core Tools, consulte Codificación y comprobación de las funciones de Azure en un entorno local.To learn more about using the Azure Functions Core Tools, see Code and test Azure functions locally.

Publicación en AzurePublish to Azure

Al publicar desde Visual Studio, se usa uno de dos métodos de implementación:When publishing from Visual Studio, one of two deployment methods are used:

Siga estos pasos para publicar el proyecto en una aplicación de funciones de Azure.Use the following steps to publish your project to a function app in Azure.

  1. En el Explorador de soluciones, haga clic con el botón derecho en el proyecto y seleccione Publicar.In Solution Explorer, right-click the project and select Publish.

  2. En el cuadro de diálogo Elegir un destino de publicación, use las opciones de publicación que se especifican en la tabla que aparece debajo de la imagen:In the Pick a publish target dialog, use the publish options as specified in the table below the image:

    Elegir un destino de publicación

    OpciónOption DESCRIPCIÓNDescription
    Azure Functions Consumption plan (Plan de consumo de Azure Functions)Azure Functions Consumption plan Si publica el proyecto en una aplicación de funciones que se ejecuta en un plan de consumo, solo paga por las ejecuciones de la aplicación.When you publish your project to a function app that runs in a Consumption plan, you only pay for executions of your functions app. Otros planes de hospedaje suponen costos más elevados.Other hosting plans incur higher costs. Para más información, consulte Escalado y hospedaje de Azure Functions.To learn more, see Azure Functions scale and hosting.
    Cree uno nuevoCreate new En Azure se crea una nueva aplicación de funciones, con recursos relacionados.A new function app, with related resources, is created in Azure. Al elegir Seleccionar existente, todos los archivos de la aplicación de función existente en Azure se sobrescriben con los archivos del proyecto local.When you choose Select Existing, all files in the existing function app in Azure are overwritten by files from the local project. Use esta opción solo al volver a publicar actualizaciones en una aplicación de función existente.Only use this option when republishing updates to an existing function app.
    Ejecución desde el archivo de paqueteRun from package file La aplicación de funciones se implementa con la implementación de un archivo zip y con el modo de ejecución desde el paquete habilitado.Your function app is deployed using Zip Deploy with Run-From-Package mode enabled. Esta es la forma recomendada de ejecutar las funciones, ya que supone una mejora del rendimiento.This is the recommended way of running your functions, which results in better performance. Cuando no se use esta opción, asegúrese de impedir que el proyecto de aplicación de función se ejecute localmente antes de publicar en Azure.When not using this option, make sure to stop your function app project from running locally before you publish to Azure.
  3. Seleccione Publicar.Select Publish. Si aún no ha iniciado sesión en la cuenta de Azure desde Visual Studio, seleccione Iniciar sesión.If you haven't already signed-in to your Azure account from Visual Studio, select Sign-in. También puede crear una cuenta de Azure gratis.You can also create a free Azure account.

  4. En el cuadro de diálogo App Service: Crear nuevo, use la configuración de hospedaje que se especifica en la tabla incluida debajo de la imagen:In the App Service: Create new dialog, use the Hosting settings as specified in the table below the image:

    Cuadro de diálogo Crear servicio de aplicaciones

    ConfiguraciónSetting Valor sugeridoSuggested value DescripciónDescription
    NombreName Nombre único globalmenteGlobally unique name Nombre que identifica de forma única la nueva aplicación de función.Name that uniquely identifies your new function app. Los caracteres válidos son a-z, 0-9 y -.Valid characters are a-z, 0-9, and -.
    SuscripciónSubscription Elija una suscripciónChoose your subscription La suscripción de Azure que se va a usar.The Azure subscription to use.
    Grupo de recursosResource Group myResourceGroupmyResourceGroup Nombre del grupo de recursos en el que se va a crear la aplicación de función.Name of the resource group in which to create your function app. Elija Nuevo para crear un grupo de recursos nuevo.Choose New to create a new resource group.
    Plan de hospedajeHosting Plan Plan de consumoConsumption plan Asegúrese de que elige Consumo en Tamaño después de seleccionar Nuevo, para crear un plan sin servidor.Make sure to choose the Consumption under Size after you select New to create a serverless plan. Además, elija una ubicación en una región cercana a usted o a otros servicios a los que acceden las funciones.Also, choose a Location in a region near you or near other services your functions access. Si ejecuta un plan distinto a Consumo, debe administrar el escalado de la aplicación de función.When you run in a plan other than Consumption, you must manage the scaling of your function app.
    Azure StorageAzure Storage Cuenta de almacenamiento de uso generalGeneral-purpose storage account El entorno de ejecución de Functions necesita una cuenta de Azure Storage.An Azure storage account is required by the Functions runtime. Seleccione Nuevo para crear una cuenta de almacenamiento de uso general.Select New to create a general-purpose storage account. También puede usar una cuenta existente que cumpla los requisitos de la cuenta de almacenamiento.You can also use an existing account that meets the storage account requirements.
  5. Seleccione Crear para crear una aplicación de funciones y los recursos relacionados en Azure con esta configuración e implemente el código del proyecto de función.Select Create to create a function app and related resources in Azure with these settings and deploy your function project code.

  6. Una vez finalizada la implementación, anote el valor de la dirección URL del sitio, que es la dirección de la aplicación de función en Azure.After the deployment is complete, make a note of the Site URL value, which is the address of your function app in Azure.

    Publicar mensaje de operación correcta

Configuración de Function AppFunction app settings

Cualquier configuración que agregue en local.settings.json debe agregarse a la aplicación de función en Azure.Any settings you added in the local.settings.json must be also added to the function app in Azure. Esta configuración no se carga automáticamente cuando publica el proyecto.These settings aren't uploaded automatically when you publish the project.

La manera más sencilla de cargar la configuración requerida en la aplicación de función en Azure es usar el vínculo Administrar configuración de la aplicación... que aparece una vez que publica correctamente el proyecto.The easiest way to upload the required settings to your function app in Azure is to use the Manage Application Settings... link that is displayed after you successfully publish your project.

Con esto aparece el cuadro de diálogo Configuración de la aplicación para la aplicación de función, donde puede agregar una configuración de la aplicación nueva o modificar alguna existente.This displays the Application Settings dialog for the function app, where you can add new application settings or modify existing ones.

Local representa un valor de configuración en el archivo local.settings.json y Remoto es el valor actual de la aplicación de función de Azure.Local represents a setting value in the local.settings.json file, and Remote is the current setting in the function app in Azure. Elija Agregar configuración para crear una nueva configuración de aplicación.Choose Add setting to create a new app setting. Use el vínculo Insertar un valor desde Local para copiar un valor de configuración para el campo Remoto.Use the Insert value from Local link to copy a setting value to the Remote field. Los cambios pendientes se escriben en el archivo de configuración local y la aplicación de función cuando se selecciona Aceptar.Pending changes are written to the local settings file and the function app when you select OK.

Nota

De forma predeterminada, el archivo local.settings.json no se ha insertado en el control de código fuente.By default, the local.settings.json file is not checked into source control. Esto significa que al clonar un proyecto de funciones locales desde el control de código fuente, el proyecto no tiene el archivo local.settings.json.This means that when you clone a local Functions project from source control, the project doesn't have a local.settings.json file. En este caso, debe crear manualmente el archivo local.settings.json en la raíz del proyecto para que el cuadro de diálogo Configuración de la aplicación funcione según lo previsto.In this case, you need to manually create the local.settings.json file in the project root so that the Application Settings dialog works as expected.

También puede administrar la configuración de la aplicación en una de estas otras maneras:You can also manage application settings in one of these other ways:

Supervisión de funcionesMonitoring functions

La forma recomendada de supervisar la ejecución de las funciones es mediante la aplicación de función con Azure Application Insights.The recommended way to monitor the execution of your functions is by integrating your function app with Azure Application Insights. De forma predeterminada, cuando crea una aplicación de función en Azure Portal, esta integración se realiza automáticamente.When you create a function app in the Azure portal, this integration is done for you by default. Sin embargo, cuando se crea la aplicación de función durante la publicación de Visual Studio, no se lleva a cabo su integración en Azure.However, when you create your function app during Visual Studio publishing, the integration in your function app in Azure isn't done.

Para habilitar Application Insights para la aplicación de función:To enable Application Insights for your function app:

Functions simplifica el proceso de agregar la integración de Application Insights a una aplicación de función desde Azure Portal.Functions makes it easy to add Application Insights integration to a function app from the Azure portal.

  1. En el portal, seleccione Todos los servicios> Aplicaciones de función, seleccione su aplicación de función y, luego, elija el banner Application Insights de la parte superior de la ventanaIn the portal, select All services > Function Apps, select your function app, and then select the Application Insights banner at the top of the window

    Habilitación de Application Insights desde el portal

  2. Cree un recurso de Application Insights mediante la configuración especificada en la tabla que hay debajo de la imagen.Create an Application Insights resource by using the settings specified in the table below the image.

    Creación de recursos en Application Insights

    ConfiguraciónSetting Valor sugeridoSuggested value DescripciónDescription
    NombreName Nombre de aplicación únicoUnique app name Lo más fácil es usar el mismo nombre que usa para la aplicación de función, que debe ser único en su suscripción.It's easiest to use the same name as your function app, which must be unique in your subscription.
    UbicaciónLocation Europa occidentalWest Europe Si es posible, use la misma región que la aplicación de función o una que esté cerca de esa región.If possible, use the same region as your function app, or one that's close to that region.
  3. Seleccione Aceptar.Select OK. El recurso de Application Insights se crea en el mismo grupo de recursos y suscripción que su aplicación de función.The Application Insights resource is created in the same resource group and subscription as your function app. Después de crear el recurso, cierre la ventana Application Insights.After the resource is created, close the Application Insights window.

  4. De vuelta en la aplicación de función, seleccione Configuración de la aplicacióny desplácese hacia abajo hasta Configuración de la aplicación.Back in your function app, select Application settings, and then scroll down to Application settings. Si ve una configuración denominada APPINSIGHTS_INSTRUMENTATIONKEY, significa que la integración de Application Insights está habilitada para la aplicación de función que se ejecuta en Azure.If you see a setting named APPINSIGHTS_INSTRUMENTATIONKEY, Application Insights integration is enabled for your function app running in Azure.

Para más información, consulte Supervisión de Azure Functions.To learn more, see Monitor Azure Functions.

Pasos siguientesNext steps

Para más información sobre Azure Functions Core Tools, consulte Codificación y comprobación de las funciones de Azure en un entorno local.To learn more about the Azure Functions Core Tools, see Code and test Azure functions locally.

Para más información sobre el desarrollo de funciones como las bibliotecas de clases de .NET, consulte Referencia para desarrolladores de C# de Azure Functions.To learn more about developing functions as .NET class libraries, see Azure Functions C# developer reference. Este artículo también tiene vínculos a ejemplos de cómo usar atributos para declarar los distintos tipos de vínculos compatibles con Azure Functions.This article also links to examples of how to use attributes to declare the various types of bindings supported by Azure Functions.