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
- Configure su entorno de CLI de Code Engine.
- Cree y trabaje con un proyecto.
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;
-
Vaya al directorio que contiene el archivo
main.jso anote la vía de acceso. -
Cree una función denominada
myfun-localque utilice un archivomain.jscomo 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.jsSalida 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.cloudTenga en cuenta que la salida del mandato
function createproporciona 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 createcomando en este ejemplo. Para obtener más información sobre el comando y sus opciones, consulta elibmcloud ce function createcomando. 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 --nameNombre 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-sourceLa vía de acceso al código fuente local. Este valor es obligatorio. --runtimeEl tiempo de ejecución a utilizar para esta función. Este valor es obligatorio. -
Utilice el mandato
function getpara visualizar información sobre la aplicación, incluida la información sobre la compilación.ibmcloud ce function get --name myfun-localSalida 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.
-
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 denominadomain.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; -
Cree un archivo
package.jsonque contenga las dependencias necesarias para la función. Para el ejemplo de código anterior, utilice el contenido siguiente para el archivopackage.json.{ "name": "function", "version": "1.0.0", "main": "main.js", "dependencies" : { "lorem-ipsum" : "2.0.8" } } -
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 . -
Ejecute el mandato
fn getproporcionado para encontrar detalles sobre la función. -
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.
-
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), } -
Cree un
requirements.txtque contenga las dependencias necesarias para la funciónlorem-text -
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 . -
Ejecute el mandato
fn getproporcionado para encontrar detalles sobre la función. -
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 ».