Creación de cargas de trabajo de funciones con código fuente de repositorios
Puedes crear tu función directamente a partir del código fuente que se encuentra en un repositorio de Git desde la consola de IBM Cloud® Code Engine o mediante la CLI.
Un paquete de código es una colección de archivos que representa el código de sus funciones. Este paquete de código se inyecta en el contenedor de ejecución. Su paquete de código es creado por Code Engine y se almacena en el registro del contenedor o en línea con la función. Un paquete de código no es una imagen de contenedor estándar de la Open Container Initiative (OCI).
En este caso, Code Engine crea un paquete de código a partir de la fuente del repositorio Git, carga automáticamente el paquete de código en el registro del contenedor y, a continuación, crea la función para hacer referencia al paquete de código creado. Sólo tiene que proporcionar un nombre para la función, la dirección URL al repositorio Git y el tiempo de ejecución de la función. En este caso, Code Engine gestiona el espacio de nombres automáticamente. Sin embargo, si deseas utilizar un registro de contenedores diferente, deberás especificar el paquete de código y un secreto de registro para dicho registro de contenedores.
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.
Creación de cargas de trabajo de funciones con código fuente del repositorio desde la consola
Crear una función con código fuente desde la consola.
- Abre la Code Engine consola.
- Selecciona « Empezar a crear ».
- Seleccione un proyecto de la lista de proyectos disponibles. También puede crear uno nuevo. Debe seleccionar un proyecto para crear una función.
- Selecciona « Función ».
- Introduce un nombre para la función; por ejemplo, «
myfunction». Utiliza un nombre para tu función que sea único dentro del proyecto. - Seleccione una imagen Runtime para su código de función. Para más información, consulte Tiempos de ejecución.
- Selecciona «Compilar paquete de código» a partir del código fuente. Al seleccionar esta opción, la función se crea a partir del código fuente y se almacena en el registro del contenedor.
- Seleccione un repositorio de fuentes, por ejemplo
https://github.com/IBM/CodeEngine. Si opta por utilizar el código fuente de ejemplo, no necesitará requerir credenciales, por lo que puede seleccionarNonepara el acceso al repositorio de código. Opcionalmente, puede proporcionar un nombre de rama. Si no proporciona un nombre de rama y deja el campo vacío, Code Engine utiliza automáticamente la rama predeterminada del repositorio especificado. Pulse Siguiente. - Seleccione una estrategia para la compilación y los recursos para la compilación. Para obtener más información sobre las opciones de compilación, consulte Planificación de una compilación. Pulse Siguiente.
- Seleccione una ubicación de registro de contenedor como, por ejemplo,
IBM Registry Dallaspara especificar dónde almacenar la imagen de la salida de compilación. Si el registro es privado, debe configurar un acceso al mismo. - Proporcione información de registro sobre dónde almacenar la imagen de la salida de compilación. Selecciona un secreto del Registro ya existente o crea uno nuevo. Si crea la imagen en una instancia de Container Registry que
está en su cuenta, puede seleccionar
Code Engine managed secrety dejar que Code Engine cree y gestione el secreto por usted. - Seleccione un espacio de nombres, un nombre y una etiqueta para la imagen. Si está compilando la imagen en una instancia de IBM Cloud Container Registry que está en su cuenta, puede seleccionar un espacio de nombres existente o dejar que Code Engine cree y gestione el espacio de nombres automáticamente. Para obtener ayuda adicional, haga clic en Ayuda para especificar el paquete de códigos. Para obtener más información, consulte Acceso a registros de contenedores.
- Especifique la información sobre sus recursos, incluidas las combinaciones de CPU y memoria y el retardo de reducción.
- Opcionalmente, especifique un dominio personalizado o variables de entorno. Puede añadir estas opciones más adelante.
- Pulse Crear.
- Una vez que el estado de la función pase a «Listo», podrás probarla. Haga clic en Función de prueba y, a continuación, en Enviar solicitud. Para abrir la función en una página web, haz clic en «Función» URL.
- También puede modificar el código de la función en la ventana Editor. Cuando vuelves a desplegar tu función, el código se almacena inline.
Puede invocar su función haciendo clic en Probar función y, a continuación, en Enviar solicitud.
Creación de cargas de trabajo de funciones con código fuente de repositorio con la CLI
Utilice el comando function create para crear un paquete de código a partir del código fuente del repositorio Git y para crear una función que haga referencia al paquete de código creado. Para obtener una lista
completa de opciones, consulta el ibmcloud ce function create comando.
Antes de empezar
- Configure su entorno de CLI de Code Engine.
- Cree y trabaje con un proyecto.
El siguiente ejemplo function create crea la comando myfun, que hace referencia al código que se encuentra en https://github.com/IBM/CodeEngine. Este comando crea automáticamente el paquete
de código y lo carga en un espacio de nombres IBM Cloud® Container Registry de su cuenta. La función hace referencia a este paquete de código creado. Al especificar la opción --build-context-dir, la compilación utiliza el código
fuente en el directorio helloworld-samples/function-codebundle-nodejs.
ibmcloud ce function create --name myfun --runtime nodejs --build-source https://github.com/IBM/CodeEngine --build-context-dir /helloworld-samples/function-codebundle-nodejs
Salida de ejemplo
Preparing function 'myfun' for build push...
Creating function 'myfun'...
Submitting build run 'myfun-run-230111-111212718'...
Creating image 'icr.io/ce--abcde-glxo4kabcde/function-myfun:230111-1532-vwo4o'...
Waiting for build run to complete...
Build run status: 'Running'
Build run completed successfully.
Run 'ibmcloud ce buildrun get -n myfun-run-230111-111212718' to check the build run status.
Waiting for function 'myfun' to become ready...
Function 'myfun' is ready.
OK
Run 'ibmcloud ce function get -n myfun' to see more details.
https://myfun.11a66hbi3rhz.us-south.codeengine.appdomain.cloud
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 se cree la función.
En este ejemplo, el paquete de código compilado se sube al espacio de nombres « ce--abcde-4svg40kna19 » en Container Registry.
La siguiente tabla resume las opciones que se utilizan con el function create comando en este ejemplo. Para obtener más información sobre el comando y sus opciones, consulta el ibmcloud ce function create comando.
| Opción | Descripción |
|---|---|
--name |
Nombre de la función. Utilice un nombre que sea exclusivo dentro del proyecto. Este valor es obligatorio.
|
--build-source |
El URL del repositorio Git que contiene el código fuente; por ejemplo, https://github.com/IBM/CodeEngine. |
--build-context-dir |
El directorio del repositorio que contiene el código. Este valor es opcional. |
--runtime |
El tiempo de ejecución de la función. |
La salida siguiente muestra el resultado del mandato function get para este ejemplo, incluida la información sobre la compilación.
Salida de ejemplo
Getting function 'myfun'
'...
OK
Name: myfun
Project Name: sample
Project ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Age: 27m
Created: 2023-06-27T21:07:26Z
Visibility: public
URL: https://myfun.13c66hbi3rhz.us-south.codeengine.appdomain.cloud
Internal URL: http://myfun.13c66hbi3rhz.function.cluster.local
Resources:
CPU: 0.25
Memory: 500M
Timeout: 60 seconds
Scale Down Delay: 1 seconds
Trusted profiles: disabled
Environment Variables:
Type Name Value
Literal CE_API_BASE_URL https://api.us-south.codeengine.cloud.ibm.com
Literal CE_DOMAIN us-south.codeengine.appdomain.cloud
Literal CE_FUNCTION myfun
Literal CE_REGION us-south
Literal CE_SUBDOMAIN 13c66hbi3rhz
Literal CE_PROJECT_ID abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Build Information:
Build Run Name: myfun-run-230111-111212718
Build Type: git
Build Strategy: codebundle-nodejs-22
Timeout: 600
Source: https://github.com/IBM/CodeEngine
Context Directory: /helloworld-samples/function-codebundle-nodejs
Build Run Status: Succeeded
Build Run Reason: All Steps have completed executing
Run 'ibmcloud ce buildrun get -n myfun-run-230111-111212718' for details.
Function Code:
Runtime: nodejs-22
Bundle Secret: ce-auto-icr-us-south
Code Bundle: cr://icr.io/ce--abcde-glxo4kabcde/function-myfun:230111-1532-vwo4o
Main: main
Status: Ready
URL: https://myfun.13c66hbi3rhz.us-south.codeengine.appdomain.cloud
Ahora que su función está creada a partir del código fuente del repositorio, puede actualizar la función para satisfacer sus necesidades utilizando el comando ibmcloud ce function update comando 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 su función se crea a partir del código fuente del repositorio o del código fuente local con la CLI, la ejecución de compilación resultante no se basa en una configuración de compilación. Las ejecuciones de construcción que finalizan se borran automáticamente. Las ejecuciones de compilación que no se basan en una configuración de compilación se eliminan después de 1 hora si la ejecución de compilación se realiza correctamente. Si la ejecución de compilación no tiene éxito, esta ejecución de compilación se elimina después de 24 horas. Sólo puede mostrar 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.
Incluir dependencias para su función
Puede crear funciones en muchos lenguajes de programación diferentes. Cuando el código de su función se vuelve complejo, puede añadir módulos de código como dependencias para su 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 existentes de npm, mientras que Python utiliza paquetes de Python. Estas dependencias deben declararse y crearse en un archivo con su código fuente
Incluir módulos para una función Node.js
Cree una función que incluya una dependencia para un módulo específico de Node.js creando un archivo package.json. En este caso, tanto el código fuente como el archivo del paquete se encuentran en la misma carpeta.
-
Cree su código fuente escribiendo su código en un archivo
main.js. Por ejemplo, copie el siguiente ejemplo de código en un archivo llamadomain.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 su función. Para el ejemplo de código anterior, utilice el siguiente contenido para su archivopackage.json.{ "name": "function", "version": "1.0.0", "main": "main.js", "dependencies" : { "lorem-ipsum" : "2.0.8" } } -
Cree sus archivos como una función en Code Engine. Los dos archivos anteriores deben estar accesibles en el repositorio. Si están en un repositorio privado, cree un acceso privado al repositorio de código y luego proporcione ese valor con la opción
--build-git-repo-secret. Si sus archivos se encuentran en un directorio distinto de main, indique la ruta al directorio con la opción--build-context-dir. El siguiente ejemplo extrae los archivos del repositorio públicohttps://github.com/IBM/CodeEngine.ibmcloud ce fn create -n nodelorem -runtime nodejs --build-source https://github.com/IBM/CodeEngine --build-context-dir /helloworld-samples/function-codebundle-nodejs/ -
Ejecute el comando
fn getproporcionado para encontrar detalles sobre su función. -
Invoca tu función pegando la dirección URL en un navegador web. Su navegador muestra un pasaje de
lorem ipsum.
Para obtener más información sobre el comando fn create y sus opciones, consulte Crear una función.
Incluir módulos para una función Python
Cree una función que incluya una dependencia para un módulo específico de Python creando un archivo requirements.txt. En este caso, tanto el código fuente como el archivo de requisitos se encuentran en la misma carpeta.
-
Crea tu función guardando tu 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 su funciónlorem-text -
Cree sus archivos como una función en Code Engine. Los dos archivos anteriores deben estar accesibles en el repositorio. Si están en un repositorio privado, cree un acceso privado al repositorio de código y luego proporcione ese valor con la opción
--build-git-repo-secret. Si sus archivos se encuentran en un directorio distinto de main, indique la ruta al directorio con la opción--build-context-dir. El siguiente ejemplo extrae los archivos del repositorio públicohttps://github.com/IBM/CodeEngine.ibmcloud ce fn create -n pylorem -runtime python --build-source https://github.com/IBM/CodeEngine --build-context-dir /helloworld-samples/function-codebundle-python/ -
Ejecute el comando
fn getproporcionado para encontrar detalles sobre su función. -
Invoca tu función pegando la dirección URL en un navegador web. Su navegador muestra un pasaje de
lorem ipsum.
Para obtener más información sobre el comando fn create y sus opciones, consulte Crear una función.
Próximos pasos
-
Una vez creada la función, puede acceder a ella haciendo clic en Probar función en la consola o buscando la dirección URL de la función con el comando
function getcomando. -
Puede crear una asignación de dominio personalizada y asignarla a su función.
-
Una vez creada y desplegada la función, puede actualizarla para adaptarla a sus necesidades desde la consola o utilizando el comando
ibmcloud ce function updatecomando Si quieres actualizar tu código fuente para utilizarlo con tu función, debes especificar la opción «--build-source» en elfunction updatecomando.
Una vez creada la función, puedes actualizarla, así como el código al que hace referencia, mediante cualquiera de los siguientes métodos, independientemente de cómo hayas creado o actualizado anteriormente la función:
-
Si tienes un paquete de código existente, entonces sólo necesitas proporcionar una referencia a la imagen, que apunte a la ubicación de tu registro de contenedores cuando despliegues tu aplicación. Para obtener más información, consulte Creación de cargas de trabajo de funciones a partir de paquetes de código existentes.
Si creó su función utilizando el comando
function createy especificó la opción--build-sourcepara crear el paquete de código a partir del código fuente local o del repositorio, y desea cambiar su función para que apunte a un paquete de código diferente, primero debe eliminar la asociación de la creación de su función. Por ejemplo, ejecuteibmcloud ce function update -n FUN_NAME --build-clear. Después de eliminar la asociación de la compilación de su función, puede actualizar la función para hacer referencia a una imagen diferente. -
Si empiezas con código fuente que se encuentra en un repositorio de Git, puedes optar por dejar que Code Engine compile el paquete de código a partir de tu código fuente y cree tu función en una sola operación. En este caso, Code Engine sube tu paquete de código a IBM Cloud® Container Registry. Para saber más, consulte Crear su función a partir del código fuente del repositorio.
-
Si está comenzando con código fuente que reside en una estación de trabajo local, puede elegir que Code Engine construya el paquete de código desde su fuente y cree su función con un único comando CLI. En este caso, Code Engine carga el código fuente y el paquete de código en IBM Cloud® Container Registry.
Por ejemplo, podrías optar por que Code Engine compile tu código fuente local mientras sigues desarrollando el código para la función. A continuación, una vez madurado el paquete de código, puede actualizar su función para que haga referencia al paquete de código específico que desee. Puede repetir este proceso según sea necesario.
¿Desea ver más ejemplos de código? Consulte el repositorio de muestras de IBM Cloud Code Engine GitHub.