Creación de cargas de trabajo de función a partir del código fuente local

Puedes crear tu función « Code Engine » directamente desde el código fuente en tu estación de trabajo local con la CLI de IBM Cloud® Code Engine. Utilice el mandato function create (o fn create) para crear un paquete de códigos desde el origen local y desplegar la función para hacer referencia a este paquete de códigos compilado.

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).

Cuando envías una compilación que extrae código de un directorio local, tu código fuente se empaqueta en un archivo comprimido. Code Engine sube automáticamente el paquete de código a un espacio de nombres de IBM Cloud® Container Registry de tu cuenta y, a continuación, crea e implementa tu función para que haga referencia a este paquete de código compilado. Tenga en cuenta que solo puede tener IBM Cloud Container Registry como destino para las compilaciones locales. En este caso, solo tienes que indicar el nombre de la función y la ruta de acceso a la fuente local. Para obtener una lista completa de opciones, consulta el ibmcloud ce fn create comando.

Para obtener información sobre los permisos necesarios para acceder a los registros de imágenes, consulte Configuración de autorizaciones para registros de imágenes.

Puede elegir ignorar determinados patrones de archivo del código fuente utilizando el archivo .ceignore, que se comporta de forma similar a un archivo .gitignore. Por ejemplo, las entradas de un archivo « .ceignore » correspondientes a una función « Node.js » podrían incluir « node_modules » y « .npm ». Para ver más ejemplos de patrones de archivos que se deben ignorar, consulta el repositorio « GitHub.gitignore ».

IBM Cloud® Container Registry es necesario para este caso.

Antes de empezar

Antes de trabajar con el código fuente local, asegúrese de que el código fuente esté en una ubicación accesible en la estación de trabajo local.

Creación de una función a partir de código fuente local con la CLI

Este ejemplo utiliza el siguiente código Node.js, guardado como un archivo main.js. Puede sustituir su propio código.

/**
 * The `main` function is the entry-point into the function.
 * It has one optional argument, which carries all the
 * parameters the function was invoked with.
*/
async function main(params) {
  // log environment variables available to the function
  console.log(process.env);
  // log Code Engine system headers available to the function
  console.log(params.__ce_headers);
  // log all parameters for debugging purposes
  console.log("params: "+params);
  // since functions are invoked through http(s), we return an HTTP response
  return {
      statusCode: 200,
      headers: { 'Content-Type': 'application/json' },
      body: params };
}
// this step is necessary, if you gave your main function a different name
// we include it here for documentation purposes only
module.exports.main = main;
  1. Vaya al directorio que contiene el archivo main.js o anote la vía de acceso.

  2. Cree una función denominada myfun-local que utilice un archivo main.js como origen. Este comando compila y envía automáticamente el paquete de código a un espacio de nombres de Container Registry en tu cuenta. Si no tiene un espacio de nombres Container Registry existente, Code Engine crea automáticamente uno.

    ibmcloud ce fn create --name myfun-local --runtime nodejs --build-source main.js
    

    Salida de ejemplo

    Preparing function 'myfun-local' for build push...
    Creating function 'myfun-local'...
    Packaging files to upload from source path 'main.js'...
    Submitting build run 'myfun-local-run-230123-111011111'...
    Creating image 'icr.io/ce--abcde-glxo4kabcde/function-myfun-local:230123-1650-yrj86'...
    Waiting for build run to complete...
    Build run status: 'Running'
    Build run completed successfully.
    Run 'ibmcloud ce buildrun get -n myfun-local-run-230626-115011911' to check the build run status.
    Waiting for function 'myfun-local' to become ready...
    Function 'myfun-local' is ready.
    OK
    Run 'ibmcloud ce function get -n myfun-local' to see more details.
    https://myfun-local.glxo4kabcde.us-south.codeengine.test.appdomain.cloud
    

    Tenga en cuenta que la salida del mandato function create proporciona información sobre la progresión de la ejecución de compilación antes de crear la función.

    En este ejemplo, el paquete de código compilado se sube al espacio de nombres « ce--abcde-glxo4kabcde » en Container Registry.

    La siguiente tabla resume las opciones que se utilizan con el fn create comando en este ejemplo. Para obtener más información sobre el comando y sus opciones, consulta el ibmcloud ce function create comando. Dado que estas opciones varían en función de dónde resida el código fuente, asegúrese de que su código fuente reside en la ubicación que coincide con el ejemplo.

    Descripción del mandato
    Opción Descripción
    --name

    Nombre de la función. Utilice un nombre que sea exclusivo dentro del proyecto. Este valor es obligatorio.

    • El nombre debe empezar por una letra minúscula.
    • El nombre debe terminar con un carácter alfanumérico en minúsculas.
    • El nombre debe tener 63 caracteres o menos y puede contener letras, números y guiones (-).
    --build-source La vía de acceso al código fuente local. Este valor es obligatorio.
    --runtime El tiempo de ejecución a utilizar para esta función. Este valor es obligatorio.
  3. Utilice el mandato function get para visualizar información sobre la aplicación, incluida la información sobre la compilación.

    ibmcloud ce function get --name myfun-local
    

    Salida de ejemplo

    Getting function 'myfun-local'...
    OK
    Name:          myfun-local
    Project Name:  sample
    Project ID:    abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
    Age:           5m41s
    Created:       2023-06-26T16:50:14Z
    URL:           https://myfun-local.glxo4kabcde.us-south.codeengine.test.appdomain.cloud
    Status:        Ready
    Resources:
      CPU:                 0.25
      Memory:              500M
      Max Execution Time:  60 seconds
    Build Information:
      Build Run Name:     myfun-local-run-230123-111011111
      Build Type:         local
      Build Strategy:     codebundle-nodejs-22
      Timeout:            600
      Source:             main.js
      Build Run Summary:  Succeeded
      Build Run Status:   Succeeded
      Build Run Reason:   All Steps have completed executing
      Run 'ibmcloud ce buildrun get -n myfun-local-run-230123-111011111' for details.
    Function Code:
      Runtime:        nodejs-22 (managed)
      Bundle Secret:  ce-auto-icr-us-south
      Code Bundle:    cr://icr.io/ce--abcde-glxo4kabcde/function-myfun-local:230123-1650-yrj86
      Main:           main()
    

