Trabajar con almacenes de datos persistentes

Puede montar un bucket IBM Cloud Object Storage (COS) en su aplicación o trabajo IBM Cloud® Code Engine utilizando un almacén de datos persistente. Esta función permite que sus cargas de trabajo accedan al contenido de un cubo COS a través del sistema de archivos local mediante operaciones de archivo estándar.

Un almacén de datos persistente en Code Engine es una referencia a un almacén de datos existente que Code Engine no gestiona. Actualmente, IBM Cloud Object Storage es el único tipo de almacén de datos compatible. Al crear una referencia a su cubo COS, puede montarlo directamente en el sistema de archivos de su aplicación o contenedor de trabajo.

Antes de empezar

Antes de poder trabajar con almacenes de datos persistentes, asegúrese de que se cumplen los siguientes requisitos previos.

  • Debe disponer de una instancia IBM Cloud Object Storage.
  • Debe crear una credencial de servicio para su instancia Object Storage con las credenciales HMAC activadas. La credencial HMAC requiere al menos el rol de acceso al servicio Writer para leer y escribir en el bucket. Si sólo necesita acceso de lectura, elija en su lugar la función de acceso al servicio Lector de contenidos.
  • Debe tener un bucket disponible en su instancia Object Storage. Para más información, consulte Crear un nuevo cubo.
  • Debe tener un proyecto Code Engine y éste debe estar seleccionado como contexto actual.

Paso 1: Cree un secreto HMAC en Code Engine utilizando la consola

Para acceder de forma segura a su cubo COS, Code Engine necesita las credenciales HMAC asociadas a su instancia Object Storage. Estas credenciales se almacenan en un secreto dentro de su proyecto Code Engine.

Siga Creación de un secreto HMAC desde la consola para crear un secreto de formato HMAC.

Proporcione los valores correspondientes de su credencial de servicio COS cuando se le solicite.

Paso 2: Crear un almacén de datos persistente mediante la consola

Ahora, cree el recurso de almacén de datos persistente en Code Engine. Este recurso actúa como referencia a su cubo COS y lo vincula con el secreto HMAC que ha creado.

  1. Haga clic en el nombre de su proyecto en la página Code Engine Projects.
  2. En la página Componentes, haga clic en Almacenes de datos persistentes.
  3. En la página Almacenes de datos persistentes, haga clic en Crear.
  4. Desde la página Crear un almacén de datos persistente, complete los siguientes pasos:
    1. Introduce un nombre; por ejemplo, mysecret-hmac.
    2. Especifique si desea seleccionar la especificación del depósito COS existente o si desea agregarla manualmente.
    3. Seleccione una instancia COS o especifique su nombre manualmente.
    4. Seleccione un cubo o especifique su nombre manualmente.
    5. Seleccione el secreto de acceso HMAC necesario para autenticarse en la instancia COS.
    6. Haga clic en Crear para crear el almacén de datos persistente.

Paso 3: Montar el almacén de datos en una carga de trabajo utilizando la consola

Después de crear el almacén de datos persistente, puede montarlo como Volume mount cuando cree o actualice una aplicación o un trabajo.

Montaje en una aplicación

  1. Navega hasta tu aplicación.

    • En la página «Proyectos» de Code Engine, haz clic en el nombre de tu proyecto. Haga clic en Aplicaciones para trabajar con sus aplicaciones.
    • En la página Aplicaciones, haga clic en el nombre de la aplicación que desea actualizar o cree una nueva haciendo clic en Crear.
  2. Selecciona la pestaña « Configuración ».

  3. En la pestaña Montajes de volumen, haga clic en Añadir.

  4. Seleccione Tipo de volumen como Almacenes de datos persistentes.

  5. Selecciona un almacén de datos persistente.

  6. Especifique una subruta de depósito relativa (opcional) si su aplicación debe acceder a objetos en el depósito con ese prefijo de subruta únicamente, por ejemplo path/in/bucket. Esto es útil cuando se desea aislar el acceso a una carpeta específica dentro del cubo. La sub-ruta debe ser un prefijo válido en su cubo COS. Sólo el contenido de esa ruta será accesible desde el directorio montado.

  7. Especifique la ruta de montaje. Este es el directorio dentro del contenedor de la aplicación donde se puede acceder a los datos del montaje del volumen, por ejemplo en /mnt/bucket.

  8. Seleccione un valor para Permisos de acceso, es decir, Lectura-escritura o Sólo lectura.

  9. Haga clic en Añadir para crear el montaje del volumen.

  10. Haz clic en «Implementar» para guardar los cambios e implementar la revisión de la aplicación.

