Интеграция с Google Cloud

Cloud Storage for Firebase тесно интегрирован с Google Cloud . Пакеты Firebase SDK для Cloud Storage хранят файлы непосредственно в сегментах Google Cloud Storage . По мере роста вашего приложения вы можете интегрировать другие Google Cloud , например управляемые вычисления, такие как App Engine или Cloud Functions, или API машинного обучения, такие как Cloud Vision или Google Translate. .

Проект Firebase на самом деле представляет собой просто проект Google Cloud , для которого включены дополнительные конфигурации и сервисы, специфичные для Firebase . Это означает, что каждый сегмент Cloud Storage , который вы используете с Cloud Storage for Firebase доступен в Google Cloud (включая его консоль и API).

Для интеграции с Google Cloud , включая импорт существующих сегментов Cloud Storage , требуется проект Firebase с тарифным планом Blaze с оплатой по мере использования .

Рекомендации по учетным записям служб

Firebase использует учетные записи сервисов Google Cloud для работы и управления сервисами без раскрытия учетных данных пользователя. Когда вы создаете проект Firebase, использующий Cloud Storage , вы можете заметить, что в вашем проекте уже доступна соответствующая учетная запись службы: service- PROJECT_NUMBER @gcp-sa-firebasestorage.iam.gserviceaccount.com . Дополнительную информацию см. в разделе Обзор учетных записей служб Firebase .

Google Cloud Storage

Вы можете использовать API-интерфейсы Google Cloud Storage для доступа к файлам, загруженным через Firebase SDK для Cloud Storage , особенно для выполнения более сложных операций, таких как копирование или перемещение файла или перечисление всех файлов, доступных по ссылке.

Важно отметить, что в этих запросах используются параметры контроля доступа Google Cloud Storage , а не Firebase Authentication и Cloud Storage Security Rules .

API

Помимо Firebase SDK для Cloud Storage , существует ряд других способов доступа к данным, хранящимся в вашей корзине Cloud Storage , в зависимости от того, что вы хотите сделать. Если вы получаете доступ к данным на сервере, мы предлагаем серверные библиотеки, а также XML RESTful API, совместимый с JSON и S3. Если вам нужно внести изменения в сценарий или выполнить другие административные задачи, у нас есть инструмент командной строки, который пригодится.

SDK сервера Google Cloud

Google Cloud предлагает высококачественные серверные SDK для ряда облачных продуктов, включая Cloud Storage . Эти библиотеки доступны в Node.js , Java , go , Python , PHP и Ruby .

Для получения дополнительной информации, включая инструкции по установке, аутентификации и устранению неполадок, обратитесь к документации по конкретной платформе, указанной выше.

Пример использования 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) {});
    

Ява

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

Идти

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

Питон

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

Руби

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

ОТДЫХ API

Если вы используете язык без клиентской библиотеки, хотите сделать что-то, чего не делают клиентские библиотеки, или просто у вас есть любимый HTTP-клиент, который вы предпочитаете использовать, Google Cloud Storage предлагает API как для JSON , так и для XML. .

В дополнение к этим API доступа к данным хранилища для управления сегментами Cloud Storage для использования в проектах Firebase вы можете использовать Cloud Storage for Firebase API .

gsutil

gsutil — это инструмент командной строки, который дает вам прямой доступ к Cloud Storage . Вы можете использовать gsutil для выполнения широкого спектра задач по управлению сегментами и объектами, в том числе:

  • Загрузка, скачивание и удаление объектов.
  • Перечисление сегментов и объектов.
  • Перемещение, копирование и переименование объектов.
  • Редактирование списков ACL для объектов и сегментов.

gsutil позволяет выполнять другие расширенные операции, такие как перемещение файлов из одного каталога в другой или удаление всех файлов ниже определенного местоположения.

Переместить все файлы из одной ссылки в другую так же просто, как:

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

Пакетное удаление всех файлов ниже ссылки также интуитивно понятно:

# 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

Запросить тарифы

Google Cloud Storage — это хорошо масштабируемый сервис, использующий технологию автоматического масштабирования для достижения очень высокой частоты запросов.

Google Cloud Storage — это мультиарендная служба, то есть пользователи используют один и тот же набор базовых ресурсов. Чтобы наилучшим образом использовать эти общие ресурсы, сегменты имеют начальную емкость ввода-вывода.

Планируя интегрировать Cloud Storage for Firebase в свое приложение, подумайте о минимальной частоте запросов, необходимой вашему приложению для хорошей производительности, и об эффективности выполнения запросов. Ознакомьтесь с рекомендациями по количеству запросов и особенно по увеличению количества запросов .

Управление версиями объектов

Вы когда-нибудь удаляли что-то случайно и не имели резервной копии? Google Cloud Storage поддерживает управление версиями объектов , что обеспечивает автоматическое резервное копирование данных и восстановление из этих резервных копий. Вы можете включить управление версиями объектов с помощью команды gsutil versioning set :

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

