Integracja z Google Cloud

Cloud Storage for Firebase jest ściśle zintegrowany z Google Cloud. Pakiety SDK Firebase dla Cloud Storage przechowują pliki bezpośrednio w Google Cloud Storage zasobnikach, a w miarę rozwoju aplikacji możesz integrować inne usługi Google Cloud, takie jak zarządzane usługi obliczeniowe (np. App Engine lub Cloud Functions) albo interfejsy API uczenia maszynowego (np. Cloud Vision lub Tłumacz Google).

Projekt w Firebase to w rzeczywistości tylko projekt Google Cloud, w którym włączono dodatkowe konfiguracje i usługi specyficzne dla Firebase. Oznacza to, że każdy zasobnik Cloud Storage używany w Cloud Storage for Firebase jest dostępny w Google Cloud (w tym w konsoli i interfejsach API).

Wskazówki dotyczące kont usługi

Firebase używa kont usługi Google Cloud do obsługi i zarządzania usługami bez udostępniania danych logowania użytkownika. Gdy tworzysz projekt w Firebase, który korzysta z Cloud Storage, możesz zauważyć, że w projekcie jest już dostępne odpowiednie konto usługi: service-PROJECT_NUMBER@gcp-sa-firebasestorage.iam.gserviceaccount.com. Więcej informacji znajdziesz w artykule Omówienie kont usługi Firebase.

Google Cloud Storage

Możesz używać interfejsów API, aby uzyskiwać dostęp do plików przesłanych za pomocą pakietów SDK dla, zwłaszcza do wykonywania bardziej złożonych operacji, takich jak kopiowanie lub przenoszenie pliku albo wyświetlanie listy wszystkich plików dostępnych w odniesieniu.Google Cloud StorageFirebaseCloud Storage

Pamiętaj, że te żądania korzystają z Google Cloud Storage opcji kontroli dostępu, a nie z Firebase Authentication i Cloud Storage Security Rules.

Interfejsy API

Oprócz pakietów SDK Firebase dla Cloud Storage istnieje wiele innych sposobów uzyskiwania dostępu do danych przechowywanych w zasobniku Cloud Storage, w zależności od tego, co chcesz zrobić. Jeśli uzyskujesz dostęp do danych na serwerze, oferujemy biblioteki po stronie serwera, a także interfejs API typu REST JSON i zgodny z S3 XML. Jeśli musisz tworzyć skrypty zmian lub wykonywać inne zadania administracyjne, przyda Ci się narzędzie wiersza poleceń.

Google Cloud pakiety SDK serwera

Google Cloud oferuje wysokiej jakości pakiety SDK serwera dla wielu usług w chmurze, w tym Cloud Storage. Te biblioteki są dostępne w Node.js, Java, Go, Python, PHP, i Ruby.

Więcej informacji, w tym instrukcje instalacji, uwierzytelniania i rozwiązywania problemów, znajdziesz w dokumentacji dotyczącej platformy, do której linki podaliśmy powyżej.

Poniżej znajdziesz przykład użycia pakietu SDK Google Cloud Storage:

Node.js

    // Require gcloud
    var gcloud = require('google-cloud');

    // Enable Cloud Storage
    var gcs = gcloud.storage({
      projectId: 'grape-spaceship-123',
      keyFilename: '/path/to/keyfile.json'
    });

    // Reference an existing bucket.
    var bucket = gcs.bucket('my-existing-bucket');

    // Upload a local file to a new file to be created in your bucket.
    bucket.upload('/photos/zoo/zebra.jpg', function(err, file) {
      if (!err) {
        // "zebra.jpg" is now in your bucket.
      }
    });

    // Download a file from your bucket.
    bucket.file('giraffe.jpg').download({
      destination: '/photos/zoo/giraffe.jpg'
    }, function(err) {});
    

