Transférer des données vers ou depuis Cloud Storage

Google Cloud Managed Lustre peut importer des données depuis Cloud Storage et en exporter vers ce service. Les transferts de données sont incrémentiels. Ils ne copient que les fichiers qui n'existent pas déjà dans la destination ou qui ont été modifiés depuis leur transfert.

Les buckets Cloud Storage avec l'espace de noms hiérarchique activé offrent des vitesses de transfert plus rapides vers et depuis Managed Lustre par rapport aux buckets standards.

Limites

Une seule opération de transfert par instance peut être active à la fois. Si vous essayez de démarrer une deuxième opération de transfert alors qu'une opération précédente est toujours en cours d'exécution, une erreur semblable à celle-ci s'affiche :

ERROR: (gcloud.lustre.instances.export-data) ABORTED: unable to queue the operation

Points à prendre en compte concernant la bande passante de sortie Cloud Storage

Cloud Storage fournit une bande passante de sortie par défaut pouvant atteindre 200 Gbit/s par région et par projet. Si votre charge de travail nécessite une vitesse de transfert de données plus élevée, vous pouvez demander à augmenter la limite de bande passante de sortie. Pour en savoir plus, consultez les quotas de bande passante de Cloud Storage.

Autorisations requises

Autorisations pour lancer le transfert

Le compte utilisateur ou de service utilisé pour lancer le transfert doit disposer des autorisations suivantes :

  • lustre.instances.exportData pour transférer des données de Managed Lustre vers Cloud Storage.
  • lustre.instances.importData pour effectuer le transfert depuis Cloud Storage.

Ces deux autorisations sont accordées avec le rôle roles/lustre.admin. Vous pouvez créer un rôle personnalisé pour accorder des autorisations de manière indépendante.

Autorisations pour l'agent de service Managed Lustre

Obtenir l'agent de service Managed Lustre

Un agent de service Managed Lustre est créé la première fois que vous créez une instance Managed Lustre dans le projet. L'identité de l'agent de service se présente sous la forme service-PROJECT_NUMBER@gcp-sa-lustre.iam.gserviceaccount.com.

Si vous ne disposez pas encore d'un agent de service Managed Lustre
  1. Exécutez la commande services identity create :

    gcloud beta services identity create \
      --service=lustre.googleapis.com \
      --project=PROJECT_NUMBER_OR_ID
    

    Remplacez PROJECT_NUMBER_OR_ID par le numéro ou l'ID du projet dans lequel vous souhaitez créer l'instance Managed Lustre. Le résultat ressemble à ce qui suit :

    Service identity created: service-1234567890@gcp-sa-lustre.iam.gserviceaccount.com
    
  2. Copiez la valeur de l'identité de l'agent de service à utiliser à l'étape suivante.

Si vous avez déjà créé une instance Managed Lustre
  1. Pour créer l'identité de l'agent de service, obtenez le numéro de votre projet. Un PROJECT_NUMBER n'est pas la même chose qu'un ID de projet :

    • Un ID de projet est une chaîne unique pouvant être une combinaison de lettres, de chiffres et de traits d'union. Vous spécifiez un ID de projet lorsque vous créez votre projet. Exemple :example-project-123
    • Le numéro de projet est un identifiant unique généré automatiquement pour votre projet. Il ne comporte que des chiffres. Exemple :1234567890

    Pour obtenir le PROJECT_NUMBER d'un ID de projet donné, utilisez la commande gcloud projects describe :

    gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    
  2. Copiez le numéro de projet renvoyé dans l'identité de l'agent de service :

    service-PROJECT_NUMBER@gcp-sa-lustre.iam.gserviceaccount.com
    
  3. Copiez l'identité de l'agent de service pour l'utiliser à l'étape suivante.

Accorder des autorisations

L'agent de service Managed Lustre nécessite l'un des rôles Cloud Storage suivants :

  • Pour transférer des données vers et depuis Cloud Storage : roles/storage.objectUser sur le bucket Cloud Storage.
  • Pour transférer uniquement depuis Cloud Storage : roles/storage.objectViewer sur le bucket Cloud Storage.

Pour accorder l'un de ces rôles, exécutez la commande gcloud suivante :

gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
  --member=serviceAccount:SERVICE_AGENT_IDENTITY \
  --role=roles/storage.objectViewer_OR_objectUser

SERVICE_AGENT_IDENTITY correspond à l'identité de l'agent du service Managed Lustre de l'étape précédente.

Importer des données dans Managed Lustre

Vous pouvez importer des données depuis un bucket Cloud Storage. Le bucket peut se trouver dans le même projet ou dans un autre. Le bucket peut se trouver dans une zone ou une région différente de votre instance Managed Lustre, mais les transferts interrégions
peuvent être plus lents que les transferts intrarégions.