Inclusión de dependencias para la función

Puede crear funciones en muchos lenguajes de programación diferentes. Cuando el código de función se vuelve complejo, puede añadir módulos de código como dependencias para la función. Cada idioma tiene sus propios módulos para utilizar con su código de función. Por ejemplo, las dependencias de Node.js suelen ser módulos npm existentes, mientras que Python utiliza paquetes Python. Estas dependencias deben declararse y crearse en un archivo con el código fuente

Inclusión de módulos para una función Node.js

Cree una función que incluya una dependencia para un módulo Node.js específico creando un archivo package.json. En este caso, tanto el código fuente como el archivo de paquete se encuentran en la misma carpeta.

  1. Cree el código fuente escribiendo el código en un archivo main.js. Por ejemplo, copie el siguiente ejemplo de código en un archivo denominado main.js.

    /**
    * The `main` function is the entry-point into the function.
    * It has one optional argument, which carries all the
    * parameters the function was invoked with.
    */
    function main(params /* optional */) {
      // use third-party 'lorem-ipsum' package to generate random words
      const LoremIpsum = require("lorem-ipsum").LoremIpsum;
      const lorem = new LoremIpsum();
      // since functions are invoked through http(s), we return an HTTP response
      return {
        headers: { "Content-Type": "text/plain;charset=utf-8" },
        body: lorem.generateWords(10),
      };
    }
    // this step is necessary, if you gave your main function a different name
    // we include it here for documentation purposes only
    module.exports.main = main;
    
  2. Cree un archivo package.json que contenga las dependencias necesarias para la función. Para el ejemplo de código anterior, utilice el contenido siguiente para el archivo package.json.

    {
      "name": "function",
      "version": "1.0.0",
      "main": "main.js",
      "dependencies" : {
    		    "lorem-ipsum" : "2.0.8"
     	}
    }
    
  3. Cree los archivos como una función en Code Engine. En este caso, se encuentra en el directorio donde existen los archivos locales, por lo que puede utilizar . como origen de compilación.

    ibmcloud ce fn create --name nodelorem --runtime nodejs --build-source .
    
  4. Ejecute el mandato fn get proporcionado para encontrar detalles sobre la función.

  5. Invoque su función pegando el URL en un navegador web. El navegador muestra un pasaje de lorem ipsum.

Para obtener más información sobre el mandato fn create y sus opciones, consulte Crear una función.

Inclusión de módulos para una función Python

Cree una función que incluya una dependencia para un módulo Python específico creando un archivo requirements.txt. En este caso, tanto el código fuente como el archivo de requisitos se encuentran en la misma carpeta.

  1. Cree la función guardando el código en un archivo __main__.py

    # use third-party 'lorem-ipsum' package to generate random words
    from lorem_text import lorem
    # The `main` function is the entry-point into the function.
    # It has one optional argument, which carries all the
    # parameters the function was invoked with.
    def main(params):
        words = 10
        # since functions are invoked through http(s), we return an HTTP response
        return {
          "headers": {
            "Content-Type": "text/plain;charset=utf-8",
        },
        "body": lorem.words(words),
    }
    def main(params):
         words = 10
         return {
              "headers": {
                  "Content-Type": "text/plain;charset=utf-8",
              },
              "body": lorem.words(words),
          }
    
  2. Cree un requirements.txt que contenga las dependencias necesarias para la función

    lorem-text
    
  3. Cree los archivos como una función en Code Engine. En este caso, se encuentra en el directorio donde existen los archivos locales, por lo que puede utilizar . como origen de compilación.

    ibmcloud ce fn create --name pylorem --runtime python --build-source .
    
  4. Ejecute el mandato fn get proporcionado para encontrar detalles sobre la función.

  5. Invoque su función pegando el URL en un navegador web. El navegador muestra un pasaje de lorem ipsum.

Para obtener más información sobre el mandato fn create y sus opciones, consulte Crear una función.

Próximos pasos

Ahora que la función se ha creado y desplegado desde el código fuente local, puede actualizar la función para que se ajuste a sus necesidades utilizando el mandato ibmcloud ce function update. Si quieres actualizar tu código fuente para utilizarlo con tu función, debes especificar la opción « --build-source » en el function update comando.

Cuando la función se despliega desde el origen local o desde el código fuente de repositorio desde la CLI, la ejecución de compilación resultante no se basa en una configuración de compilación. Las ejecuciones de compilación que se completan finalmente se suprimen automáticamente. Las ejecuciones de compilación que no se basan en una configuración de compilación se suprimen después de 1 hora si la ejecución de compilación es satisfactoria. Si la ejecución de compilación no es satisfactoria, esta ejecución de compilación se suprime después de 24 horas. Sólo puede visualizar información sobre esta ejecución de compilación con la CLI. No puede ver la ejecución de esta compilación en la consola.

¿Desea ver más ejemplos de código? Echa un vistazo a Ejemplos para el repositorio « IBM Cloud Code Engine GitHub ».