Ejecutar una función desde el origen local

Con este tutorial, ejecutar una función con el Code Engine CLI de código en su sistema local

Una función es un fragmento de código sin estado que realiza tareas cuando se invoca mediante solicitudes de tipo " HTTP ". Con las funciones de IBM Code Engine, puede ejecutar su lógica de negocio de forma escalable y sin servidor. IBM Code Engine ofrecen un entorno de tiempo de ejecución optimizado para admitir escenarios de baja latencia y escalabilidad horizontal rápida. Su código de función puede escribirse en un tiempo de ejecución administrado que incluya versiones específicas de Node.js o Python.

Un paquete de códigos es una colección de archivos que representa el código de función. Este paquete de código se inyecta en el contenedor de tiempo de ejecución. El paquete de código lo crea Code Engine y se almacena en el registro de contenedor o en línea con la función. Un paquete de códigos no es una imagen de contenedor estándar de Open Container Initiative (OCI).

Antes de empezar

Todos los usuarios de Code Engine están obligados a tener una cuenta de pago por uso. Las guías de aprendizaje pueden incurrir en costes. Utilice el Estimador de costes para generar una estimación de costes basada en el uso previsto. Para obtener más información, consulte Precios deCode Engine.

Configurar el entorno

  1. Inicie una sesión en la CLI de IBM Cloud.

    ibmcloud login -r us-south
    
  2. Puede establecer como destino un grupo de recursos ejecutando el mandato siguiente. Para ver una lista de sus grupos de recursos, ejecute ibmcloud resource groups.

    ibmcloud target -g <resource_group>
    

    Salida de ejemplo

    Targeted resource group default
    
  3. Cree un proyecto en Code Engine denominado sample.

    ibmcloud ce project create --name sample
    

    Salida de ejemplo

    Creating project 'sample'...
    ID for project 'sample' is 'abcdabcd-abcd-abcd-abcd-abcd12e3456f7'.
    Waiting for project 'sample' to be active...
    Now selecting project 'sample'.
    OK
    

    Observe que el proyecto también está seleccionado por el contexto, por lo que todos los mandatos posteriores relacionados con la aplicación están dentro del ámbito de este nuevo proyecto sample.

  4. Familiarícese con los mandatos de funciones visualizando las opciones de mandato.

    ibmcloud ce fn --help
    

Crear el código fuente

Cree un archivo de origen Node.js denominado funhello.js con el siguiente código de ejemplo.

  function main(params) {
      var msg = 'You did not tell me who you are.';
      if (params.name) {
          msg = `Hello, ${params.name}!`
       } else {
          msg = `Hello, Functions on CodeEngine!`
      }
      return {
          headers: { 'Content-Type': 'text/html; charset=utf-8' },
          body: `<html><body><h3>${msg}</h3></body></html>`
       }
  }

  module.exports.main = main;

Crear la función

Cree la función a partir del archivo funhello.js.

ibmcloud ce fn create --name funhello --runtime nodejs --build-source funhello.js

Salida de mandato

Preparing function 'funhello' for build push...
Creating function 'funhello'...
Packaging files to upload from source path 'hello.js'...
Submitting build run 'funhello-run-230623-090738611'...
Creating image 'private.stg.icr.io/ce--8a6a0-13c66hbi3rhz/function-funhello:230623-1407-s8kzr'...
Waiting for build run to complete...
Build run status: 'Running'
Build run completed successfully.
Run 'ibmcloud ce buildrun get -n funhello-run-230623-090738611' to check the build run status.
Waiting for function 'funhello' to become ready...
Function 'funhello' is ready.
OK
Run 'ibmcloud ce function get -n funhello' to see more details.

https://funhello.13c66hbi3rhz.us-south.codeengine.appdomain.cloud

Después de que la invocación de la función URL esté disponible, utilice el siguiente comando para encontrar información sobre la función.

ibmcloud ce fn get -n funhello

