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