Ejercicio: Creación y prueba de una instancia de Azure Functions sencilla localmente con Visual Studio
Visual Studio proporciona un entorno excelente para crear y probar una aplicación de funciones de Azure. Puede desarrollar una función de Azure localmente y comprobar que funciona correctamente antes de implementarla en la nube.
En el escenario de sitio web en línea de relojes de lujo, existe un requisito relativo a una función que devuelve información detallada sobre un reloj cuando se indica el número de modelo del reloj. Los datos que se deben devolver incluyen: el fabricante, el tipo de fondo de la caja (sólido, transparente o grabado), el bisel, el estilo de la esfera, el acabado de la caja, el número de rubíes, etc.
En este ejercicio, implementará y probará una versión de esta función localmente mediante Visual Studio.
Nota:
Antes de comenzar este ejercicio, asegúrese de que tiene VS 2022 instalado, junto con las extensiones de carga de trabajo web y en la nube Desarrollo de ASP.NET y web, y Desarrollo de Azure.
Creación de una aplicación de funciones de Azure
Cree una aplicación de funciones de Azure mediante una plantilla Azure Functions.
Inicie el Instalador de Visual Studio y, en la página de inicio de Visual Studio 2022, seleccione Modificar.
Asegúrese de que Desarrollo de ASP.NET y web y Desarrollo de Azure están seleccionados y disponibles (si no, seleccione Instalar durante la descarga) y seleccione Cerrar.
En la página de inicio de Visual Studio 2022, seleccione Iniciar.
En el menú Introducción, seleccione Crear un proyecto. Se abre la página Crear un proyecto.
Busque o desplácese hasta la plantilla de Azure Functions y seleccione Siguiente.
Se abre la página Configurar el nuevo proyecto. Escriba los siguientes valores:
Campo Value Nombre del proyecto WatchPortalFunction Ubicación Seleccione una ubicación para almacenar el proyecto; para ello, vaya a una carpeta o cree una carpeta en el equipo local. Nombre de la solución Acepte WatchPortalFunction (valor predeterminado). Colocar la solución y el proyecto en el mismo directorio Desactivado (NO seleccionado). Esta configuración garantiza la estructura de carpetas correcta para este módulo. Seleccione Next (Siguiente).
Aparece la página Información adicional.
Seleccione los siguientes valores.
Campo Value Versión de .NET *.NET 6.0 (compatibilidad a largo plazo) Desencadenador de función Desencadenador de HTTP Usar Azurita para la cuenta de almacenamiento de runtime (AzureWebJobsStorage) Activada Habilitación de Docker Desactivado Nivel de autorización Anónimo Si una notificación de Visual Studio indica que las actualizaciones están listas, seleccione Actualizar.
Seleccione Crear.
Visual Studio crea el proyecto
WatchPortalFunction
y muestra el archivo de código fuente de la aplicación de funcionesFunction1.cs
en la ventana del editor de código. El archivo contiene el código de una clase denominadaFunction1
.Como se muestra en el código de ejemplo siguiente, la clase
Function1
contiene código reutilizable de la plantilla de desencadenador de HTTP. El métodoRun
se anota con el atributo[FunctionName ("Function1")]
. En la unidad anterior vimos que los parámetros reutilizables del métodoRun
son un objetoHttpRequest
que contiene los detalles de la solicitud que desencadenó la función y una entrada del registro de seguimiento para registrar la información de seguimiento.namespace WatchPortalFunction { public static class Function1 { [FunctionName("Function1")] public static async Task<IActionResult> Run( [HttpTrigger(AuthorizationLevel.Anonymous, "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"); } } }
Creación de la función WatchInfo de Azure
En el menú Ver, seleccione Explorador de soluciones. En la ventana Explorador de soluciones, haga clic con el botón derecho en el proyecto de Azure Functions WatchPortalFunction y, en el menú contextual, seleccione Agregar>Nueva función de Azure.
En la ventana Agregar nuevo elemento: WatchPortalFunction, seleccione Función de Azure. En el campo Nombre, escriba WatchInfo.cs y seleccione Agregar.
En la ventana Nueva función de Azure: WatchInfo, seleccione Desencadenador de HTTP. En la lista desplegable Nivel de autorización, seleccione Anónimo y Agregar.
Visual Studio crea una función y el método
Run
se anota con el atributo[FunctionName("WatchInfo")]
.En el cuerpo de la función
Run
, elimine el código después de la línealog.LogInformation
. El resultado debería tener este aspecto.namespace WatchPortalFunction { public static class WatchInfo { [FunctionName("WatchInfo")] public static async Task<IActionResult> Run( [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req, ILogger log) { log.LogInformation("C# HTTP trigger function processed a request."); } } }
Inserte el código siguiente al final del método
Run
, después de la línealog.LogInformation
.// Retrieve the model id from the query string string model = req.Query["model"]; // If the user specified a model id, find the details of the model of watch if (model != null) { // Use dummy data for this example dynamic watchinfo = new { Manufacturer = "abc", CaseType = "Solid", Bezel = "Titanium", Dial = "Roman", CaseFinish = "Silver", Jewels = 15 }; return (ActionResult)new OkObjectResult($"Watch Details: {watchinfo.Manufacturer}, {watchinfo.CaseType}, {watchinfo.Bezel}, {watchinfo.Dial}, {watchinfo.CaseFinish}, {watchinfo.Jewels}"); } return new BadRequestObjectResult("Please provide a watch model in the query string");
Este código lee el parámetro
model
de la cadena de consulta en la solicitud HTTP y devuelve los detalles de ese modelo de reloj. En este código de ejemplo, creamos datoswatchinfo
ficticios que se devuelven independientemente del valor demodel
. La función devuelve una respuesta que contiene estos detalles. O bien, si la solicitud HTTP no incluye una cadena de consulta, la función devuelve un mensaje de error. En un ejemplo real, usaría el valormodel
para realizar una búsqueda delwatchinfo
correcto por devolver.
Prueba local de la función de Azure
En la barra de comandos, seleccione Depurar>Iniciar depuración.
Visual Studio compila la aplicación de funciones de Azure e inicia el entorno de ejecución de Azure Functions. Se abre una ventana de salida para mostrar los mensajes a medida que se inicia el tiempo de ejecución. Cuando el entorno de ejecución esté listo, se muestra una lista de las funciones HTTP y la dirección URL que puede usar para desencadenar cada función.
Abra un explorador web y escriba la dirección URL que se muestra en la ventana en tiempo de runtime. La dirección URL predeterminada es
http://localhost:7071/api/WatchInfo?model=abc
, por lo que es la que se usa en este ejercicio. La solicitud desencadena la funciónWatchInfo
y pasa el modeloabc
como parámetro de la cadena de consulta. El explorador web debe mostrar los detalles ficticios generados por la función.Escriba la dirección URL
http://localhost:7071/api/WatchInfo
. Esta solicitud no incluye una cadena de consulta. El desencadenador devuelve la respuesta de error y el explorador web muestra el mensajePlease provide a watch model in the query string
.Cierre el explorador web, pero deje la aplicación de funciones de Azure en ejecución.
En Visual Studio, establezca un punto de interrupción en la línea de código que recupera el modelo de la cadena de consulta.
Reinicie el explorador web y escriba la dirección URL sin la cadena de consulta
http://localhost:7071/api/WatchInfo
.Visual Studio resalta el código en el punto de interrupción donde se pausa la ejecución.
En Visual Studio, presione F10 para pasar por alto la instrucción en el punto de interrupción.
En la pestaña Automático de la ventana Depurador, compruebe que la variable
model
esnull
. La variable muestra este valor porque la cadena de consulta no contiene un parámetro de modelo.Vuelva a presionar F10 y compruebe que el control salte a la instrucción que devuelve un objeto
BadRequestObjectResult
.Para seguir ejecutando el método y volver al explorador web, presione F5. Debería mostrarse el mismo mensaje de error.
En el explorador web, escriba la dirección URL con una cadena de consulta y un parámetro de modelo. Pase por la función en el depurador y compruebe que el modelo se recupera correctamente. La variable
model
se debe rellenar con el valor del parámetro y los detalles del modelo se devuelven como objetoOkObjectResult
.En la barra de menús, seleccione Depurar>Detener depuración.
En este ejercicio, ha visto cómo la extensión Azure Functions Tools en Visual Studio simplifica la experiencia de creación de una aplicación de funciones de Azure, al permitirle usar herramientas conocidas para compilar y depurar su código.