Cuando actualizas tu aplicación, ésta crea una nueva revisión y dirige el tráfico a esa instancia.

Montar en un puesto de trabajo

  1. Vaya a la página de trabajo.

    • En la página «Proyectos» de Code Engine, haz clic en el nombre de tu proyecto. Haga clic en Trabajos para trabajar con sus trabajos y ejecuciones de trabajos.
    • En la página Trabajos, haga clic en la pestaña Trabajos y haga clic en el nombre del trabajo que desea actualizar o cree uno nuevo haciendo clic en Crear.
  2. Selecciona la pestaña « Configuración ».

  3. En la pestaña Montajes de volumen, haga clic en Añadir.

  4. Seleccione Tipo de volumen como Almacenes de datos persistentes.

  5. Selecciona un almacén de datos persistente.

  6. Especifique una subruta de depósito relativa (opcional) si sus ejecuciones de trabajo deben acceder a objetos en el depósito con ese prefijo de subruta únicamente, por ejemplo path/in/bucket. Esto es útil cuando se desea aislar el acceso a una carpeta específica dentro del cubo. La sub-ruta debe ser un prefijo válido en su cubo COS. Sólo el contenido de esa ruta será accesible desde el directorio montado.

  7. Especifique la ruta de montaje. Este es el directorio dentro del contenedor de ejecución de trabajos donde se puede acceder a los datos del montaje del volumen, por ejemplo en /mnt/bucket.

  8. Seleccione un valor para Permisos de acceso, es decir, Lectura-escritura o Sólo lectura.

  9. Haga clic en Añadir para crear el montaje del volumen.

  10. Haga clic en Desplegar para guardar los cambios y desplegar el trabajo.

  11. Pulse Enviar trabajo.

Antes de empezar

Antes de poder trabajar con almacenes de datos persistentes, asegúrese de que se cumplen los siguientes requisitos previos.

  • Debe disponer de una instancia IBM Cloud Object Storage.
  • Debe crear una credencial de servicio para su instancia Object Storage con las credenciales HMAC activadas. La credencial HMAC requiere al menos el rol de acceso al servicio Writer para leer y escribir en el bucket. Si sólo necesita acceso de lectura, elija en su lugar la función de acceso al servicio Lector de contenidos.
  • Debe instalar el plugin IBM Cloud Object Storage ejecutando el siguiente comando :
    ibmcloud plugin install cloud-object-storage
    
  • Debe tener un bucket disponible en su instancia Object Storage. Para más información, consulte Crear un nuevo cubo.
  • Debe tener un proyecto Code Engine y éste debe estar seleccionado como contexto actual.

Paso 1: Crear un secreto HMAC en Code Engine utilizando la CLI

Para acceder de forma segura a su cubo COS, Code Engine necesita las credenciales HMAC asociadas a su instancia Object Storage. Estas credenciales se almacenan en un secreto dentro de su proyecto Code Engine.

Para crear un secreto con el formato hmac, utilice el comando secret create comando.

ibmcloud ce secret create --name my-hmac-secret --format hmac --secret-access-key-prompt --access-key-id-prompt

Proporcione los valores correspondientes de su credencial de servicio COS cuando se lo solicite el comando secret create comando.

Paso 2: Crear un almacén de datos persistente mediante la CLI

Ahora, cree el recurso de almacén de datos persistente en Code Engine. Este recurso actúa como referencia a su cubo COS y lo vincula con el secreto HMAC que ha creado.

ibmcloud ce persistentdatastore create --name my-cos-bucket-pds --cos-bucket-name my-cos-bucket --cos-access-secret my-hmac-secret
  • Sustituya my-cos-bucket-pds por un nombre único para su almacén de datos.
  • Sustituya my-cos-bucket por el nombre exacto de su cubo COS.
  • Sustituye my-hmac-secret por el nombre del secreto HMAC.

Paso 3: Montar el almacén de datos en una carga de trabajo utilizando la CLI

Después de crear el almacén de datos persistente, puede montarlo cuando cree o actualice una aplicación o un trabajo. Utilice la opción --mount-data-store con el formato MOUNT_PATH=PDS_NAME.

Montaje en una aplicación

El siguiente comando crea una aplicación llamada myapp y monta el almacén de datos my-cos-bucket-pds en el directorio /mnt/bucket dentro del contenedor de la aplicación.

ibmcloud ce application create --name myapp --image icr.io/codeengine/helloworld --mount-data-store /mnt/bucket=my-cos-bucket-pds

Montar en un puesto de trabajo

De forma similar, este comando crea un trabajo llamado myjob y monta el mismo almacén de datos en el directorio /mnt/bucket.

