En este capítulo, explicaremos lo siguiente:
- Crear una aplicación de función con Visual Studio 2017
- Depurar Azure Functions de C# en un entorno preconfigurado local usando Visual Studio 2017
- Cómo conectarse al cloud de Azure Storage desde el entorno local de Visual Studio
- Implementar la aplicación Azure Function en Azure Cloud mediante Visual Studio
- Depurar en vivo Azure Function de C#, que se hospeda en el entorno en el cloud de Microsoft Azure, utilizando Visual Studio
- Implementar Azure Functions en un contenedor
Introducción
En todos los capítulos anteriores, hemos visto cómo crear Azure Functions directamente desde el portal de administración de Azure. A continuación, vemos algunas de las características:
- Puedes crear rápidamente una función seleccionando simplemente una de las plantillas integradas que se proporcionan en el runtime de Azure Function
- Los desarrolladores no deben preocuparse por escribir el código de asociación y entender cómo funcionan los marcos
- Los cambios de configuración se pueden hacer dentro de la interfaz de usuario utilizando el editor estándar
A pesar de todas las ventajas mencionadas, puede que los desarrolladores no lo vean cómodo si se acostumbraron a trabajar con sus entornos de desarrollo integrado (IDE) favoritos hace mucho tiempo. Por lo tanto, el equipo de Microsoft ha creado algunas herramientas que ayudan a los desarrolladores a integrarlos en Visual Studio para que puedan aprovechar algunas de las características IDE importantes que aceleran sus esfuerzos de desarrollo. Aquí tenemos algunas:
- Los desarrolladores se benefician del soporte de IntelliSense
- Puedes depurar código línea por línea
- Puedes ver rápidamente los valores de las variables mientras estás depurando la aplicación
- Integración con sistemas de control de versiones como Azure DevOps
(anteriormente, se denominaba Visual Studio Team Services (VSTS))
Actualmente, en el momento de la escritura, las herramientas de Visual Studio de la función admiten la depuración solo para C#. En el futuro, es probable que Microsoft presente todas estas magníficas características para otros idiomas.
Descubrirás algunas de las características mencionadas anteriormente en este capítulo y verás cómo integrar el código con Azure DevOps en el capítulo 11, Implementar la integración continua mediante Azure DevOps.
Crear una aplicación de función con Visual Studio 2017
En esta receta, verás cómo crear una Azure Function para tu IDE favorito en Visual Studio 2017.
Preparación
Debes descargar e instalar el software y las herramientas siguientes:
- Descarga la versión más reciente de Visual Studio 2017. Puedes hacerlo desde https://visualstudio.microsoft.com/downloads/.
- Durante la instalación, elige la sección Desarrollo de Azure en las cargas de trabajo, como se muestra en la siguiente captura de pantalla y, a continuación, haz clic en el botón Instalar:

- Desplázate hasta Herramientas | Extensiones y actualizaciones y comprueba si hay alguna actualización de las herramientas de Visual Studio para Azure Functions, como se muestra en la siguiente captura de pantalla:

Cómo hacerlo…
Sigue estos pasos:
- Abre Visual Studio, selecciona Archivo y, a continuación, haz clic en Nuevo proyecto. En el cuadro de diálogo Nuevo proyecto, en Plantillas instaladas, en Visual C#, selecciona Cloud y, a continuación, selecciona la plantilla Azure Functions:

- Escribe el nombre de la aplicación de función. Haz clic en el botón Aceptar para pasar al paso siguiente. Como se muestra en la siguiente captura de pantalla, selecciona Azure Funtions v2 (.NET Core) en el menú desplegable y, a continuación, Desencadenador de HTTP y haz clic en el botón Aceptar:

- Hemos creado correctamente la aplicación Azure Function junto con un desencadenador de HTTP (que acepta solicitudes web y envía una respuesta al cliente) con el nombre Function1. Siéntete libre de cambiar el nombre predeterminado de la aplicación de función y también asegúrate de compilar la aplicación para descargar los paquetes de NuGet necesarios, si los hay.
- Después de crear una nueva función, también se creará una clase nueva, como se muestra en la siguiente captura de pantalla:

Ahora hemos creado correctamente una nueva aplicación de función desencadenada por HTTP con Visual Studio 2017.
Cómo funciona…
Las herramientas de Visual Studio de Azure Functions permiten a los desarrolladores usar su IDE favorito, que puede que lleven años utilizando. Con las herramientas de Azure Function, puedes usar el mismo conjunto de plantillas que proporciona el portal de administración de Azure para la rápida creación e integración con los servicios en el cloud sin escribir ningún código de asociación (o un código mínimo).
La otra ventaja de usar las herramientas de Visual Studio para las funciones es que no es necesario tener una suscripción a Azure en vivo. Puedes depurar y probar Azure Functions directamente en tu entorno de desarrollo local. La CLI de Azure y las utilidades relacionadas nos brindan toda la asistencia necesaria para ejecutar Azure Functions.
Y eso no es todo…
Uno de los problemas más comunes a los que se enfrentan los desarrolladores al desarrollar cualquier aplicación en su entorno local es que todo funciona bien en el equipo local, pero no en el entorno de producción. Cuando hablamos de Azure Functions, los desarrolladores no deben preocuparse acerca de esto. El runtime de Azure Functions, proporcionado por las herramientas de la CLI de Azure, es exactamente el mismo runtime disponible en Azure Cloud.
Ten en cuenta que siempre puedes usar y desencadenar un servicio de Azure que se ejecute en el cloud, incluso cuando estés desarrollando Azure Functions localmente.
Depurar Azure Functions de C# en un entorno preconfigurado local usando Visual Studio 2017
Una vez finalizada la configuración básica de la creación de nuestra función, el siguiente paso es empezar a trabajar en el desarrollo de la aplicación en función de tus necesidades. Desarrollar código a diario no es en absoluto una tarea sencilla; los desarrolladores se encuentran con todo tipo de problemas técnicos. Necesitan herramientas que les ayuden a identificar la causa raíz del problema y solucionarlo para asegurarse de que están suministrando la solución. Entre estas herramientas se incluyen herramientas de depuración que ayudan a los desarrolladores a adentrarse en cada línea del código para ver los valores de la variable y los objetos y obtener una vista detallada de las excepciones.
En esta receta, aprenderás a configurar y depurar una Azure Function en un entorno de desarrollo local dentro de Visual Studio.
Preparación
Descarga e instala la CLI de Azure (si no tienes estas herramientas instaladas, ten en cuenta que Visual Studio las descargará automáticamente cuando ejecutes tus funciones desde Visual Studio).
Cómo hacerlo…
Sigue estos pasos:
- En nuestra receta anterior, creamos la función HTTPTrigger con Visual Studio. Compilemos la aplicación haciendo clic en Compilar y, a continuación, en Compilar solución.
- Abre el archivo HTTPTriggerCSharpFromVS.cs y crea un punto de interrupción presionando la tecla F9, como se muestra en la siguiente captura de pantalla:

- Presiona la tecla F5 para empezar a depurar la función. Al presionar F5 por primera vez, Visual Studio te pide que descargues las herramientas de la CLI de Visual Studio si aún no las tienes instaladas. Estas herramientas son esenciales para ejecutar una Azure Function en Visual Studio:

- Al hacer clic en Sí en la captura de pantalla anterior se iniciará la descarga de las herramientas de la CLI. La descarga y la instalación de las herramientas de la CLI tardará unos minutos.
- Una vez instaladas correctamente las herramientas de la CLI de Azure Function, se creará e iniciará un host de trabajo. Se inicia la supervisión de solicitudes en un puerto específico de todas las funciones de nuestra aplicación de función. En la siguiente captura de pantalla se muestra que el host de trabajo ha comenzado a supervisar las solicitudes a la aplicación de función:

- Vamos a tratar de acceder a la aplicación de función realizando una solicitud a http://localhost:7071 en tu navegador favorito:

- Ahora, escribe la dirección URL completa de nuestro desencadenador de HTTP en el navegador. Debería tener el siguiente aspecto: http:// localhost:7071/api/HttpTriggerCsharpFromVS?name=Praveen Sreeram.
- Después de escribir la dirección URL correcta de la Azure Function, en cuanto presionamos la tecla Entrar en la barra de direcciones del navegador, el depurador de Visual Studio también ejecuta el punto de depuración (si dispones de uno), como se muestra en la siguiente captura de pantalla:

- También puedes ver los datos de tus variables, como se muestra en la siguiente captura de pantalla:

- Una vez completada la depuración, puedes hacer clic en la tecla F5 para finalizar el proceso de ejecución, después del cual verás la respuesta de salida en el navegador, como se muestra en la siguiente captura de pantalla:

- El registro de ejecución de la función se verá en la consola del host de trabajo, como se muestra en la siguiente captura de pantalla:

- Puedes agregar más Azure Functions a la aplicación de función, si es necesario. En la siguiente receta, veremos cómo conectarse al cloud de Azure Storage desde el entorno local.
Cómo funciona…
El host de trabajo funciona como un servidor que escucha un puerto específico. Si hay alguna solicitud a ese puerto en concreto, automáticamente se encarga de ejecutar las solicitudes y envía una respuesta.
La consola del host de trabajo te proporciona la siguiente información:
- El estado de la ejecución, junto con los datos de solicitud y respuesta
- Los detalles sobre todas las funciones disponibles en la aplicación de función
Y eso no es todo…
Al usar Visual Studio, puedes crear directamente funciones precompiladas, lo que significa que cuando compilas tus funciones, Visual Studio crea un archivo .dll al que se puede hacer referencia en otras aplicaciones, tal como lo haces para las clases normales. A continuación, se enumeran dos de las ventajas de usar funciones precompiladas:
- Las funciones precompiladas tienen un mejor rendimiento, ya que no se requiere que se compilen sobre la marcha
- Puedes convertir tus clases tradicionales en Azure Functions fácilmente y consultarlas en otras aplicaciones sin problemas
Cómo conectarse al cloud de Azure Storage desde el entorno local de Visual Studio
En las dos recetas anteriores, has aprendido a crear y ejecutar Azure Functions en un entorno local. Desencadenamos la función desde un navegador local. Sin embargo, en esta receta, aprenderás a activar una Azure Function en tu entorno local cuando ocurra un evento en Azure. Por ejemplo, cuando se crea un nuevo blob en una cuenta de Azure Storage, puedes activar tu función en tu equipo local. Esto ayuda a los desarrolladores a probar sus aplicaciones por adelantado, antes de implementarlas en el entorno de producción.
Preparación
Establece los siguientes requisitos previos:
- Crea una cuenta de almacenamiento y, a continuación, un contenedor de blob denominado cookbookfiles, en Azure.
- Instala el explorador de Microsoft Azure Storage desde http://storageexplorer.com/.
Cómo hacerlo…
Sigue estos pasos:
- Abre la aplicación de Azure Function FunctionAppInVisualStudio en Visual Studio y, a continuación, agrega una función nueva haciendo clic con el botón derecho del ratón en el proyecto FunctionAppInVisualStudio. Haz clic en Agregar | Nueva Azure Function, que abre una ventana emergente. Aquí, en el campo de nombre, escribe BlobTriggerCSharp y, a continuación, haz clic en el botón Agregar.
- Esto abre otra ventana emergente, donde puedes proporcionar otros parámetros, como se muestra en la siguiente captura de pantalla:

- En la configuración de conexión de la cuenta de almacenamiento, escribe AzureWebJobsStorage como nombre de la cadena de conexión y proporciona también el nombre del contenedor de blob (en mi caso, es cookbookfiles) en el campo de entrada Ruta y, a continuación, haz clic en el botón Aceptar para crear la nueva función del desencadenador de blob. Se crea una nueva función del desencadenador de blob, como se muestra en la siguiente captura de pantalla:

- Si recuerdas la receta Crear una API web back-end mediante desencadenadores de HTTP del capítulo 1, Desarrollar aplicaciones en el cloud mediante desencadenadores y enlaces de funciones, el portal de administración de Azure nos permite seleccionar entre una cuenta de almacenamiento nueva o una existente. Sin embargo, el cuadro de diálogo anterior no está conectado a tu suscripción de Azure. Por lo tanto, debes ir a la cuenta de almacenamiento y copiar la cadena de conexión, que se puede encontrar en la hoja Claves de acceso de la cuenta de almacenamiento en el portal de administración de Azure, como se muestra en la siguiente captura de pantalla:

- Pega la cadena de conexión en el archivo local.settings.json, que se encuentra en la carpeta raíz del proyecto. Este archivo se crea cuando creas la aplicación de función. Después de agregar la cadena de conexión a la clave denominada AzureWebJobsStorage, el archivo local.settings.json debe tener el aspecto que se muestra en la siguiente captura de pantalla:

- Abre el archivo BlobTriggerCSharp.cs y crea un punto de interrupción, como se muestra en la siguiente captura de pantalla:

- Ahora presiona la tecla F5 para iniciar el host de trabajo, como se muestra en la siguiente captura de pantalla:

- He agregado un archivo blob nuevo con el explorador de Azure Storage, como se muestra en la siguiente captura de pantalla:

- En cuanto se haya agregado el blob al contenedor especificado (en este caso, es cookbookfiles), que se encuentra en el cloud en una ubicación remota, el host de trabajo que se ejecuta en mi equipo local detecta que se ha agregado un nuevo blob y el depurador ejecuta la función, como se muestra en la siguiente captura de pantalla:

Cómo funciona…
En esta clase BlobTriggerCSharp, el método Run tiene los atributos de WebJobs con una cadena de conexión (en este caso, es AzureWebJobsStorage). Esto indica al runtime que consulte la cadena de conexión de Azure Storage en el archivo de configuración de opciones local con la clave nombrada después de la cadena de conexión AzureWebJobsStorage. Cuando el host de trabajo se empieza a ejecutar, usa la cadena de conexión y mantiene el control de los contenedores de las cuentas de almacenamiento que hemos especificado. Cada vez que se agrega o actualiza un nuevo blob, desencadena automáticamente el desencadenador de blob en el entorno actual.
Y eso no es todo…
Al crear Azure Functions en el portal de administración de Azure, debes crear desencadenadores y enlaces de salida en la pestaña Integrar de cada Azure Function. Sin embargo, cuando creas una función desde el IDE de Visual Studio 2017, solo puedes configurar los atributos de WebJobs para lograrlo.
Puedes obtener más información sobre los atributos de WebJobs en https://docs.microsoft.com/azure/app-service/ webjobs-sdk-get-started.
Implementar la aplicación Azure Function en Azure Cloud mediante Visual Studio
Hasta ahora, nuestra aplicación de función es solo una aplicación normal dentro de Visual Studio. Para implementar la aplicación de función junto con sus funciones, o bien tenemos que crear los siguientes recursos nuevos o bien seleccionar los recursos existentes para hospedar la nueva aplicación de función:
- El grupo de recursos
- El plan de App Service
- La aplicación Azure Function
Puedes proporcionar toda esta información directamente desde Visual Studio sin abrir el portal de administración de Azure. Aprenderás a hacer eso en esta receta.
Cómo hacerlo…
Sigue estos pasos:
- Haz clic con el botón derecho en el proyecto y, a continuación, haz clic en el botón Publicar para abrir la ventana de publicación.
- En la ventana Publicar, selecciona la opción Crear nuevo y haz clic en el botón Publicar, como se muestra en la siguiente captura de pantalla:

- En la ventana Crear App Service, puedes seleccionar entre los recursos existentes o hacer clic en el botón Nuevo para seleccionar el nuevo Grupo de recursos, el plan de App Service y la cuenta de almacenamiento, como se muestra en la siguiente captura de pantalla:

