Integracja z Google Cloud

Cloud Storage for Firebase jest ściśle zintegrowany z usługą Google Cloud. Pakiety SDK Firebase Cloud Storageumożliwiają przechowywanie plików bezpośrednio w Google Cloud Storage zasobnikach. Wraz z rozwojem aplikacji możesz integrować inne usługi Google Cloud, takie jak zarządzane usługi obliczeniowe App Engine lub Cloud Functions, albo interfejsy API uczenia maszynowego, np. Cloud Vision lub Tłumacz Google.

Projekt Firebase to w rzeczywistości Google Cloudprojekt, w którym włączono dodatkowe konfiguracje i usługi Firebase. Oznacza to, że każdy Cloud Storage bucket, którego używasz w Cloud Storage for Firebase, jest dostępny w Google Cloud (w tym jego konsola i interfejsy API).

Integracja z Google Cloud, w tym importowanie istniejących zasobników Cloud Storage, wymaga projektu Firebase w ramach abonamentu Blaze z płatnością według wykorzystania.

Ważne informacje o kontach usługi

Firebase używa Google Cloudkont usługi do obsługi i zarządzania usługami bez udostępniania danych logowania użytkownika. Gdy utworzysz projekt 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ć Google Cloud Storage interfejsów API, aby uzyskiwać dostęp do plików przesłanych za pomocą pakietów SDK Firebase na Cloud Storage, zwłaszcza do wykonywania bardziej złożonych operacji, takich jak kopiowanie lub przenoszenie pliku czy wyświetlanie listy wszystkich plików dostępnych w odniesieniu do danego odwołania.

Pamiętaj, że te żądania korzystają z Google Cloud Storage opcji kontroli dostępu, a nie z Firebase AuthenticationCloud 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 RESTful 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 językach Node.js, Java, Go, Python, PHPRuby.

Więcej informacji, w tym instrukcje instalacji, uwierzytelniania i rozwiązywania problemów, znajdziesz w dokumentacji dotyczącej konkretnej platformy, do której link znajduje się powyżej.

Poniżej znajdziesz przykładowe użycie pakietu SDK w wersji 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 wykonać działanie, którego 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 formatu JSON, jak i XML.

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

gsutil

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

  • przesyłać, pobierać i usuwać obiekty,
  • wyświetlanie listy zasobników i obiektów,
  • przenoszenie, kopiowanie i zmienianie nazw obiektów;
  • Edytowanie list kontroli dostępu do obiektów i zasobników.

gsutil umożliwiać inne zaawansowane operacje, takie jak przenoszenie plików z jednego katalogu do drugiego lub usuwanie wszystkich plików znajdujących się w określonej lokalizacji.

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

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

Usuwanie zbiorcze wszystkich plików pod referencją jest równie intuicyjne:

# 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 wskaźniki żą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 zasoby współdzielone, zasobniki mają początkową pojemność wejścia/wyjścia.

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

Obsługa wersji obiektów

Czy zdarzyło Ci się kiedyś przypadkowo usunąć coś, czego nie było w kopii zapasowej? Google Cloud Storage obsługuje obsługę wersji obiektów, która zapewnia automatyczny sposób tworzenia kopii zapasowych danych i przywracania ich z tych kopii. Obsługę wersji obiektów możesz włączyć 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 przypadku wielu aplikacji. Na szczęście Google Cloud Storage udostępnia zarządzanie cyklem życia obiektów, które umożliwia usuwanie lub archiwizowanie obiektów po określonym czasie.

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

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

Wdróż go 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 codziennie usuwać, 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 można wykorzystać do transkodowania filmów, klasyfikowania obrazów za pomocą uczenia maszynowego lub synchronizowania metadanych z Firebase Realtime Database. Cloud Functions ma jeszcze mniejszy narzut niżApp Engine, dlatego jest najszybszym sposobem reagowania na zmiany wCloud Storage.

Google Cloud Vision API

Google Cloud Vision API umożliwia deweloperom zrozumienie treści obrazu dzięki wykorzystaniu zaawansowanych modeli uczenia maszynowego w prostym 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 obraźliwe treści, a nawet przeprowadza analizę nastroju obrazu.

Google Cloud Speech API

Podobnie jak interfejs Vision API, Google Cloud Speech API umożliwia 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 interfejsem Google Cloud Natural Language API deweloperzy mogą wyodrębniać tekst w formie surowej i wyciągać z niego wnioski. Jeśli potrzebujesz dotrzeć do odbiorców na całym świecie, połącz to z interfejsem Google Translate API, aby przetłumaczyć tekst na ponad 90 języków.

Google App Engine

Google App Engine to „Platforma jako usługa”, która automatycznie skaluje logikę backendu w odpowiedzi na ilość otrzymywanego ruchu. Wystarczy, że prześlesz 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 środowiska wykonawczego.

Jeśli masz domyślny zasobnik Cloud Storage o formacie nazwy PROJECT_ID.appspot.com, jest on automatycznie udostępniany aplikacji App Engine w Twoim projekcie. Oznacza to, że jeśli utworzysz App Engineaplikację, możesz użyć wbudowanych interfejsów API App Engine, aby udostępniać dane między tym zasobnikiem a App Engine. Jest to przydatne w przypadku kodowania dźwięku, transkodowania wideo i przekształcania obrazów, a także innych wymagających obliczeniowo procesów w tle.

Środowiska standardowe w przypadku języków Java, Python i GoApp Engine obejmują App Engine interfejs Images APIApp Engine (Java | Python | Go), który może zmieniać rozmiar, obracać, odwracać i przycinać obraz, a także zwracać adres URL do wyświetlania obrazu, który umożliwia przekształcenia po stronie klienta, podobnie jak Cloudinary i Imgix.

Jeśli importujesz do Firebase istniejący projekt Google Cloud i chcesz udostępnić w Firebase istniejące obiekty Google Cloud, musisz ustawić domyślną kontrolę dostępu do obiektów, aby umożliwić Firebase dostęp do nich. W tym celu uruchom to polecenie za pomocą gsutil:App Engine

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

Uwagi dotyczące plików Firebase Security RulesApp Engine

Jeśli masz domyślny zasobnik Cloud Storage o nazwie w formacie *.appspot.com, Twój projekt ma też aplikację App Engine, która korzysta z tego zasobnika.

Jeśli skonfigurujesz Firebase Security Rules dla publicznego (nieuwierzytelnionego) dostępu, nowo przesłane pliki App Engine również będą publicznie dostępne.

Znane problemy dotyczące Cloud Storage i App Engine

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

  1. Projekt zawiera poprzednią aplikację App Engine Datastore Master/Slave.
  2. Projekt ma identyfikator projektu z prefiksem domeny, np. domain.com:project-1234.

W obu tych przypadkach projekt nie będzie obsługiwać Cloud Storage for Firebase, dlatego aby korzystać z Cloud Storage, musisz utworzyć nowy projekt Firebase. Skontaktuj się z zespołem pomocy, abyśmy mogli Ci pomóc.