Travailler avec des magasins de données persistants

Vous pouvez monter un seau IBM Cloud Object Storage (COS) sur votre application ou votre tâche IBM Cloud® Code Engine en utilisant un magasin de données persistant. Cette fonctionnalité permet à vos charges de travail d'accéder au contenu d'un seau COS via le système de fichiers local en utilisant des opérations de fichiers standard.

Un magasin de données persistant dans Code Engine est une référence à un magasin de données existant que Code Engine ne gère pas. Actuellement, IBM Cloud Object Storage est le seul type de magasin de données pris en charge. En créant une référence à votre seau COS, vous pouvez le monter directement dans le système de fichiers de votre application ou de votre conteneur de tâches.

Avant de commencer

Avant de pouvoir travailler avec des magasins de données persistants, assurez-vous que les conditions préalables suivantes sont remplies.

  • Vous devez disposer d'une instance IBM Cloud Object Storage.
  • Vous devez créer un identifiant de service pour votre instance Object Storage avec les identifiants HMAC activés. L'accréditation HMAC requiert au moins le rôle d'accès au service Writer pour lire et écrire dans le seau. Si vous n'avez besoin que d'un accès en lecture, choisissez plutôt le rôle d'accès au service Lecteur de contenu.
  • Vous devez disposer d'un seau dans votre instance Object Storage. Pour plus d'informations, voir Créer un nouveau seau.
  • Vous devez avoir un projet Code Engine et il doit être sélectionné comme contexte actuel.

Étape 1 : Créer un secret HMAC dans Code Engine en utilisant la console

Pour accéder en toute sécurité à votre panier COS, Code Engine a besoin des informations d'identification HMAC associées à votre instance Object Storage. Vous stockez ces informations d'identification dans un secret au sein de votre projet Code Engine.

Suivre Création d'un secret HMAC à partir de la console pour créer un secret au format HMAC.

Indiquez les valeurs correspondantes de votre justificatif d'identité du service COS lorsque vous y êtes invité.

Étape 2 : Créer un magasin de données persistant à l'aide de la console

Maintenant, créez la ressource de stockage de données persistantes dans Code Engine. Cette ressource sert de référence à votre seau COS et le relie au secret HMAC que vous avez créé.

  1. Cliquez sur le nom de votre projet sur la page Code Engine Projects.
  2. Dans la page Composants, cliquez sur Magasins de données persistants.
  3. Dans la page Magasins de données persistants, cliquez sur Créer.
  4. Dans la page Créer un magasin de données persistant, effectuez les étapes suivantes :
    1. Indiquez un nom; par exemple, mysecret-hmac.
    2. Indiquez si vous souhaitez sélectionner la spécification de compartiment COS existante ou si vous souhaitez l'ajouter manuellement.
    3. Sélectionnez une instance de COS ou indiquez son nom manuellement.
    4. Sélectionnez un godet ou indiquez son nom manuellement.
    5. Sélectionnez le secret d'accès HMAC nécessaire à l'authentification de l'instance COS.
    6. Cliquez sur Créer pour créer le magasin de données permanentes.

Étape 3 : Monter le magasin de données dans une charge de travail à l'aide de la console

Après avoir créé le magasin de données permanentes, vous pouvez le monter en tant que montage de volume lorsque vous créez ou mettez à jour une application ou un travail.

Montage dans une application

  1. Naviguez jusqu'à votre application.

    • Sur la page « Projets » d' Code Engine, cliquez sur le nom de votre projet. Cliquez sur Applications pour travailler avec vos applications.
    • Dans la page Applications, cliquez sur le nom de l'application que vous souhaitez mettre à jour ou créez-en une nouvelle en cliquant sur Créer.
  2. Sélectionnez l'onglet « Configuration ».

  3. Dans l'onglet Montages de volumes, cliquez sur Ajouter.

  4. Sélectionnez le type de volume comme magasins de données persistants.

  5. Sélectionnez un magasin de données persistant.

  6. Spécifiez un sous-chemin de compartiment relatif (facultatif) si votre application doit accéder aux objets du compartiment avec ce préfixe de sous-chemin uniquement, par exemple path/in/bucket. Cette fonction est utile lorsque vous souhaitez isoler l'accès à un dossier spécifique dans le seau. Le sous-chemin doit être un préfixe valide dans votre panier COS. Seul le contenu de ce chemin sera accessible à partir du répertoire monté.

  7. Spécifiez le chemin d'accès au montage. Il s'agit du répertoire à l'intérieur du conteneur d'application où les données du montage du volume sont accessibles, par exemple à l'adresse /mnt/bucket.

  8. Sélectionnez une valeur pour les autorisations d'accès, à savoir Lecture-écriture ou Lecture seule.

  9. Cliquez sur Ajouter pour créer le montage du volume.

  10. Cliquez sur « Déployer » pour enregistrer vos modifications et déployer la nouvelle version de l'application.