- En la mayoría de los casos, lo mejor es utilizar el plan Consumo para el hosting de Azure Functions, a menos que tengas una razón convincente para no hacerlo y prefieras utilizar uno de los App Services existentes. Para seleccionar el plan de Consumo, tienes que hacer clic en el botón Nuevo que está disponible para el plan de App Service, como se muestra en la captura de pantalla anterior. Selecciona Consumo en el menú desplegable Tamaño y, a continuación, haz clic en el botón Aceptar, como se muestra en la siguiente captura de pantalla:

- Después de revisar toda la información, haz clic en el botón Crear de la ventana Crear App Service. Al hacer esto, se deberían empezar a implementar los servicios en Azure, como se muestra en la siguiente captura de pantalla:

- Si todo va bien, puedes ver la aplicación de función recién creada en el portal de administración de Azure, como se muestra en la siguiente captura de pantalla:

- ¡Cuidado! Nuestro trabajo en Visual Studio aún no ha terminado. Acabamos de crear los servicios requeridos en Azure directamente desde el IDE de Visual Studio. Nuestro siguiente trabajo es publicar el código de la estación de trabajo local en el cloud de Azure. Tan pronto como finalice la implementación, serás dirigido al paso de Web Deploy, como se muestra en la captura de pantalla. Haz clic en el botón Publicar para iniciar el proceso de publicación del código:

- Después de unos segundos, deberías ver algo similar a la siguiente captura de pantalla en la ventana Salida de tu instancia de Visual Studio:

- Eso es todo. Hemos finalizado la implementación de tu aplicación de función y sus funciones en Azure directamente desde tu IDE de desarrollo favorita, Visual Studio. Puedes revisar la implementación de la función en el portal de administración de Azure. Las dos Azure Functions se crearon correctamente, como se muestra en la siguiente captura de pantalla:

Y eso no es todo…
Las Azure Functions creadas desde Visual Studio 2017 están precompiladas, lo que significa que implementas los archivos .dll de Visual Studio 2017 en Azure. Por lo tanto, no puedes editar el código de las funciones en Azure después de implementarlas. Sin embargo, puedes realizar cambios en las opciones, como cambiar la cadena de conexión de Azure Storage, la ruta del contenedor, etc. Vamos a ver cómo hacerlo en la siguiente receta.
Depurar en vivo Azure Function de C#, que se hospeda en el entorno en el cloud de Microsoft Azure, utilizando Visual Studio
En una de las recetas anteriores, Cómo conectarse al cloud de Azure Storage desde el entorno local de Visual Studio, has aprendido a conectar la cuenta en el cloud desde el código local. En esta receta, aprenderás a depurar el código activo que se ejecuta en el entorno de Azure Cloud. Vamos a seguir estos pasos en la función BlobTriggerCSharp de la aplicación de función FunctionAppinVisualStudio:
- Cambiar la ruta del contenedor en el portal de administración de Azure por la del nuevo contenedor
- Abrir la aplicación de función en Visual Studio 2017
- Adjuntar el depurador desde dentro de Visual Studio 2017 a la Azure Function necesaria
- Crear un blob en el nuevo contenedor de almacenamiento
- Depurar la aplicación después de ejecutar los puntos de interrupción
Preparación
Crea un contenedor denominado cookbookfiles-live en la cuenta de almacenamiento. Vamos a cargar un blob en este contenedor.
Cómo hacerlo…
Sigue estos pasos:
- Ve a la función BlobTriggerCSharp en el portal de administración de Azure y cambia la ruta de la variable path para apuntar al nuevo contenedor cookbookfiles-live. Luego, vuelve a publicarla. Debe parecerse a cómo se muestra en la siguiente captura de pantalla:

- Abre la aplicación de función en Visual Studio 2017. Abre Server Explorer y desplázate a tu Azure Function; en este caso, FunctionAppinVisualStudio2017, como se muestra en la siguiente captura de pantalla:

- Haz clic con el botón derecho en la función y en Adjuntar depurador, como se muestra en la siguiente captura de pantalla:

- Visual Studio tardará un poco de tiempo en habilitar la depuración remota, como se muestra en la siguiente captura de pantalla:

- La dirección URL de la aplicación de función se abrirá en el navegador, como se muestra en la siguiente captura de pantalla, lo que indica que nuestra aplicación de función se está ejecutando:

- Ve al explorador de Storage y carga un archivo nuevo (en este caso, he cargado EmployeeInfo.json) en el contenedor cookbookfiles-live, como se muestra en la siguiente captura de pantalla:

- Después de unos momentos, se ejecutará el punto de interrupción de la depuración, que se muestra a continuación, donde puedes ver el nombre de archivo que se ha cargado:

Implementar Azure Functions en un contenedor
A estas alturas, es probable que hayas comprendido el principal caso de uso de por qué debes usar Azure Functions. Sí, al desarrollar un fragmento de código e implementarlo en un entorno sin servidor, donde un desarrollador o administrador no debe preocuparse por el aprovisionamiento y el escalado de las instancias para el hosting de tus aplicaciones del lado del servidor.
Realizar todas las funciones del entorno sin servidor solo se puede lograr al crear la aplicación de función, seleccionando el plan Consumo en el menú desplegable Plan de hosting.
Al ver el título de esta receta, es posible que ya te estés preguntando por qué y cómo puede ser útil la implementación de Azure Function en un contenedor de Docker. Exacto, la combinación de Azure Functions y el contenedor de Docker podría no tener sentido, ya que perderías todas las ventajas de Azure Functions sin servidor al realizar la implementación en Docker. Sin embargo, puede haber algunos clientes cuyas cargas de trabajo existentes puedan estar en algún cloud (ya sea público o privado), pero ahora quieren aprovechar algunos de los desencadenadores de Azure
Function y los servicios de Azure relacionados, por lo que querrán implementar Azure Functions como una imagen de Docker. Esta receta trata sobre cómo implementar esto.
Preparación
A continuación, se indican los requisitos previos para empezar a trabajar con esta receta:
- Instala la CLI de Azure desde https://docs.microsoft.com/cli/azure/ install-azure-cli?view=azure-cli-latest
- Puedes descargar Docker en https://store.docker.com/editions/ community/docker-ce-desktop-windows. Asegúrate de instalar la versión de Docker que sea compatible con el sistema operativo de tu entorno de desarrollo.
- También se requiere un conocimiento básico de Docker y sus comandos para poder compilar y ejecutar imágenes de Docker. Si te falta información, puedes revisar la documentación oficial de Docker acerca de este tema.
- Crea un Azure Container Registry (ACR) con los pasos siguientes. Esto se puede utilizar como un repositorio para todas las imágenes de Docker.
Creación de un ACR
Sigue estos pasos:
- Crea un nuevo ACR proporcionando los siguientes detalles, como se muestra en la siguiente captura de pantalla:

- Una vez creado el ACR correctamente, desplázate a la hoja Claves de acceso y anota el servidor de inicio de sesión, el nombre de usuario y la contraseña, que aparecen resaltados en la captura de pantalla siguiente. Estos campos los utilizarás más adelante en esta receta:

Cómo hacerlo…
En los tres primeros capítulos, hemos creado la aplicación de función y las funciones en el portal. Y, hasta el momento, en este capítulo, hemos creado la aplicación de función y las funciones en Visual Studio.
Antes de comenzar, hagamos un pequeño cambio en HTTPTrigger, para que entendamos que el código se está ejecutando desde Docker, como se resalta en la siguiente imagen. Para ello, acabo de agregar un mensaje de Docker a la salida, de la siguiente manera:

Crear una imagen de Docker para la aplicación de función
Sigue estos pasos:
- El primer paso para crear una imagen de Docker es crear un Dockerfile en nuestro proyecto de Visual Studio. Crea un .Dockerfile con el siguiente contenido:
FROM microsoft/azure-functions-dotnet-core2.0:2.0 COPY ./bin/
Release/netstandard2.0 /home/site/wwwroot
- A continuación, ve al símbolo del sistema y ejecuta el siguiente comando de Docker, docker build -t functionsindocker; no te olvides de incluir el punto al final del comando para crear una imagen de Docker. Después de ejecutar el comando docker build, el resultado debe ser algo parecido a lo que se muestra en la siguiente captura de pantalla:

