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

Cloud Storage для Firebase тесно интегрирован с Google Cloud . Пакеты Firebase SDK для Cloud Storage хранят файлы непосредственно в сегментах 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 Storage без необходимости вводить кредитную карту или включать учетную запись Cloud Billing. Это также позволяет вам легко обмениваться данными между Firebase и проектом Google Cloud.

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

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

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

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

API

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

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

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

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

Стандартные среды Java, Python и go для 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 .

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

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

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

API Google Cloud Vision

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

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

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