Cloud Storage всегда выбирает самую последнюю версию, поэтому, если вы хотите восстановить объект, вам нужно использовать один из других API или инструментов, указанных выше, чтобы установить нужный объект как самую последнюю версию.

Управление жизненным циклом объекта

Возможность автоматического архивирования или удаления устаревших файлов является полезной функцией для многих приложений. К счастью, Google Cloud Storage обеспечивает управление жизненным циклом объектов , которое позволяет удалять или архивировать объекты через определенное время.

Рассмотрим приложение для обмена фотографиями, в котором вы хотите, чтобы все фотографии были удалены в течение одного дня. Вы можете настроить политику жизненного цикла объекта следующим образом:

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

И разверните его с помощью команды gsutil lifecycle set :

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

Обратите внимание, что это относится ко всем файлам в сегменте, поэтому, если вы храните важные пользовательские резервные копии, которые хотите хранить в течение длительного времени, вместе с фотографиями, которые вы хотите удалять ежедневно, вы можете использовать два отдельных сегмента или выполнять удаление вручную. с помощью gsutil или вашего собственного сервера.

Облачные функции Google (бета-версия)

Google Cloud Functions — это легкое асинхронное вычислительное решение на основе событий, которое позволяет создавать небольшие одноцелевые функции, которые реагируют на события без необходимости управлять сервером или средой выполнения. Эти функции можно использовать для перекодирования видео, классификации изображений с помощью машинного обучения или синхронизации метаданных с Firebase Realtime Database . Облачные функции обеспечивают еще меньшие накладные расходы, чем App Engine , и представляют собой самый быстрый способ реагировать на изменения в Cloud Storage .

API Google Cloud Vision

API Google Cloud Vision позволяет разработчикам понимать содержимое изображения, инкапсулируя мощные модели машинного обучения в простой в использовании API. Он быстро классифицирует изображения по тысячам категорий, обнаруживает отдельные объекты и лица на изображениях, находит и считывает печатные слова, содержащиеся в изображениях, идентифицирует оскорбительный контент и даже обеспечивает анализ настроения изображений.

API облачной речи Google

Подобно Vision API, Google Cloud Speech API позволяет разработчикам извлекать текст из аудиофайла, хранящегося в Cloud Storage . API распознает более 80 языков и их вариантов для поддержки вашей глобальной базы пользователей. В сочетании с API Google Cloud Natural Language разработчики могут как извлекать необработанный текст, так и определять его значение. А если требуется глобальная аудитория, добавьте к этому API Google Translate , чтобы перевести текст на более чем 90 языков.

Google App Engine

Google App Engine — это «платформа как услуга», которая автоматически масштабирует внутреннюю логику в зависимости от объема получаемого трафика. Просто загрузите свой серверный код, и Google будет управлять доступностью вашего приложения; у вас нет серверов, которые вы могли бы предоставлять или обслуживать. App Engine — это быстрый и простой способ добавить дополнительную вычислительную мощность или надежное выполнение к вашему приложению Firebase.

Если у вас есть сегмент Cloud Storage по умолчанию с форматом имени PROJECT_ID .appspot.com , он автоматически будет доступен приложению App Engine в вашем проекте. Это означает, что если вы создаете приложение App Engine , вы можете использовать встроенные API App Engine для обмена данными между этим сегментом и App Engine . Это полезно для кодирования звука, транскодирования видео и преобразования изображений, а также для другой фоновой обработки, требующей больших вычислений.

Стандартные среды Java, Python и Go для App Engine включают API изображений App Engine ( Java | Python | Go ), который может изменять размер, вращать, переворачивать и обрезать изображение, а также возвращать URL-адрес обслуживания изображения, который позволяет трансформации на стороне клиента, аналогичные Cloudinary и Imgix.

При импорте существующего проекта Google Cloud в Firebase, если вы хотите сделать какие-либо существующие объекты App Engine доступными в Firebase, вам необходимо установить контроль доступа по умолчанию для ваших объектов, чтобы Firebase мог получить к ним доступ, выполнив следующую команду с помощью gsutil :

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

Рекомендации по Firebase Security Rules и файлам App Engine

Если у вас есть сегмент Cloud Storage по умолчанию с форматом имени *.appspot.com , то в вашем проекте также есть приложение App Engine , которое использует этот сегмент.

Если вы настроите Firebase Security Rules для публичного (неаутентифицированного) доступа , вы также сделаете общедоступными вновь загруженные файлы App Engine .

Известные проблемы с Cloud Storage и App Engine

Известны два случая, когда вы не можете импортировать приложение App Engine :

  1. Проект содержит бывшее приложение App Engine Datastore Master/Slave.
  2. Проект имеет идентификатор проекта с префиксом домена, например: domain.com:project-1234 .

В любом из этих случаев проект не будет поддерживать Cloud Storage for Firebase , и вам следует создать новый проект Firebase, чтобы использовать Cloud Storage . Свяжитесь со службой поддержки , чтобы мы могли вам помочь.