Lorsque vous mettez à jour votre application, celle-ci crée une nouvelle révision et achemine le trafic vers cette instance.

Trouver un emploi

  1. Accédez à la page de votre travail.

    • Sur la page « Projets » d' Code Engine, cliquez sur le nom de votre projet. Cliquez sur Travaux pour accéder à vos travaux et à vos cycles de travail.
    • Dans la page Emplois, cliquez sur l'onglet Emplois et cliquez sur le nom de l'emploi que vous souhaitez mettre à jour ou créez-en un nouveau en cliquant sur Créer.
  2. Sélectionnez l'onglet « Configuration ».

  3. Dans l'onglet Montages de volumes, cliquez sur Ajouter.

  4. Sélectionnez le type de volume comme magasins de données persistants.

  5. Sélectionnez un magasin de données persistant.

  6. Spécifiez un sous-chemin de compartiment relatif (facultatif) si vos exécutions de tâches doivent accéder aux objets du compartiment avec ce préfixe de sous-chemin uniquement, par exemple path/in/bucket. Cette fonction est utile lorsque vous souhaitez isoler l'accès à un dossier spécifique dans le seau. Le sous-chemin doit être un préfixe valide dans votre panier COS. Seul le contenu de ce chemin sera accessible à partir du répertoire monté.

  7. Spécifiez le chemin d'accès au montage. Il s'agit du répertoire à l'intérieur du conteneur d'exécution du travail où les données du montage du volume sont accessibles, par exemple à l'adresse /mnt/bucket.

  8. Sélectionnez une valeur pour les autorisations d'accès, à savoir Lecture-écriture ou Lecture seule.

  9. Cliquez sur Ajouter pour créer le montage du volume.

  10. Cliquez sur Déployer pour enregistrer vos modifications et déployer le travail.

  11. Cliquez sur Soumettre un travail.

Avant de commencer

Avant de pouvoir travailler avec des magasins de données persistants, assurez-vous que les conditions préalables suivantes sont remplies.

  • Vous devez disposer d'une instance IBM Cloud Object Storage.
  • Vous devez créer un identifiant de service pour votre instance Object Storage avec les identifiants HMAC activés. L'accréditation HMAC requiert au moins le rôle d'accès au service Writer pour lire et écrire dans le seau. Si vous n'avez besoin que d'un accès en lecture, choisissez plutôt le rôle d'accès au service Lecteur de contenu.
  • Vous devez installer le plugin IBM Cloud Object Storage en exécutant la commande suivante :
    ibmcloud plugin install cloud-object-storage
    
  • Vous devez disposer d'un seau dans votre instance Object Storage. Pour plus d'informations, voir Créer un nouveau seau.
  • Vous devez avoir un projet Code Engine et il doit être sélectionné comme contexte actuel.

Étape 1 : Créer un secret HMAC dans Code Engine à l'aide de la CLI

Pour accéder en toute sécurité à votre panier COS, Code Engine a besoin des informations d'identification HMAC associées à votre instance Object Storage. Vous stockez ces informations d'identification dans un secret au sein de votre projet Code Engine.

Pour créer un secret au format hmac, utilisez la commande secret create commande.

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

Fournissez les valeurs correspondantes de votre justificatif d'identité du service COS à l'invite de la commande secret create vous invite à le faire.

Étape 2 : Créer un magasin de données persistant à l'aide de l'interface de programmation (CLI)

Maintenant, créez la ressource de stockage de données persistantes dans Code Engine. Cette ressource sert de référence à votre seau COS et le relie au secret HMAC que vous avez créé.

ibmcloud ce persistentdatastore create --name my-cos-bucket-pds --cos-bucket-name my-cos-bucket --cos-access-secret my-hmac-secret
  • Remplacez my-cos-bucket-pds par un nom unique pour votre magasin de données.
  • Remplacez my-cos-bucket par le nom exact de votre seau COS.
  • Remplacer my-hmac-secret par le nom du secret HMAC.

Étape 3 : Monter le magasin de données dans une charge de travail à l'aide de la CLI

