Azure Functions proporciona una forma eficaz de ejecutar código en la nube sin administrar servidores. Creemos una función de Azure que ejecute PowerShell, perfecta para automatizar tareas o crear aplicaciones sin servidor.
Configuración de los requisitos previos
Primero, necesitamos configurar algunos recursos de Azure. Usaremos PowerShell para crear estos:
Cada Function App necesita una cuenta de almacenamiento para almacenar el código de función y otro contenido relacionado con la función. estamos usando Estándar_LRS (Almacenamiento localmente redundante) porque es rentable para fines de demostración. En un entorno de producción, podría considerar opciones más redundantes.
Aquí es donde ocurre la magia. Estamos creando una aplicación de funciones, que es el contenedor que albergará nuestras funciones. Estamos especificando PowerShell 7.2 como nuestro tiempo de ejecución para garantizar que nuestros scripts se ejecuten en PowerShell 7.2. Usamos Linux como nuestro tipo de sistema operativo porque generalmente es más rentable y más rápido que Windows.
La aplicación de funciones contiene todas las funciones que usted crea.
Creando la función localmente
Ahora que tenemos nuestros recursos de Azure configurados, creemos la función localmente:
Host.json es un archivo de configuración global que afecta todas las funciones dentro de una aplicación. Configura cosas como registro, tiempo de espera de funciones, enlaces y activadores entre funciones.
El configuración.local.json El archivo es un archivo de configuración para el desarrollo local. Por lo general, trabajará en su código de función aquí localmente y luego lo publicará una vez que esté completo.
perfil.ps1 – Este es un script de PowerShell que se ejecuta cuando se inicia la aplicación de funciones o se crea un nuevo espacio de ejecución. Se utiliza para tareas de inicialización global, como configurar la autenticación, importar módulos y definir variables disponibles para todas las funciones de la aplicación.
requisitos.psd1 – Este archivo de manifiesto de PowerShell enumera las dependencias del módulo de PowerShell para su aplicación de funciones. Especifica qué módulos y versiones deben instalarse automáticamente, asegurando que todas las herramientas necesarias estén disponibles para que sus funciones se ejecuten correctamente.
Pero no hay scripts de PowerShell que invocar. Depende de nosotros crear.
4. Cree una nueva función dentro del proyecto. Para crear eso, necesito crear una subcarpeta dentro de la carpeta del proyecto, que se llamará el nombre de la función.
using namespace System.Net
param($Request, $TriggerMetadata)
$name = $Request.Query.Name
$body = "Hello, $name. This HTTP triggered function executed successfully."
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::OK
Body = $body
})
Este es el corazón de nuestra función: el código de PowerShell real que se ejecutará. Este es un ejemplo simple que demuestra la entrada y la salida. Cuando la función se activa a través de HTTP (ya que lo configuramos en el archivo JSON de la función), la solicitud HTTP se representará a través del parámetro Solicitud. El parámetro Solicitud contendrá información como el verbo HTTP utilizado, como GET o POST, la consulta y la carga útil o el cuerpo de la solicitud HTTP para solicitudes POST.
El script leerá el parámetro de consulta HTTP Nombre, le asignará la variable de nombre y luego lo usará en una cadena simple.
Finalmente, la función generará información a través de HTTP, por lo que debemos aplicar un enlace de salida. El enlace de salida “vinculará” el flujo de salida del script de PowerShell a la función para enviarlo de vuelta a través de una respuesta HTTP. Para convertir la salida de PowerShell en una respuesta HTTP que la función comprenda, debemos crear un HttpResponseContext objeto con dos propiedades:
StatusCode: Establecido en HTTP 200 OK, lo que indica una solicitud exitosa.
Body: El mensaje de saludo que construimos anteriormente.
Esta estructura permite a Azure Functions formatear correctamente la respuesta HTTP que se devolverá al cliente.
Este función.json El archivo es crucial. Define los enlaces para nuestra función. Los enlaces especifican cómo se activa y cómo genera datos.
Estamos configurando un activador HTTP que responde a solicitudes GET y POST
Esta función utilizará autenticación anónima para que podamos consultar la URL a la que estará expuesta sin proporcionar ninguna credencial.
La función devolverá una respuesta HTTP y se llamará $Response variable dentro del script de PowerShell que ejecutaremos.
Esto debe guardarse en la misma carpeta que el run.ps1 guion.
6. Ahora, navegue primero hasta la carpeta de funciones.
cd C:\PowerShellFunctionProject
7. Y vea si la función puede iniciarse.
Al desarrollar Azure Functions, primero debe publicarlo localmente y luego publicarlo cuando haya terminado. Puede ejecutar una función localmente ejecutando func start.
Ah, otra dependencia. ¿No te encantan esos? Instalemos el SDK de .NET Core.
start https://www.microsoft.com/net/download
Todo hecho. Demos otra oportunidad. Pero primero, necesito reiniciar mi consola PowerShell nuevamente e intentarlo nuevamente.
…y nos topamos con otro error. El rojo que me llama la atención es “no se pudo iniciar un nuevo trabajador de lenguaje para PowerShell en tiempo de ejecución”. Un trabajador en Azure Functions es el host que ejecuta PowerShell. Como estamos ejecutando localmente, esa es mi máquina local. Comprobemos el archivo JSON de configuración local.
Puedes ver donde $Request.Query.Name está en el guión aquí.
Ahora sabemos que la función fue activada por la solicitud HTTP GET que acabamos de ejecutar en el servidor web local. La función se ejecutó, ejecutó el script de PowerShell y luego envió la salida del script de PowerShell a través de una respuesta HTTP.
Publicación de la función de Azure
Nuestra función está completa y probada localmente; ahora publiquémoslo en Azure y veamos si funciona allí también. Primero déjame asegurarme de estar en el directorio de mi proyecto de función.
Ahora puedo usar el binario func nuevamente y publicar la función especificando el nombre de la aplicación de funciones a la que enviar la función local.
Este proceso comprime todos los archivos en esa carpeta de funciones, los carga en la cuenta de almacenamiento que aloja la aplicación de funciones y luego los implementa en una pequeña aplicación web.
¡Éxito! Ahora se ejecuta exactamente igual que en mi máquina local. ¡Nuestra función Azure está implementada y disponible!
Conclusión
¡Felicidades! Ha creado correctamente una función de Azure que ejecuta código de PowerShell en la nube. Esto abre un mundo de posibilidades para la automatización sin servidor y la ejecución de scripts escalables.
Recuerde, esto es sólo una muestra de lo que ocurre. Azure Functions puede hacer mucho más, incluido el manejo de diferentes tipos de desencadenadores (como temporizadores o mensajes en cola) y la integración con otros servicios de Azure. ¡Feliz scripting en la nube!
Leave a comment