Vamos a examinar detenidamente el mandato function create anterior. Observe que la salida del comando function create proporciona información sobre la progresión de la ejecución de la compilación antes de que la función sea creada y desplegada.

  1. Code Engine recibe una solicitud para crear una función a partir del código fuente.
  2. Code Engine comprueba si hay un ID de servicio IAM y una clave API asociados al proyecto seleccionado. Este ID de servicio debe estar autorizado para leer y escribir en IBM Cloud Container Registry. Si no existe ningún ID de servicio, Code Engine crea uno automáticamente. Tenga en cuenta que este ID de servicio se utiliza en las siguientes solicitudes de compilación de Code Engine que se ejecutan desde el mismo proyecto.
  3. Este ejemplo crea código a partir de una fuente local (--build-source). El código fuente (hello.js) se empaqueta en un archivo de paquete de código y se carga en un espacio de nombres gestionado dentro de la instancia IBM Cloud Container Registry de su cuenta. Tenga en cuenta que solo puede especificar IBM Cloud Container Registry como destino para las compilaciones locales. Para obtener más información sobre IBM Container Registry, incluida información sobre límites de cuota y acceso, consulte Introducción a IBM Cloud Container Registry.
  4. Code Engine crea el código fuente en un paquete de código. El paquete de código fuente se crea en el mismo espacio de nombres que el archivo fuente.
  5. Una vez finalizada la compilación, la función se despliega. Puede acceder a su función desde la dirección URL.

Invocar la función

Invoque la función URL pegándola en una ventana del navegador. También puede utilizar el mandato curl en la línea de mandatos.

Hello, Functions on CodeEngine!

Ha creado e invocado correctamente una función Code Engine.

Proporcionar parámetros para la función

Invoque la función URL con un parámetro añadiendo ?name=Sunshine al final de la URL y pegándola en una ventana del navegador.

https://funhello.13c66hbi3rhz.us-south.codeengine.appdomain.cloud?name=Sunshine
Hello, Sunshine!

Limpieza

Puede suprimir la función con el mandato siguiente.

ibmcloud ce fn delete -n funhello

Al eliminar la función, también se eliminan los archivos de compilación asociados.

Por último, elimine el paquete de código que la compilación creó a partir de IBM Cloud Container Registry.

  1. Navegar a Container Registry> Imágenes en el IBM Cloud consola.
  2. Seleccione la región en el Ubicación menú desplegable que seleccionó cuando inició sesión IBM Cloud.
  3. Encuentre la imagen (que representa su paquete de código) asociada con su función buscando el nombre de su función (por ejemplo,funhello ).
  4. Seleccione la imagen (por ejemplo,au.icr.io/ce--27b98-1jp42v8n9n3o/function-funhello@sha256:b53683f47e0e548b4fa1d3fc93404399fdc4008b54ccecc0852794ea88d01538 ) y seleccione Borrar desde el menú de elipses (...).

Próximos pasos

  • Después de crear su función, puede acceder a ella haciendo clic en Probar función en la consola o buscando la URL de su función con el function get comando.

  • Puede crear una correlación de dominios personalizada y asignarla a la función.

  • Después de crear y desplegar la función, puede actualizar la función para que se ajuste a sus necesidades desde la consola o utilizando el mandato ibmcloud ce function update. Si desea actualizar el código fuente para utilizarlo con su función, debe proporcionar la opción --build-source en el comando function update comando.

Una vez creada la función, puede actualizarla y su código de referencia utilizando cualquiera de las siguientes formas, independientemente de cómo haya creado o actualizado previamente la función:

  • Si tiene un paquete de código existente, solo debe proporcionar una referencia a la imagen, que apunta a la ubicación del registro de contenedor al desplegar la app. Para obtener más información, consulte Creación de cargas de trabajo de función a partir de paquetes de código existentes.

    Si ha creado la función utilizando el mandato function create y ha especificado la opción --build-source para crear el paquete de códigos a partir del origen local o de repositorio, y desea cambiar la función para que apunte a un paquete de códigos diferente, primero debe eliminar la asociación de la compilación de la función. Por ejemplo, ejecute ibmcloud ce function update -n FUN_NAME --build-clear. Después de eliminar la asociación de la compilación de la función, puede actualizar la función para que haga referencia a una imagen diferente.

  • Si usted está comenzando con el código fuente que reside en un repositorio Git, puede optar por dejar que Code Engine para construir el paquete de código de su fuente y crear su función con una sola operación. En este caso, Code Engine carga el paquete de código en IBM Cloud® Container Registry. Para obtener más información, consulte Creación de la función a partir del código fuente del repositorio.

  • Si está empezando con código fuente que reside en una estación de trabajo local, puede elegir Code Engine para crear el paquete de código a partir del origen y crear la función con un único mandato de CLI. En este escenario, Code Engine carga el código fuente y el paquete de código en IBM Cloud® Container Registry.

    Por ejemplo, puede elegir que Code Engine construya su fuente local mientras usted evoluciona el desarrollo de su fuente para la función. A continuación, después de que el paquete de códigos haya madurado, puede actualizar la función para que haga referencia al paquete de códigos específico que desee. Puede repetir este proceso según sea necesario.

¿Desea ver más ejemplos de código? Consulte los ejemplos de para IBM Cloud Code Engine GitHub.