Guida rapida: utilizza Cloud Storage con Rust

Google Cloud Storage è un servizio gestito per l'archiviazione di dati non strutturati.

La libreria client Rust fornisce un'API idiomatica per accedere a questo servizio. La libreria client riprende i download e i caricamenti interrotti ed esegue automaticamente controlli di integrità sui dati. Per le operazioni sui metadati, la libreria client può riprovare le richieste non riuscite ed eseguire automaticamente il polling delle operazioni a lunga esecuzione.

Questa guida mostra come creare un bucket Cloud Storage, caricare un oggetto in questo bucket e poi leggerlo.

Prima di iniziare questa guida, crea un progetto Google Cloud con la fatturazione abilitata.

Aggiungi la dipendenza della libreria client

cargo add google-cloud-storage

Crea un bucket di archiviazione

Il client per eseguire operazioni sui bucket e sui metadati degli oggetti è chiamato 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?;

Per creare un bucket, devi fornire il nome del progetto e l'ID 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}"))
        )

Puoi anche fornire altri attributi per il bucket. Ad esempio, se vuoi che tutti gli oggetti nel bucket utilizzino le stesse autorizzazioni, puoi attivare l'accesso uniforme a livello di bucket.

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

Poi invia questa richiesta e attendi la risposta.

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

Caricamento di un oggetto

Il client per eseguire operazioni sui dati degli oggetti è chiamato Storage.

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

In questo caso, crei un oggetto chiamato hello.txt con il saluto Hello World!.

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

Scaricare un oggetto

Per scaricare i contenuti di un oggetto, utilizza il metodo 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)
    );

Esegui la pulizia delle risorse

Infine, rimuovi l'oggetto e il bucket per ripulire le risorse utilizzate in questa guida.

    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?;