Integracja z Google Cloud

Usługa Cloud Storage dla Firebase jest ściśle zintegrowana z Google Cloud. Pakiety SDK Firebase dla Cloud Storage przechowują pliki bezpośrednio w zasobnikach Google Cloud Storage, a w miarę rozwoju aplikacji można z łatwością integrować inne usługi Google Cloud, takie jak zarządzane zasoby obliczeniowe, takie jak App Engine czy Cloud Functions, oraz interfejsy API systemów uczących się, takie jak Cloud Vision czy Tłumacz Google.

Firebase używa kont usługi Google Cloud do obsługi usług i zarządzania nimi bez konieczności udostępniania danych logowania użytkowników. Gdy tworzysz projekt Firebase, który korzysta z Cloud Storage, możesz zauważyć, że odpowiednie konto usługi jest już dostępne w Twoim projekcie: service-<project number>@gcp-sa-firebasestorage.iam.gserviceaccount.com. Więcej informacji znajdziesz w tym przewodniku pomocy Firebase.

W ramach pakietów SDK Firebase dla Cloud Storage używane są domyślne zasobniki na poziomie bezpłatnym App Engine. Pozwala to szybko rozpocząć korzystanie z Cloud Storage bez konieczności dodawania karty kredytowej ani włączania konta rozliczeniowego Cloud. Pozwala też łatwo udostępniać dane między Firebase a projektem Google Cloud.

Integracja z Google Cloud, w tym importowanie istniejących zasobników Cloud Storage, wymaga projektu Firebase z abonamentem Blaze. Więcej informacji o abonamentach znajdziesz na stronie z cennikiem.

Google Cloud Storage

Za pomocą interfejsów API Google Cloud Storage możesz uzyskać dostęp do plików przesłanych za pomocą pakietów SDK Firebase dla Cloud Storage, zwłaszcza podczas wykonywania bardziej złożonych operacji, takich jak kopiowanie i przenoszenie plików oraz wyświetlanie wszystkich plików dostępnych w odniesieniu do plików referencyjnych.

Warto zauważyć, że żądania te korzystają z opcji kontroli dostępu Google Cloud Storage zamiast uwierzytelniania Firebase i reguł zabezpieczeń Cloud Storage.

Interfejsy API

Oprócz pakietów SDK Firebase dla Cloud Storage dostępnych jest wiele innych sposobów dostępu do danych przechowywanych w zasobniku Cloud Storage – w zależności od tego, co chcesz zrobić. Jeśli korzystasz z danych na serwerze, oferujemy biblioteki po stronie serwera oraz interfejs API typu REST zgodny z JSON i S3. Jeśli potrzebujesz skryptu do wprowadzania zmian lub wykonywania innych zadań administracyjnych, znajdziesz tu wiersz poleceń.XML

Pakiety SDK serwera Google Cloud

Google Cloud oferuje wysokiej jakości pakiety SDK dla serwerów dla różnych 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, uwierzytelnianie i rozwiązywanie problemów, znajdziesz w dokumentacji konkretnej platformy, do której link znajdziesz powyżej.

Poniżej znajduje się 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 nie oferują biblioteki klienta, lub masz ulubionego klienta HTTP, którego wolisz używać, Google Cloud Storage oferuje interfejsy API dla JSON i XML.

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

gsutil

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

  • przesyłania, pobierania i usuwania obiektów;
  • Wyświetlam listę zasobników i obiektów.
  • przenoszenie i kopiowanie obiektów oraz zmienianie ich nazw;
  • Edytowanie list kontroli dostępu obiektów i zasobników.

gsutil umożliwia wykonywanie innych zaawansowanych operacji, takich jak przenoszenie plików z jednego katalogu do innego czy usuwanie wszystkich plików w określonej lokalizacji.

Przeniesienie wszystkich plików z jednego odwołania do innego jest dziecinnie proste:

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

Zbiorcze usuwanie wszystkich plików znajdujących się pod plikiem referencyjnym jest podobnie 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

Stawki żądań

Google Cloud Storage to wysoce skalowalna usługa, która korzysta z technologii autoskalowania, by uzyskiwać bardzo wysoki współczynnik żądań.

Google Cloud Storage to usługa dzierżawiona przez wielu najemców, co oznacza, że użytkownicy współdzielą ten sam zbiór bazowych zasobów. Aby można było jak najlepiej wykorzystać te współdzielone zasoby, zasobniki mają początkowy rozmiar we/wy.

Planując integrację Cloud Storage dla Firebase ze swoją aplikacją, zastanów się nad minimalną liczbą żądań, która zapewni jej wysoką wydajność i jak sprawniej wysyłać żądania. Zapoznaj się z wytycznymi dotyczącymi współczynnika żądań, a w szczególności zwiększania liczby żądań.

Obsługa wersji obiektów