- Una vez que la imagen se haya creado correctamente, el siguiente paso es ejecutar la imagen de Docker en un puerto específico. Para ello, ejecuta el comando. Deberías ver algo similar a lo que se muestra en la siguiente captura de pantalla:

- Comprueba que todo funciona bien en el entorno local navegando al host local con el puerto correcto, como se muestra en la siguiente captura de pantalla.

Insertar la imagen de Docker en el ACR
Sigue estos pasos:
- El primer paso es asegurarse de que proporcionamos una etiqueta válida a la imagen con el comando docker tag functionsindocker cookbookregistry.azurecr.io/functionsindocker:v1. Ejecutar este comando no proporcionará ningún resultado. Sin embargo, para ver nuestros cambios, tenemos que ejecutar el comando docker images, como se muestra en la siguiente captura de pantalla:

- Para insertar la imagen en ACR, debes autenticarte en Azure. Para ello, puedes usar comandos de la CLI de Azure. Debemos iniciar sesión en Azure con el comando az login. Al ejecutar este comando, se abrirá un navegador y se autenticarán tus credenciales, como se muestra en la siguiente captura de pantalla:

- El siguiente paso es autenticarte en el ACR con el comando az acr login –name cookbookregistry. Sustituye el nombre del ACR (en mi caso es cookbookregistry) por el de uno que hayas creado:

- Después de autenticarte, puedes insertar la imagen en el ACR ejecutando el comando docker push cookbookregistry.azurecr.io/ functionsindocker:v1, como se muestra en la siguiente captura de pantalla:

- A continuación, vamos hasta ACR en el portal de Azure y revisamos si nuestra imagen se insertó correctamente en la hoja Repositorios, como se muestra en la siguiente captura de pantalla:

Hemos creado correctamente una imagen y la hemos insertado en ACR. Ahora es el momento de crear la Azure Function y consultar la imagen de Docker que se insertó en el ACR.
Crear una nueva aplicación de función con Docker
Sigue estos pasos:
- Desplázate hasta la hoja Nuevo | Aplicación de función y proporciona la siguiente información:

- Ahora, selecciona Linux (Preview) en el campo SO y elige Imagen de Docker en el campo Publicar; a continuación, haz clic en Ubicación/Plan de App Service, como se muestra en la captura de pantalla anterior. Aquí, elige crear un nuevo plan de App Service básico.
- El paso siguiente y más importante es consultar la imagen que hemos insertado en el ACR. Esto se puede lograr haciendo clic en el botón Configurar contenedor y seleccionando el Azure Container Registry; a continuación, selecciona la imagen correcta, como se muestra en la siguiente captura de pantalla:

- Después de revisar todos los detalles, haz clic en el botón Crear para crear la aplicación de función.
- Eso es todo. Hemos creado una aplicación de función que nos permite implementar las imágenes de Docker enlazándolas a la imagen hospedada en Azure Container Registry. Vamos a probar rápidamente HttpTrigger navegando hasta el punto de conexión de HTTP en el navegador. A continuación, vemos el resultado de Azure Function.

Cómo funciona…
En los tres primeros capítulos, hemos creado la aplicación de función y las funciones en el portal. Por el contrario, hasta el momento, en este capítulo, hemos creado la aplicación de función y las funciones en Visual Studio.
En esta receta, hemos realizado lo siguiente:

Los puntos numerados de este diagrama hacen referencia a los pasos siguientes:
- Crear una imagen de Docker de la aplicación de función que hemos creado en este capítulo con Visual Studio.
- Insertar la imagen de Docker en el ACR
- Desde el portal, crear una nueva aplicación de función, eligiendo publicar el paquete ejecutable como una imagen de Docker.
- Adjuntar la imagen de Docker desde el ACR (paso 2 de la guía anterior) a Azure Function (paso 3 de la guía anterior)