ibmcloud ce job create --name myjob --image icr.io/codeengine/helloworld --mount-data-store /mnt/bucket=my-cos-bucket-pds

Montaje de una sub-ruta dentro del cubo

También puede montar una sub-ruta específica dentro de su cubo COS añadiendo la ruta relativa a la definición de montaje utilizando dos puntos (:). Esto es útil cuando se desea aislar el acceso a una carpeta específica dentro del cubo.

Por ejemplo, para montar sólo el directorio path/in/bucket del almacén de datos my-cos-bucket-pds en /mnt/bucket:

ibmcloud ce application create --name myapp --image icr.io/codeengine/helloworld --mount-data-store /mnt/bucket=my-cos-bucket-pds:path/in/bucket

O para un trabajo:

ibmcloud ce job create --name myjob --image icr.io/codeengine/helloworld --mount-data-store /mnt/bucket=my-cos-bucket-pds:path/in/bucket

Nota: El path/in/bucket debe ser un prefijo válido en su cubo COS. Sólo el contenido de esa ruta será accesible desde el directorio montado.

Paso 4: Acceso a los archivos del almacén de datos montado

Una vez que su aplicación o trabajo se está ejecutando, el código puede interactuar con el cubo COS montado como si fuera un directorio local. Se admiten todas las operaciones estándar del sistema de archivos.

Por ejemplo, dentro de tu contenedor, puedes listar archivos, leer contenido y escribir nuevos archivos:

# List files in the bucket
ls -l /mnt/bucket
# Read a file from the bucket
cat /mnt/bucket/my-document.txt
# Write a new file to the bucket
echo "Hello from Code Engine" > /mnt/bucket/new-file.txt

Limitaciones

El montaje se realiza con s3fsque proporciona una interfaz de sistema de archivos basada en FUSE para el almacenamiento S3-compatible. Tenga en cuenta las limitaciones siguientes:

  • Número de almacenes de datos persistentes:
    • Existe una restricción que permite un máximo de dos montajes de almacenes de datos persistentes por aplicación o trabajo.
  • Rendimiento:
    • Object Storage tiene una alta latencia para el tiempo hasta el primer byte, lo que los hace más lentos que los sistemas de archivos locales para operaciones que requieren acceso inmediato.
    • Las operaciones que modifican archivos, como las escrituras aleatorias o las anexiones, requieren reescribir todo el objeto en el backend, lo que puede resultar lento e ineficiente, ya que no hay acceso aleatorio a la escritura.
    • Las operaciones de metadatos, como el listado de directorios, pueden tener un rendimiento deficiente.
  • Coherencia:
    • IBM Cloud Object Storage proporciona una fuerte consistencia de lectura-después-escritura para nuevos objetos, pero una consistencia eventual para sobreescrituras y borrados de objetos. Esto significa que, tras una actualización o eliminación, las operaciones de lectura pueden devolver temporalmente datos obsoletos.
    • Los cambios realizados en el cubo desde fuera del montaje (por ejemplo, directamente a través de la API de COS u otro cliente) no se detectan inmediatamente y podrían no ser visibles durante algún tiempo.
  • Semántica del sistema de archivos:
    • Las funciones estándar del sistema de archivos POSIX no son totalmente compatibles. En concreto, no hay renombramientos atómicos de archivos o directorios ni enlaces duros.
  • Concurrencia:
    • No hay coordinación entre varios clientes (por ejemplo, varias instancias de aplicaciones) que monten el mismo cubo. Las escrituras simultáneas en el mismo archivo desde diferentes instancias pueden provocar la pérdida o corrupción de datos.
  • Suscripciones a eventos:
    • Si ha configurado una suscripción a eventos para su bucket Object Storage, tenga en cuenta que las operaciones de creación de archivos realizadas a través del montaje pueden generar múltiples eventos de actualización. Esto puede provocar que su aplicación o trabajo Code Engine se active más de una vez para una única operación de archivo, lo que puede afectar al procesamiento posterior o a los flujos de trabajo basados en eventos.

Debido a estas limitaciones, esta función no es adecuada para todas las cargas de trabajo. Es el más adecuado para cargas de trabajo que leen principalmente archivos de gran tamaño, como en el aprendizaje profundo o el análisis de datos, donde se puede lograr un buen rendimiento. No se recomienda para cargas de trabajo que requieran baja latencia, escrituras pequeñas frecuentes u operaciones de archivo transaccionales.

Próximos pasos

Ahora que ya sabes cómo trabajar con almacenes de datos persistentes, explora temas más avanzados: