Transfiere datos hacia o desde Cloud Storage

Google Cloud Managed Lustre puede importar datos desde Cloud Storage y exportar datos a este servicio. Las transferencias de datos son incrementales, ya que solo copian los archivos que aún no existen en el destino o que cambiaron desde que se transfirieron.

Los buckets de Cloud Storage con el espacio de nombres jerárquico habilitado proporcionan velocidades de transferencia más rápidas hacia y desde Managed Lustre en comparación con los buckets estándar.

Limitaciones

Solo puede haber una operación de transferencia activa por instancia a la vez. Si intentas iniciar una segunda operación de transferencia mientras se ejecuta una anterior, se producirá un error como el siguiente:

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

Consideraciones sobre el ancho de banda de salida de Cloud Storage

Cloud Storage proporciona un ancho de banda de salida predeterminado de hasta 200 Gbps por región y por proyecto. Si tu carga de trabajo requiere una mayor velocidad de transferencia de datos, puedes solicitar un aumento en el límite de ancho de banda de salida. Para obtener más información, consulta las cuotas de ancho de banda de Cloud Storage.

Permisos necesarios

Permisos para iniciar la transferencia

La cuenta de usuario o de servicio que se usa para iniciar la transferencia requiere los siguientes permisos:

  • lustre.instances.exportData para transferir datos de Managed Lustre a Cloud Storage.
  • lustre.instances.importData para transferir desde Cloud Storage.

Ambos permisos se otorgan con el rol roles/lustre.admin. Puedes crear un rol personalizado para otorgar permisos de forma independiente.

Permisos para el agente de servicio de Managed Lustre

Obtén el agente de servicio de Managed Lustre

Se crea un agente de servicio de Managed Lustre la primera vez que creas una instancia de Managed Lustre en el proyecto. La identidad del agente de servicio tiene el formato service-PROJECT_NUMBER@gcp-sa-lustre.iam.gserviceaccount.com.

Si aún no tienes un agente de servicio de Managed Lustre
  1. Ejecuta el comando services identity create:

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

    Reemplaza PROJECT_NUMBER_OR_ID por el número o el ID del proyecto en el que deseas crear la instancia de Lustre administrado. El resultado es similar a lo siguiente:

    Service identity created: service-1234567890@gcp-sa-lustre.iam.gserviceaccount.com
    
  2. Copia el valor de la identidad del agente de servicio para usarlo en el siguiente paso.

Si ya creaste una instancia de Managed Lustre
  1. Para construir la identidad del agente de servicio, obtén el número de tu proyecto. Un PROJECT_NUMBER no es lo mismo que un ID del proyecto:

    • Un ID del proyecto es una cadena única que puede ser una combinación de letras, números y guiones. Especificas un ID del proyecto cuando creas tu proyecto. Por ejemplo, example-project-123
    • Un número de proyecto es un identificador único generado automáticamente para tu proyecto que consta solo de números. Por ejemplo, 1234567890

    Para obtener el PROJECT_NUMBER de un ID del proyecto determinado, usa el comando gcloud projects describe:

    gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    
  2. Copia el número de proyecto que se muestra en la identidad del agente de servicio:

    service-PROJECT_NUMBER@gcp-sa-lustre.iam.gserviceaccount.com
    
  3. Copia la identidad del agente de servicio para usarla en el siguiente paso.

Otorgar permisos

El agente de servicio de Lustre administrado requiere uno de los siguientes roles de Cloud Storage:

  • Para transferir datos hacia Cloud Storage y desde él, haz clic en roles/storage.objectUser en el bucket de Cloud Storage.
  • Para transferir solo desde Cloud Storage, haz clic en roles/storage.objectViewer en el bucket de Cloud Storage.

Para otorgar uno de estos roles, ejecuta el siguiente comando de gcloud:

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

SERVICE_AGENT_IDENTITY es la identidad del agente del servicio de Lustre administrado del paso anterior.

Importa datos a Managed Lustre