Une fois le magasin de données persistant créé, vous pouvez le monter lorsque vous créez ou mettez à jour une application ou un travail. Utilisez l'option --mount-data-store avec le format MOUNT_PATH=PDS_NAME.

Montage dans une application

La commande suivante crée une application nommée myapp et monte le magasin de données my-cos-bucket-pds dans le répertoire /mnt/bucket à l'intérieur du conteneur d'application.

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

Trouver un emploi

De même, cette commande crée un travail nommé myjob et monte le même magasin de données dans le répertoire /mnt/bucket.

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

Montage d'un sous-chemin dans le seau

Vous pouvez également monter un sous-chemin spécifique à l'intérieur de votre panier COS en ajoutant le chemin relatif à la définition de montage à l'aide de deux points (:). Ceci est utile lorsque vous souhaitez isoler l'accès à un dossier spécifique dans le seau.

Par exemple, pour monter uniquement le répertoire path/in/bucket du magasin de données my-cos-bucket-pds dans /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

Ou pour un emploi :

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

Note : Le path/in/bucket doit être un préfixe valide dans votre panier COS. Seul le contenu de ce chemin sera accessible à partir du répertoire monté.

Étape 4 : Accès aux fichiers du magasin de données monté

Une fois que votre application ou votre travail est en cours d'exécution, le code peut interagir avec le seau COS monté comme s'il s'agissait d'un répertoire local. Toutes les opérations standard du système de fichiers sont prises en charge.

Par exemple, à l'intérieur de votre conteneur, vous pouvez lister les fichiers, lire le contenu et écrire de nouveaux fichiers :

# 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

Limitations

Le montage est mis en œuvre à l'aide de s3fsqui fournit une interface de système de fichiers basée sur FUSE au stockage S3-compatible. Veuillez tenir compte des limitations suivantes :

  • Nombre de bases de données persistantes :
    • Il existe une restriction autorisant un maximum de deux montages de magasins de données persistants par application ou par travail.
  • Performances :
    • Object Storage ont un temps de latence élevé pour le temps du premier octet, ce qui les rend plus lents que les systèmes de fichiers locaux pour les opérations qui nécessitent un accès immédiat.
    • Les opérations qui modifient les fichiers, telles que les écritures aléatoires ou les ajouts, nécessitent la réécriture de l'objet entier dans le backend, ce qui peut être lent et inefficace car il n'y a pas d'accès aléatoire à l'écriture.
    • Les opérations sur les métadonnées, telles que l'établissement de listes de répertoires, peuvent être peu performantes.
  • Cohérence :
    • IBM Cloud Object Storage offre une grande cohérence en lecture après écriture pour les nouveaux objets, mais une cohérence éventuelle pour les écrasements et les suppressions d'objets. Cela signifie qu'après une mise à jour ou une suppression, les opérations de lecture peuvent temporairement renvoyer des données périmées.
    • Les modifications apportées au seau depuis l'extérieur du montage (par exemple, directement via l'API COS ou un autre client) ne sont pas immédiatement détectées et peuvent ne pas être visibles pendant un certain temps.
  • Sémantique des systèmes de fichiers :
    • Les fonctions standard du système de fichiers POSIX ne sont pas entièrement prises en charge. Plus précisément, il n'y a pas de renommage atomique des fichiers ou des répertoires et pas de liens physiques.
  • Concurrence :
    • Il n'y a pas de coordination entre plusieurs clients (par exemple, plusieurs instances d'applications) qui montent le même seau. Les écritures simultanées dans le même fichier à partir de différentes instances peuvent entraîner une perte ou une corruption des données.
  • Abonnements aux événements :
    • Si vous avez configuré un abonnement aux événements pour votre seau Object Storage, sachez que les opérations de création de fichiers effectuées par le biais du montage peuvent générer plusieurs événements de mise à jour. Ainsi, votre application ou votre tâche Code Engine peut être déclenchée plusieurs fois pour une seule opération de fichier, ce qui peut affecter le traitement en aval ou les flux de travail basés sur des événements.

En raison de ces limitations, cette fonction ne convient pas à toutes les charges de travail. Il convient mieux aux charges de travail qui lisent principalement des fichiers volumineux, comme dans l'apprentissage profond ou l'analyse de données, où un bon débit peut être atteint. Il n'est pas recommandé pour les charges de travail nécessitant une faible latence, de petites écritures fréquentes ou des opérations transactionnelles sur les fichiers.

Etapes suivantes

Maintenant que vous savez comment travailler avec des magasins de données persistants, vous pouvez explorer des sujets plus avancés :