gcloud

gcloud lustre instances import-data INSTANCE_ID \
  --location=LOCATION \
  --gcs-path-uri=gs://BUCKET_NAME/ \
  --lustre-path=PS_PATH

Où :

  • INSTANCE_ID est le nom de votre instance Managed Lustre.
  • --location est la zone de votre instance Managed Lustre. Exemple : us-central1-a.
  • --gcs-path-uri spécifie l'URI d'un bucket Cloud Storage ou un chemin d'accès dans un bucket, au format gs://<bucket_name>/<optional_path_inside_bucket>/. Si un chemin d'accès dans le bucket est spécifié, il doit se terminer par une barre oblique (/).
  • --lustre-path spécifie le chemin d'accès au répertoire racine du système de fichiers Lustre géré. Doit commencer par /. La valeur par défaut est /. Si vous spécifiez une valeur autre que celle par défaut, le répertoire doit déjà exister dans le système de fichiers.

Les paramètres ci-dessous sont facultatifs :

  • --request-id vous permet d'attribuer un ID unique à cette requête. Si vous relancez cette requête en utilisant le même ID de requête, le serveur l'ignorera si elle a déjà été traitée. Doit être un UUID valide et non nul.
  • --async renvoie immédiatement une réponse, sans attendre la fin de l'opération.

Pour en savoir plus, consultez la documentation du SDK Cloud.

REST

POST https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID:importData
Authorization: Bearer [YOUR_ACCESS_TOKEN]

{
  "gcsPath" : {
    "uri" : "gs://BUCKET_NAME/"
  },
  "lustrePath" : {
    "path" : "/PATH"
  }
}

Où :

  • PROJECT_ID est le nom de votre projet Google Cloud .
  • LOCATION est la zone de votre instance Managed Lustre. Exemple :us-central1-a
  • INSTANCE_ID est le nom de votre instance Managed Lustre.
  • gcsPath contient une clé uri dont la valeur spécifie l'URI d'un bucket Cloud Storage ou un chemin d'accès dans un bucket, au format gs://<bucket_name>/<optional_path_inside_bucket>/. Si un chemin d'accès dans le bucket est spécifié, il doit se terminer par une barre oblique (/).
  • lustrePath contient une clé path dont la valeur spécifie le chemin d'accès au répertoire racine du système de fichiers Lustre géré. Doit commencer par /. La valeur par défaut est /. Si vous spécifiez une valeur autre que celle par défaut, le répertoire doit déjà exister dans le système de fichiers.

Pour utiliser votre propre compte de service au lieu de l'agent de service géré par Google, la requête accepte un champ serviceAccount dans l'objet JSON :

"serviceAccount" : "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_ID"

Voici un exemple de commande curl :

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID:importData \
  -d '{"gcsPath": {"uri":"gs://BUCKET_NAME/"}, "lustrePath": {"path":"/"}}'

Attributs de fichier

Lorsque vous importez des données d'un bucket Cloud Storage vers une instance Managed Lustre, les attributs de fichier de l'instance Managed Lustre sont définis de deux manières :

  • Si l'objet Cloud Storage comporte des métadonnées personnalisées, comme décrit pour l'exportation de données, alors :
    • L'UID, le GID, le mode et mtime du fichier sont définis en fonction des métadonnées personnalisées de l'objet.
    • La valeur atime du fichier est définie sur la même valeur que mtime.
  • Si l'objet Cloud Storage ne comporte pas les métadonnées personnalisées :
    • L'UID et le GID du fichier sont définis sur 0 (root).
    • Le mode du fichier est défini sur rwxr-xr-x (755).
    • Les valeurs atime et mtime du fichier sont définies sur l'heure de création de l'objet Cloud Storage.

Dans les deux cas :

  • Le ctime d'un fichier est défini sur l'heure à laquelle le fichier a été écrit dans l'instance.
  • Les valeurs atime, ctime et mtime d'un répertoire sont définies sur l'heure à laquelle le répertoire a été créé sur l'instance.

Exporter les données

Vous pouvez exporter des données depuis votre instance Managed Lustre vers un bucket Cloud Storage dans le même projet ou dans un autre. Le bucket peut se trouver dans une zone ou une région différente de votre instance Managed Lustre, mais les transferts interrégions peuvent être plus lents que les transferts intrarégions.

gcloud

gcloud lustre instances export-data \
  INSTANCE_ID \
  --location=LOCATION \
  --gcs-path-uri="gs://BUCKET_NAME/" \
  --lustre-path="/"

