Kurzanleitung: Cloud Storage mit Rust verwenden

Google Cloud Storage ist ein verwalteter Dienst zum Speichern unstrukturierter Daten.

Die Rust-Clientbibliothek bietet eine idiomatische API für den Zugriff auf diesen Dienst. Die Clientbibliothek setzt unterbrochene Downloads und Uploads fort und führt automatisch Integritätsprüfungen der Daten durch. Bei Metadatenvorgängen kann die Clientbibliothek fehlgeschlagene Anfragen noch einmal senden und Vorgänge mit langer Ausführungszeit automatisch abfragen.

In dieser Anleitung wird beschrieben, wie Sie einen Cloud Storage-Bucket erstellen, ein Objekt in diesen Bucket hochladen und das Objekt dann wieder lesen.

Bevor Sie mit dieser Anleitung beginnen, erstellen Sie ein Google Cloud-Projekt, für das die Abrechnung aktiviert ist.

Clientbibliotheksabhängigkeit hinzufügen

cargo add google-cloud-storage

Storage-Bucket erstellen

Der Client zum Ausführen von Vorgängen für Buckets und Objektmetadaten heißt 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?;

Zum Erstellen eines Buckets müssen Sie den Namen Ihres Projekts und die Bucket-ID angeben.

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

Sie können auch andere Attribute für den Bucket angeben. Wenn Sie beispielsweise möchten, dass für alle Objekte im Bucket dieselben Berechtigungen gelten, können Sie Einheitlicher Zugriff auf Bucket-Ebene aktivieren.

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

Senden Sie dann diese Anfrage und warten Sie auf die Antwort.

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

Objekt hochladen

Der Client für Vorgänge an Objektdaten heißt „Storage“.

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

In diesem Fall erstellen Sie ein Objekt namens hello.txt mit der Begrüßung Hello World!.

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

Objekt herunterladen

Mit der Methode read_object() können Sie den Inhalt eines Objekts herunterladen.

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

Ressourcen bereinigen

Entfernen Sie zum Schluss das Objekt und den Bucket, um die in dieser Anleitung verwendeten Ressourcen zu bereinigen.

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