Czy kiedykolwiek zdarzyło Ci się usunąć coś przez przypadek i nie mieć kopii zapasowej? Google Cloud Storage obsługuje obsługę wersji obiektów, co pozwala automatycznie tworzyć i przywracać kopie zapasowe danych z tych kopii. Obsługa 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 pobiera najnowszą wersję, więc jeśli chcesz przywrócić obiekt, musisz użyć jednego z interfejsów API lub narzędzi powyżej, aby ustawić żądany obiekt jako najnowszy.

Zarządzanie cyklem życia obiektu

Możliwość automatycznego archiwizowania i usuwania nieaktualnych plików to przydatna funkcja wielu aplikacji. Na szczęście Google Cloud Storage udostępnia funkcję zarządzania cyklem życia obiektu, która umożliwia usuwanie lub archiwizowanie obiektów po upływie określonego czasu.

Rozważ skorzystanie z aplikacji do udostępniania zdjęć, w której wszystkie zdjęcia są usuwane w ciągu jednego dnia. Zasadę cyklu życia obiektu 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, więc jeśli przechowujesz kopie zapasowe ważnych użytkowników, które chcesz przez długi czas przechowywać, wraz ze zdjęciami, które chcesz codziennie usuwać, możesz użyć 2 osobnych zasobników lub usunąć dane ręcznie za pomocą usługi gsutil lub własnego serwera.

Z App Engine

App Engine to rozwiązanie typu „platforma jako usługa”, które automatycznie skaluje logikę backendu w odpowiedzi na ilość odbieranego ruchu. Wystarczy przesłać kod backendu, a Google będzie zarządzać dostępnością aplikacji. Nie ma żadnych serwerów, które można udostępniać ani utrzymywać. App Engine to szybki i łatwy sposób na zwiększenie mocy obliczeniowej lub niezawodnego wykonania w swojej aplikacji Firebase.

Pakiety SDK Firebase dla Cloud Storage korzystają z domyślnego zasobnika App Engine, co oznacza, że jeśli tworzysz aplikację App Engine, możesz używać wbudowanych interfejsów API App Engine do udostępniania danych między Firebase i App Engine. Jest to przydatne przy kodowaniu audio, transkodowaniu wideo i przekształcaniu obrazu, a także przy innych przetwarzaniu danych w tle.

Standardowe środowiska App Engine i Javy oraz Go

Jeśli podczas importowania do Firebase istniejącego projektu Google Cloud chcesz udostępnić w Firebase jakiekolwiek istniejące obiekty App Engine, musisz ustawić domyślną kontrolę dostępu do obiektów, aby umożliwić Firebase dostęp do nich. W tym celu uruchom następujące polecenie za pomocą polecenia gsutil:

gsutil -m acl ch -r -u service-<project number;gt@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://<your-cloud-storage-bucket>

Znane problemy

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

  1. Projekt zawiera poprzednią aplikację główną/podrzędną App Engine Datastore.
  2. Projekt ma identyfikator projektu poprzedzony prefiksem domeny, na przykład: domain.com:project-1234.

W żadnym z tych przypadków projekt nie będzie obsługiwał Cloud Storage dla Firebase i aby korzystać z Cloud Storage, musisz utworzyć nowy projekt Firebase. Skontaktuj się z zespołem pomocy, abyśmy mogli Ci pomóc.

Google Cloud Functions (beta)

Google Cloud Functions to lekkie, asynchroniczne rozwiązanie obliczeniowe oparte na zdarzeniach, które umożliwia tworzenie niewielkich funkcji jednozadaniowych, które reagują na zdarzenia bez konieczności zarządzania serwerem lub środowiskiem wykonawczym. Tych funkcji można używać do transkodowania filmów, klasyfikowania obrazów z wykorzystaniem systemów uczących się czy synchronizowania metadanych z Bazą danych czasu rzeczywistego Firebase. Mając jeszcze mniejsze narzuty niż w przypadku App Engine, Cloud Functions to najszybszy sposób reagowania na zmiany w Cloud Storage.

Google Cloud Vision API

Interfejs Google Cloud Vision API umożliwia programistom zrozumienie zawartości obrazu dzięki umieszczaniu w łatwym w obsłudze interfejsu API zaawansowanych modeli systemów uczących się. Szybko klasyfikuje obrazy w tysiące kategorii, wykrywa na zdjęciach poszczególne obiekty i twarze, wyszukuje i odczytuje wydrukowane słowa zawarte w obrazach, rozpoznaje obraźliwe treści, a nawet analizuje nastroje dotyczące obrazów.

Google Cloud Speech API

Podobnie jak Vision API, Google Cloud Speech API pozwala programistom na wyodrębnianie tekstu z pliku audio zapisanego w Cloud Storage. Ten interfejs API rozpoznaje ponad 80 języków i wariantów, aby sprostać oczekiwaniom użytkowników z całego świata. W połączeniu z interfejsem Google Cloud Natural Language API deweloperzy mogą wyodrębnić nieprzetworzony tekst i określić jego znaczenie. A jeśli potrzebna jest grupa odbiorców z całego świata, połącz ją z interfejsem Google Translate API, aby tłumaczyć tekst na ponad 90 języków.