Puedes importar datos desde un bucket de Cloud Storage. El bucket puede estar en el mismo proyecto o en uno diferente. El bucket puede estar en una zona o región diferente de tu instancia de Lustre administrada, pero las transferencias entre regiones
pueden ser más lentas que las transferencias dentro de la misma región.

gcloud

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

Aquí:

  • INSTANCE_ID es el nombre de tu instancia de Managed Lustre.
  • --location es la zona de tu instancia de Managed Lustre. Por ejemplo, us-central1-a.
  • --gcs-path-uri especifica el URI a un bucket de Cloud Storage, o una ruta de acceso dentro de un bucket, con el formato gs://<bucket_name>/<optional_path_inside_bucket>/. Si se especifica una ruta de acceso dentro del bucket, debe terminar con una barra inclinada (/).
  • --lustre-path especifica la ruta del directorio raíz al sistema de archivos Lustre administrado. Debe comenzar con /. El valor predeterminado es /. Si especificas un valor que no sea el predeterminado, el directorio ya debe existir en el sistema de archivos.

Los parámetros que aparecen a continuación son opcionales:

  • --request-id te permite asignar un ID único a esta solicitud. Si reintentas esta solicitud con el mismo ID de solicitud, el servidor ignorará la solicitud si ya se completó. Debe ser un UUID válido que no contenga solo ceros.
  • --async devuelve una respuesta de inmediato, sin esperar a que se complete la operación.

Para obtener más detalles, consulta la documentación del SDK de 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"
  }
}

Aquí:

  • PROJECT_ID es el nombre de tu proyecto de Google Cloud .
  • LOCATION es la zona de tu instancia de Lustre administrado. Por ejemplo, us-central1-a
  • INSTANCE_ID es el nombre de tu instancia de Managed Lustre.
  • gcsPath contiene una clave uri cuyo valor especifica el URI a un bucket de Cloud Storage o una ruta de acceso dentro de un bucket, con el formato gs://<bucket_name>/<optional_path_inside_bucket>/. Si se especifica una ruta de acceso dentro del bucket, debe terminar con una barra inclinada (/).
  • lustrePath contiene una clave path cuyo valor especifica la ruta de acceso al directorio raíz del sistema de archivos Lustre administrado. Debe comenzar con /. El valor predeterminado es /. Si especificas un valor distinto del predeterminado, el directorio ya debe existir en el sistema de archivos.

Para usar tu propia cuenta de servicio en lugar del agente de servicio administrado por Google, la solicitud admite un campo serviceAccount en el objeto JSON:

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

Un comando curl de ejemplo se ve de la siguiente manera:

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":"/"}}'

Atributos de archivo

Cuando importas datos de un bucket de Cloud Storage a una instancia de Managed Lustre, los atributos de archivo de la instancia de Managed Lustre se configuran de una de las siguientes dos maneras:

  • Si el objeto de Cloud Storage tiene metadatos personalizados como se describe para la exportación de datos, sucede lo siguiente:
    • El UID, el GID, el modo y mtime del archivo se establecen según los metadatos personalizados del objeto.
    • El valor atime del archivo se establece en el mismo valor que el de mtime.
  • Si el objeto de Cloud Storage no tiene los metadatos personalizados, sucede lo siguiente:
    • El UID y el GID del archivo se establecen en 0 (root).
    • El modo del archivo se establece en rwxr-xr-x (755).
    • Los campos atime y mtime del archivo se establecen en la hora de creación del objeto de Cloud Storage.

En ambos casos, haz lo siguiente:

  • El valor de ctime de un archivo se establece en la hora en la que se escribió el archivo en la instancia.
  • Los valores atime, ctime y mtime de un directorio se establecen en la hora en que se creó el directorio en la instancia.

Exportar datos

Puedes exportar datos de tu instancia de Lustre administrado a un bucket de Cloud Storage en el mismo proyecto o en uno diferente. El bucket puede estar en una zona o región diferente de tu instancia de Lustre administrada, pero las transferencias entre regiones pueden ser más lentas que las transferencias dentro de la misma región.