Où :

  • INSTANCE_ID est le nom de votre instance Managed Lustre.
  • --location est la zone de votre instance Managed Lustre. Exemple :us-central1-a
  • --gcs-path-uri spécifie l'URI d'un bucket Cloud Storage ou un chemin d'accès dans un bucket, au format gs://<bucket_name>/<optional_path_inside_bucket>/. Si un chemin d'accès dans le bucket est spécifié, il doit se terminer par une barre oblique (/).
  • --lustre-path spécifie le chemin d'accès au répertoire racine du système de fichiers Managed Lustre. Doit commencer par /. La valeur par défaut est /.

Les paramètres ci-dessous sont facultatifs :

  • --request-id vous permet d'attribuer un ID unique à cette requête. Si vous relancez cette requête en utilisant le même ID de requête, le serveur l'ignorera si elle a déjà été traitée. Doit être un UUID valide et non nul.
  • --async renvoie immédiatement une réponse, sans attendre la fin de l'opération.

REST

POST https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID:exportData
Authorization: Bearer [YOUR_ACCESS_TOKEN]

{
  "lustrePath" : {
    "path" : "/"
  },
  "gcsPath" : {
    "uri" : "gs://BUCKET_NAME/"
  }
}

Où :

  • PROJECT_ID est le nom de votre projet Google Cloud .
  • INSTANCE_ID est le nom de votre instance Managed Lustre.
  • LOCATION est la zone de votre instance Managed Lustre. Exemple :us-central1-a
  • lustrePath contient une clé path dont la valeur spécifie le chemin d'accès au répertoire racine du système de fichiers Lustre géré. Doit commencer par /. La valeur par défaut est /.
  • gcsPath contient une clé uri dont la valeur spécifie l'URI d'un bucket Cloud Storage ou un chemin d'accès dans un bucket, au format gs://<bucket_name>/<optional_path_inside_bucket>/. Si un chemin d'accès dans le bucket est spécifié, il doit se terminer par une barre oblique (/).

Pour utiliser votre propre compte de service au lieu de l'agent de service géré par Google, la requête accepte un champ serviceAccount dans l'objet JSON :

"serviceAccount" : "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_ID"

Voici un exemple de commande curl :

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json"
  https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID:exportData \
  -d '{"lustrePath": {"path":"/"}, "gcsPath": {"uri":"gs://BUCKET_NAME/"}}'

Attributs de fichier

Lorsque vous exportez des données d'une instance Managed Lustre vers un bucket Cloud Storage, les attributs de fichier suivants sont conservés en tant que métadonnées personnalisées dans Cloud Storage :

  • L'UID du fichier est stocké avec la clé goog-reserved-posix-uid.
  • Le GID du fichier est stocké avec la clé goog-reserved-posix-gid.
  • Le mode numérique du fichier est stocké avec la clé goog-reserved-posix-mode.
  • Le mtime du fichier est stocké avec la clé goog-reserved-file-mtime.

Ces noms de clés de métadonnées personnalisées sont les mêmes que ceux utilisés par le service de transfert de stockage pour les transferts avec des systèmes de fichiers POSIX.

Les attributs de fichier suivants ne sont pas conservés :

  • Les liens symboliques ne sont pas conservés.
  • Les liens physiques sont exportés en tant qu'objets Cloud Storage distincts, ce qui entraîne la création de plusieurs copies.
  • La configuration de striping Lustre définie de manière explicite à l'aide de lfs setstripe ou lfs setdirstripe n'est pas conservée.
  • Les atime et ctime des fichiers ne sont pas conservés.
  • Le mtime des répertoires n'est pas conservé.
  • Les répertoires vides ne sont pas conservés.

Opération Get

Pour afficher l'état d'une opération d'importation ou d'exportation, vous avez besoin de l'ID de l'opération. Cet ID est renvoyé par le service lorsque vous effectuez une demande d'importation ou d'exportation. Il utilise le format suivant :

  • operation-1234567890123-6127783ad26ea-88913969-02748053

gcloud

gcloud lustre operations describe OPERATION_ID \
  --location=LOCATION

REST

GET https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID
Authorization: Bearer [YOUR_ACCESS_TOKEN]

Voici un exemple de commande curl :

curl -X GET \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID

Annuler l'opération

Pour annuler une opération d'importation ou d'exportation, vous avez besoin de l'ID de l'opération. Cet ID est renvoyé par le service lorsque vous effectuez une demande d'importation ou d'exportation. Il utilise le format suivant :

  • operation-1234567890123-6127783ad26ea-88913969-02748053

gcloud

gcloud lustre operations cancel OPERATION_ID \
  --location=LOCATION

REST

POST https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID:cancel
Authorization: Bearer [YOUR_ACCESS_TOKEN]

Voici un exemple de commande curl :

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID:cancel