Catch up on highlights from Firebase at Google I/O 2023. Learn more

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

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

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

Под капотом Firebase SDK для облачного хранилища используется корзина по умолчанию на бесплатном уровне App Engine . Это позволяет вам быстро приступить к работе с облачным хранилищем без необходимости вводить кредитную карту или активировать учетную запись Cloud Billing. Это также позволяет вам легко обмениваться данными между Firebase и проектом Google Cloud.

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

Облачное хранилище Google

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

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

API

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

SDK облачного сервера Google

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

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

Пример использования Google Cloud Storage SDK показан ниже:

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 — это инструмент командной строки, который дает вам прямой доступ к облачному хранилищу. Вы можете использовать gsutil для выполнения широкого круга задач управления корзинами и объектами, в том числе:

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

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 — это мультитенантная служба, что означает, что пользователи используют один и тот же набор базовых ресурсов. Чтобы наилучшим образом использовать эти общие ресурсы, сегменты имеют начальную емкость ввода-вывода.

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

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

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

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

Облачное хранилище всегда выбирает самую последнюю версию, поэтому, если вы хотите восстановить объект, вам нужно использовать один из других 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 или вашего собственного сервера.

Механизм приложений

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

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

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

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

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

Известные вопросы

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

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

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

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

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

API Google Cloud Vision

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

Google Cloud Speech API

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