gcloud

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

Aquí:

  • INSTANCE_ID es el nombre de tu instancia de Managed Lustre.
  • --location es la zona de tu instancia de Lustre administrado. Por ejemplo, us-central1-a
  • --gcs-path-uri especifica el URI a un bucket de Cloud Storage o una ruta de acceso dentro de un bucket con el formato gs://<bucket_name>/<optional_path_inside_bucket>/. Si se especifica una ruta de acceso dentro del bucket, debe terminar con una barra inclinada (/).
  • --lustre-path especifica la ruta del directorio raíz al sistema de archivos Managed Lustre. Debe comenzar con /. El valor predeterminado es /.

Los parámetros que aparecen a continuación son opcionales:

  • --request-id te permite asignar un ID único a esta solicitud. Si reintentas esta solicitud con el mismo ID de solicitud, el servidor ignorará la solicitud si ya se completó. Debe ser un UUID válido que no contenga solo ceros.
  • --async devuelve una respuesta de inmediato, sin esperar a que se complete la operación.

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/"
  }
}

Aquí:

  • PROJECT_ID es el nombre de tu proyecto de Google Cloud .
  • INSTANCE_ID es el nombre de tu instancia de Managed Lustre.
  • LOCATION es la zona de tu instancia de Lustre administrado. Por ejemplo, us-central1-a
  • lustrePath contiene una clave path cuyo valor especifica la ruta de acceso al directorio raíz del sistema de archivos Lustre administrado. Debe comenzar con /. El valor predeterminado es /.
  • gcsPath contiene una clave uri cuyo valor especifica el URI a un bucket de Cloud Storage o una ruta de acceso dentro de un bucket, con el formato gs://<bucket_name>/<optional_path_inside_bucket>/. Si se especifica una ruta de acceso dentro del bucket, debe terminar con una barra inclinada (/).

Para usar tu propia cuenta de servicio en lugar del agente de servicio administrado por Google, la solicitud admite un campo serviceAccount en el objeto JSON:

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

Un comando curl de ejemplo se ve de la siguiente manera:

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/"}}'

Atributos de archivo

Cuando exportas datos de una instancia de Lustre administrada a un bucket de Cloud Storage, los siguientes atributos de archivo se conservan como metadatos personalizados en Cloud Storage:

  • El UID del archivo se almacena con la clave goog-reserved-posix-uid.
  • El GID del archivo se almacena con la clave goog-reserved-posix-gid.
  • El modo numérico del archivo se almacena con la clave goog-reserved-posix-mode.
  • El mtime del archivo se almacena con la clave goog-reserved-file-mtime.

Estos nombres de claves de metadatos personalizados son los mismos que usa el Servicio de transferencia de almacenamiento para las transferencias con sistemas de archivos POSIX.

No se conservan los siguientes atributos de archivo:

  • No se conservan los vínculos simbólicos.
  • Las vinculaciones físicas se exportan como objetos separados de Cloud Storage, lo que genera varias copias.
  • No se conserva el rayado de brillo establecido de forma explícita con lfs setstripe o lfs setdirstripe.
  • No se conservan los atributos atime y ctime de los archivos.
  • No se conserva la mtime de los directorios.
  • No se conservan los directorios vacíos.

Obtener operación

Para ver el estado de una operación de importación o exportación, necesitarás el ID de la operación. El servicio devuelve este ID cuando realizas una solicitud de importación o exportación, y usa el siguiente formato:

  • 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]

Un comando curl de ejemplo se ve de la siguiente manera:

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

Cancelar operación

Para cancelar una operación de importación o exportación, necesitarás el ID de la operación. El servicio devuelve este ID cuando realizas una solicitud de importación o exportación, y usa el siguiente formato:

  • 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]

Un comando curl de ejemplo se ve de la siguiente manera:

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