Ejercicio: crear una función de forma local mediante Core Tools

Completado

Azure Functions Core Tools le permite desarrollar funciones localmente en su propio equipo de la forma siguiente:

  • Crear los archivos y carpetas necesarios para un proyecto de Functions.
  • Proporcionar un host de Functions que se ejecute localmente desde el directorio raíz del proyecto.

Ha decidido empezar a trabajar localmente con Azure Functions desarrollando una función que calcula el interés simple. Finalmente, puede crear funciones más complejas que funcionen juntas y llamen a otros servicios y bases de datos. Usar Core Tools para crear una función que lleve a cabo un cálculo básico del préstamo es un buen comienzo. También quiere intentar ejecutar la función en su propio equipo antes de publicarla en Azure. Puede hacer todo esto desde Azure Cloud Shell mediante Core Tools.

Azure Cloud Shell incluye Core Tools, la CLI de Azure y un editor que puede usar para escribir código. Asegúrese de seleccionar Activar espacio aislado más arriba antes de continuar.

Creación de un proyecto local de Azure Functions

En este ejercicio, use Cloud Shell para desarrollar su primera función de JavaScript mediante Core Tools. Cloud Shell ya tiene instaladas las versiones correctas de Core Tools y Node.js.

  1. En la carpeta raíz, ejecute func init para crear un proyecto de funciones en una nueva carpeta loan-wizard.

    func init loan-wizard
    
  2. Cuando se le solicite seleccionar un runtime de trabajo, escriba 3 para nodo.

  3. Cuando se le pida seleccionar un lenguaje, escriba 1 para javascript.

    La salida enumera los archivos que se escriben en el disco, incluidos estos archivos:

    • host.json admite la configuración de nivel de aplicación tanto para la instancia de runtime como para los tipos de desencadenador y enlace específicos.
    • local.settings.json establece los comportamientos solo locales y la configuración de la aplicación (variables de entorno local).
    • package.json es un archivo específico de JavaScript que realiza un seguimiento de los paquetes que se instalan y se usan en el código.
    • .gitignore y extensions.json son archivos de configuración usados por la herramienta de control de versiones Git y Visual Studio Code, respectivamente. Puede ignorarlos por ahora.

Creación de una función desencadenada por HTTP

¡Es el momento de crear la función!

  1. En Cloud Shell, vaya al nuevo directorio loan-wizard.

    cd ~/loan-wizard
    
  2. Ejecute func new para iniciar el asistente para la creación de funciones.

    func new
    
  3. Cuando se le pida seleccionar una plantilla, escriba 7 para Desencadenador HTTP.

  4. Cuando se le pida que proporcione un nombre de función para el desencadenador HTTP, escriba *simple-interest.

  5. Ejecute el comando siguiente para abrir el editor de Cloud Shell.

    code .
    

    Screenshot showing the simple-interest folder with the function.json file open in Cloud Shell code editor.

    El asistente crea un nuevo archivo en el proyecto de funciones en src/functions denominado simple-interest.js, que tiene un contenido de plantilla predeterminado. Este código admite el modelo de programación Node.js v4 para Azure Functions. Dedique un momento a explorar los archivos del proyecto con el editor. En la captura de pantalla se muestra la carpeta expandida con simple-interest.js abierto en el editor.

Implementación de la función de interés simple