Java

    // Enable Cloud Storage
    Storage storage = StorageOptions.builder()
      .authCredentials(AuthCredentials.createForJson(new FileInputStream("/path/to/my/key.json"))
      .build()
      .service();

    // Upload a local file to a new file to be created in your bucket.
    InputStream uploadContent = ...
    BlobId blobId = BlobId.of("my-existing-bucket", "zebra.jpg");
    BlobInfo blobInfo = BlobInfo.builder(blobId).contentType("text/plain").build();
    Blob zebraBlob = storage.create(blobInfo, content);

    // Download a file from your bucket.
    Blob giraffeBlob = storage.get("my-existing-bucket", "giraffe.jpg", null);
    InputStream downloadContent = giraffeBlob.getInputStream();
    

Go

    // Enable Cloud Storage
    client, err := storage.NewClient(ctx, option.WithServiceAccountFile("path/to/keyfile.json"))
    if err != nil {
        log.Fatal(err)
    }

    // Download a file from your bucket.
    rc, err := client.Bucket("my-existing-bucket").Object("giraffe.jpg").NewReader(ctx)
    if err != nil {
        log.Fatal(err)
    }
    defer rc.Close()
    body, err := ioutil.ReadAll(rc)
    if err != nil {
        log.Fatal(err)
    }
    

Python

    # Import gcloud
    from google.cloud import storage

    # Enable Cloud Storage
    client = storage.Client()

    # Reference an existing bucket.
    bucket = client.get_bucket('my-existing-bucket')

    # Upload a local file to a new file to be created in your bucket.
    zebraBlob = bucket.get_blob('zebra.jpg')
    zebraBlob.upload_from_filename(filename='/photos/zoo/zebra.jpg')

    # Download a file from your bucket.
    giraffeBlob = bucket.get_blob('giraffe.jpg')
    giraffeBlob.download_as_string()
    

PHP

    // Require gcloud
    require 'vendor/autoload.php';
    use Google\Cloud\Storage\StorageClient;

    // Enable Cloud Storage
    $storage = new StorageClient([
        'projectId' => 'grape-spaceship-123'
    ]);

    // Reference an existing bucket.
    $bucket = $storage->bucket('my-existing-bucket');

    // Upload a file to the bucket.
    $bucket->upload(
        fopen('/photos/zoo/zebra.jpg', 'r')
    );

    // Download a file from your bucket.
    $object = $bucket->object('giraffe.jpg');
    $object->downloadToFile('/photos/zoo/giraffe.jpg');
    

Ruby

    # Require gcloud
    require "google/cloud"

    # Enable Cloud Storage
    gcloud = Google::Cloud.new "grape-spaceship-123", "/path/to/keyfile.json"
    storage = gcloud.storage

    # Reference an existing bucket.
    bucket = storage.bucket "my-existing-bucket"

    # Upload a file to the bucket.
    bucket.create_file "/photos/zoo/zebra.jpg", "zebra.jpg"

    # Download a file from your bucket.
    file = bucket.file "giraffe.jpg"
    file.download "/photos/zoo/#{file.name}"
    

Interfejs API typu REST

Jeśli używasz języka bez biblioteki klienta, chcesz zrobić coś, czego biblioteki klienta nie obsługują, lub po prostu masz ulubionego klienta HTTP, którego wolisz używać, Google Cloud Storage oferuje interfejsy API zarówno dla JSON, jak i XML.

Oprócz tych interfejsów API dostępu do danych przechowywanych w Cloud Storage możesz używać interfejsu Cloud Storage dla Firebase APIdo zarządzania zasobnikami Cloud Storage na potrzeby projektów w Firebase.

gsutil

gsutil to narzędzie wiersza poleceń, które zapewnia bezpośredni dostęp do Cloud Storage. Za pomocą gsutil możesz wykonywać wiele zadań związanych z zarządzaniem zasobnikami i obiektami, w tym:

  • przesyłanie, pobieranie i usuwanie obiektów;
  • wyświetlanie listy zasobników i obiektów;
  • przenoszenie, kopiowanie i zmienianie nazw obiektów;
  • edycja list kontroli dostępu do obiektów i zasobników.

gsutil umożliwia też wykonywanie innych zaawansowanych operacji, takich jak przenoszenie plików z jednego katalogu do drugiego czy usuwanie wszystkich plików znajdujących się w określonej lokalizacji.

Przeniesienie wszystkich plików z jednego odniesienia do drugiego jest proste:

gsutil mv gs://bucket/old/reference gs://bucket/new/reference

Podobnie intuicyjne jest zbiorcze usuwanie wszystkich plików znajdujących się w odniesieniu:

# Delete all files under a path
gsutil rm -r gs://bucket/reference/to/delete

# Delete all the files in a bucket but not the bucket gsutil rm -r gs://bucket/**

# Delete all the files AND the bucket # Removing the default bucket will break the Firebase SDKs for Cloud Storage and is strongly discouraged gsutil rm -r gs://bucket

Częstotliwości żądań

Google Cloud Storage to wysoce skalowalna usługa, która wykorzystuje technologię autoskalowania, aby osiągać bardzo wysokie częstotliwości żądań.

Google Cloud Storage to usługa wielodostępna, co oznacza, że użytkownicy korzystają z tego samego zestawu zasobów bazowych. Aby jak najlepiej wykorzystać te współdzielone zasoby, zasobniki mają początkową pojemność wejścia/wyjścia.

Planując integrację Cloud Storage for Firebase z aplikacją, zastanów się nad minimalną częstotliwością wniosków, której aplikacja potrzebuje do prawidłowego działania, oraz nad efektywnym wysyłaniem wniosków. Zapoznaj się z wytycznymi dotyczącymi częstotliwości żądań, a zwłaszcza z wytycznymi dotyczącymi zwiększania częstotliwości żądań.

Obsługa wersji obiektów

Czy zdarzyło Ci się kiedyś przypadkowo usunąć coś, czego nie można było przywrócić z kopii zapasowej? Google Cloud Storage obsługuje obsługę wersji obiektów, która zapewnia automatyczne tworzenie kopii zapasowych danych i przywracanie ich z tych kopii. Możesz włączyć wersjonowanie obiektów za pomocą polecenia gsutil versioning set:

gsutil versioning set on gs://<your-cloud-storage-bucket>

Cloud Storage zawsze wybiera najnowszą wersję, więc jeśli chcesz przywrócić obiekt, musisz użyć jednego z powyższych interfejsów API lub narzędzi, aby ustawić żądany obiekt jako najnowszy.

Zarządzanie cyklem życia obiektu

Możliwość automatycznego archiwizowania lub usuwania nieaktualnych plików jest przydatną funkcją w wielu aplikacjach. Na szczęście Google Cloud Storage oferuje zarządzanie cyklem życia obiektów, które umożliwia usuwanie lub archiwizowanie obiektów po określonym czasie.

Załóżmy, że masz aplikację do udostępniania zdjęć i chcesz, aby wszystkie zdjęcia były usuwane w ciągu 1 dnia. Zasady cyklu życia obiektów możesz skonfigurować w ten sposób:

// lifecycle.json
{
  "lifecycle": {
    "rule":
    [
      {
        "action": {"type": "Delete"},
        "condition": {"age": 1}
      }
    ]
  }
}

Wdróż je za pomocą polecenia gsutil lifecycle set:

gsutil lifecycle set lifecycle.json gs://<your-cloud-storage-bucket>

Pamiętaj, że dotyczy to wszystkich plików w zasobniku. Jeśli więc przechowujesz ważne kopie zapasowe użytkowników, które chcesz przechowywać przez długi czas, obok zdjęć, które chcesz usuwać codziennie, możesz użyć 2 osobnych zasobników lub ręcznie usuwać pliki za pomocą gsutil lub własnego serwera.

Google Cloud Functions (beta)

Google Cloud Functions to wymagające niewielu zasobów rozwiązanie oparte na zdarzeniach i obliczeniach asynchronicznych. Umożliwia ono tworzenie niewielkich funkcji realizujących jeden cel i reagujących na zdarzenia bez konieczności zarządzania serwerem lub środowiskiem wykonawczym. Te funkcje mogą służyć do transkodowania filmów, klasyfikowania obrazów za pomocą uczenia maszynowego lub synchronizowania metadanych z Firebase Realtime Database. Cloud Functions, które wymagają jeszcze mniejszych nakładów niż App Engine, to najszybszy sposób reagowania na zmiany w Cloud Storage.

Google Cloud Vision API

Interfejs Google Cloud Vision API umożliwia programistom zrozumienie treści obrazu dzięki enkapsulacji zaawansowanych modeli uczenia maszynowego w łatwym w użyciu interfejsie API. Szybko klasyfikuje obrazy w tysiącach kategorii, wykrywa poszczególne obiekty i twarze na obrazach, znajduje i odczytuje drukowane słowa zawarte na obrazach, identyfikuje treści obraźliwe, a nawet analizuje nastawienie obrazu.

Google Cloud Speech API

Podobnie jak Vision API, the Google Cloud Speech API enables programistom wyodrębnianie tekstu z pliku audio przechowywanego w Cloud Storage. Interfejs API rozpoznaje ponad 80 języków i wariantów, aby obsługiwać globalne grono użytkowników. W połączeniu z Google Cloud Natural Language API, programiści mogą zarówno wyodrębniać tekst, jak i wnioskować o jego znaczeniu. Jeśli potrzebujesz dotrzeć do odbiorców na całym świecie, połącz to z Google Translate API, aby przetłumaczyć tekst na ponad 90 języków.

Google App Engine

Cloud Storage for Firebase używa 2 różnych formatów nazw domyślnych zasobników w zależności od tego, kiedy zasobnik został utworzony:

  • Domyślny zasobnik utworzony po wrześniu 2024 r.: *.firebasestorage.app domyślne zasobniki są niezależne od Google App Engine.
  • Starsze domyślne zasobniki: *.appspot.com domyślne zasobniki są współdzielone z Google App Engine.

Google App Engine to platforma jako usługa, która automatycznie skaluje logikę backendu w odpowiedzi na ilość otrzymywanego ruchu. Wystarczy przesłać kod backendu, a Google zajmie się dostępnością aplikacji. Nie musisz konfigurować ani utrzymywać serwerów. App Engine to szybki i prosty sposób na dodanie do aplikacji Firebase dodatkowej mocy obliczeniowej lub zaufanego wykonania.

Integracja ze starszą wersją App Engine

Jeśli masz starszy *.appspot.com domyślny zasobnik, jest on automatycznie udostępniany aplikacji App Engine w Twoim projekcie. Oznacza to, że możesz używać wbudowanych interfejsów App Engine API do udostępniania danych między tym zasobnikiem a App Engine. Jest to przydatne do kodowania dźwięku, transkodowania wideo i przekształcania obrazów, a także do innych wymagających obliczeń procesów działających w tle.

Standardowe środowiska Java, Python i Go dla App Engine obejmują App Engine Images API (Java | Python | Go), które może zmieniać rozmiar, obracać, odwracać i przycinać obraz, a także zwracać adres URL do wyświetlania obrazu, co umożliwia przekształcenia po stronie klienta, podobnie jak w przypadku Cloudinary i Imgix.

Wskazówki dotyczące współdzielonego zasobnika

Jeśli używasz starszego *.appspot.com domyślnego zasobnika:

  • Firebase Security Rules i pliki App Engine: pliki przesłane za pomocą App Engine są przechowywane w tym samym zasobniku i podlegają tym samym konfiguracjom bezpieczeństwa. Jeśli skonfigurujesz Firebase Security Rules pod kątem dostępu publicznego, nowo przesłane pliki App Engine będą również dostępne publicznie.

  • Ustawianie uprawnień: podczas importowania istniejącego Google Cloud projektu do Firebase może być konieczne ustawienie domyślnej kontroli dostępu do obiektów, aby umożliwić Firebase dostęp do nich. Uruchom to polecenie za pomocą gsutil:

    gsutil -m acl ch -r -u service-PROJECT_NUMBER@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://BUCKET_NAME

Znane problemy z Cloud Storage i App Engine

Istnieją 2 znane przypadki, w których nie można zaimportować aplikacji App Engine:

  • Projekt zawiera poprzednią App Engine Datastore Master/Slave aplikację.

  • Projekt ma identyfikator projektu z prefiksem domeny, np. domain.com:project-1234.

W żadnym z tych przypadków projekt nie będzie obsługiwał Cloud Storage for Firebase, i aby korzystać z Cloud Storage, musisz utworzyć nowy projekt w Firebase. Jeśli masz pytania, skontaktuj się z zespołem pomocy Firebase.