Guía de inicio rápido: Usa Cloud Storage con Rust

Google Cloud Storage es un servicio administrado para almacenar datos no estructurados.

La biblioteca cliente de Rust proporciona una API idiomática para acceder a este servicio. La biblioteca cliente reanuda las cargas y descargas interrumpidas, y realiza automáticamente verificaciones de integridad en los datos. En el caso de las operaciones de metadatos, la biblioteca cliente puede reintentar solicitudes fallidas y sondear automáticamente las operaciones de larga duración.

En esta guía, se muestra cómo crear un bucket de Cloud Storage, subir un objeto a él y, luego, volver a leer el objeto.

Antes de comenzar con esta guía, crea un proyecto de Google Cloud con la facturación habilitada.

Agrega la dependencia de la biblioteca cliente

cargo add google-cloud-storage

Crea un bucket de almacenamiento

El cliente para realizar operaciones en buckets y metadatos de objetos se llama StorageControl.

    use google_cloud_storage::model::{Bucket, bucket::IamConfig, bucket::iam_config::UniformBucketLevelAccess};
    use google_cloud_storage::client::StorageControl;
    let control = StorageControl::builder().build().await?;

Para crear un bucket, debes proporcionar el nombre del proyecto y el ID de bucket.

    let bucket = control
        .create_bucket()
        .set_parent("projects/_")
        .set_bucket_id(bucket_id)
        .set_bucket(
            gcs::model::Bucket::new()
                .set_project(format!("projects/{project_id}"))
        )

También puedes proporcionar otros atributos para el bucket. Por ejemplo, si quieres que todos los objetos del bucket usen los mismos permisos, puedes habilitar el acceso uniforme a nivel del bucket.

    Bucket::new()
        .set_project(format!("projects/{project_id}"))
        .set_iam_config(
            IamConfig::new()
                .set_uniform_bucket_level_access(
                    UniformBucketLevelAccess::new()
                        .set_enabled(true),
            ),
        ),

Luego, envía esta solicitud y espera la respuesta.

        .send()
        .await?;
    println!("bucket successfully created {bucket:?}");

Subir un objeto

El cliente para realizar operaciones en los datos de objetos se llama Storage.

    use google_cloud_storage::client::Storage;
    let client = Storage::builder().build().await?;

En este caso, crearás un objeto llamado hello.txt con el saludo Hello World!.

    let object = client
        .upload_object(&bucket.name, "hello.txt", "Hello World!")
        .send_buffered()
        .await?;
    println!("object successfully uploaded {object:?}");

Descarga un objeto

Para descargar el contenido de un objeto, usa el método read_object().

    let mut reader = client.read_object(&bucket.name, "hello.txt").send().await?;
    let mut contents = Vec::new();
    while let Some(chunk) = reader.next().await.transpose()? {
        contents.extend_from_slice(&chunk);
    }
    println!(
        "object contents successfully downloaded {:?}",
        bytes::Bytes::from_owner(contents)
    );

Limpia los recursos

Por último, quita el objeto y el bucket para limpiar los recursos que se usaron en esta guía.

    control
        .delete_object()
        .set_bucket(&bucket.name)
        .set_object(&object.name)
        .set_generation(object.generation)
        .send()
        .await?;
    control
        .delete_bucket()
        .set_name(&bucket.name)
        .send()
        .await?;