La implementación de la función predeterminada que Core Tools ha creado automáticamente en simple-interest.js busca una entrada denominada name en la cadena de consulta o el cuerpo de la solicitud HTTP de entrada y devuelve la cadena Hello, [name]. Es una buena ilustración de cómo usar un desencadenador HTTP, pero quiere reemplazar ese código por código que calcule el interés simple a partir de tres parámetros de entrada.

  1. En el panel ARCHIVOS del editor, expanda la carpeta src>functions y seleccione simple-interest.js para abrir el archivo en el editor.

  2. Reemplace el contenido completo de simple-interest.js por el código siguiente:

    const { app } = require('@azure/functions');
    
    app.http('simple-interest', {
        methods: ['GET','POST'],
        authLevel: 'anonymous',
        handler: async (request, context) => {
            const principal = parseFloat(request.query.get('principal'));
            const rate = parseFloat(request.query.get('rate'));
            const term = parseFloat(request.query.get('term'));
    
          if ([principal, rate, term].some(isNaN)) {
            // If any empty or non-numeric values, return a 400 response with an
            // error message
            return {
              status: 400,
              body: "Please supply principal, rate and term in the query string"
            };
          } else {
            // Otherwise set the response body to the product of the three values
            return { body: principal * rate * term };
          }
        }
    });
    

    Este script busca parámetros denominados principal, rate y term en la cadena de consulta de la solicitud HTTP. A continuación, devuelve el resultado del cálculo de interés simple (principal * rate * term).

  3. Presione Ctrl+S para guardar el archivo y presione Ctrl+Q para cerrar el editor.

Ejecución de la función en Cloud Shell

Para ejecutar la nueva función localmente para probarla, use func start para iniciar el runtime de Functions (func.exe) en un proceso en segundo plano para que pueda usar la línea de comandos mientras se ejecuta. A continuación, use una herramienta de línea de comandos, curl, para interactuar con la función.

Si usa Core Tools desde su propio equipo, solo puede usar curl desde una segunda ventana del terminal o un explorador web. La salida generada por Core Tools aparece en tiempo real en la primera ventana del terminal. En Cloud Shell, está limitado a un único terminal, por lo que debe ejecutar Core Tools (func.exe) en un proceso en segundo plano.

  1. Ejecute el siguiente comando para iniciar el host de Functions silenciosamente en segundo plano.

    func start &> ~/output.txt &
    

    Como ocurre con func new, Cloud Shell todavía debe estar en el directorio loan-wizard.

    El host de Functions ahora está escribiendo su salida en el archivo ~/output.txt. Puede seguir usando la línea de comandos mientras se ejecuta.

    Use el comando ps para comprobar que el proceso func se está ejecutando.

  2. Escriba el siguiente comando para ver el registro de salida.

    code ~/output.txt
    

    En la salida, verá un mensaje indica que Functions: simple-interest: está disponibles como una solicitud HTTP GET y POST http://localhost:7071/api/simple-interest.

    Nota:

    Si ve un mensaje de error, seleccione Ctrl+C para detener el host. Asegúrese de que el contenido del archivo de código es el mismo que el del ejemplo.

    Esta dirección URL de localhost no se publica en Internet; solo se puede acceder a ella desde herramientas que se ejecuten en la sesión de Cloud Shell.

  3. Para cerrar el editor, seleccione Ctrl+Q.

  4. Ejecute este comando para enviar una solicitud HTTP GET a la función que se ejecuta en el entorno local.

    curl "http://localhost:7071/api/simple-interest" -w "\n"
    

    La salida, Please supply principal, rate and term in the query string, indica que la función se ha invocado correctamente y puede devolver una respuesta, aunque no esté llamándola como se espera. Es necesario proporcionar los parámetros como parte de la solicitud HTTP.

  5. Vuelva a invocar la función. Esta vez, proporcione un valor para cada uno de los parámetros de cadena de consulta.

    curl "http://localhost:7071/api/simple-interest?principal=5000&rate=.035&term=36" -w "\n"
    

    Esta vez, la salida es 6300. La función funciona según lo previsto.

  6. Escriba el siguiente comando para ver el registro de salida de nuevo.

    code ~/output.txt
    

    Después de las entradas del registro de inicio, verá anexado un conjunto de entradas de registro con marca de tiempo para cada vez que haya llamado a la función con curl:

    [2024-02-20T06:25:56.700Z] Executing 'Functions.simple-interest' (Reason='This function was programmatically called via the host APIs.', Id=5daf20c3-f204-41bb-a5b9-021acaf17c04)
    [2024-02-20T06:25:56.893Z] Executed 'Functions.simple-interest' (Succeeded, Id=5daf20c3-f204-41bb-a5b9-021acaf17c04, Duration=228ms)
    
    
  7. Para cerrar el editor, seleccione Ctrl+Q.