Google Cloud Platform と統合する

Cloud Storage for Firebase は、Google Cloud Platform と緊密に統合されています。Cloud Storage 用の Firebase SDK は、Google Cloud Storage バケットに直接ファイルを保存します。アプリの成長に合わせて、App Engine や Cloud Functions、Cloud Vision や Google Translate の機械学習 API など、他の Cloud サービスを統合することもできます。

また、Cloud Storage 用 Firebase SDK は、Google App Engine 無料枠にあるデフォルトのバケットを使用します。そのため、クレジット カード番号を入力したり、請求先アカウントを有効にしたりすることなく、Cloud Storage をすばやく起動し、実行することができます。また、Firebase と Google Cloud Platform プロジェクトの間でデータを簡単に共有することもできます。

Google Cloud Platform との統合には、Blaze プラン上の Firebase プロジェクトが必要です。既存の Cloud Storage バケットをインポートする場合にも必要です。プランの詳細については、料金体系ページをご覧ください。

Google Cloud Storage

Google Cloud Storage API を使用すると、Cloud Storage 用の Firebase SDK 経由でアップロードされたファイルにアクセスできます。特に、ファイルのコピーと移動、参照で使用可能なすべてのファイルの列挙など、より複雑な操作を実行できます。

これらのリクエストでは、Firebase Authentication および Storage セキュリティ ルールではなく、Google Cloud Storage ACL またはプロジェクト レベルの IAM が使用されることに注意してください。

API

Cloud Storage 用の Firebase SDK 以外にも、どんな操作が必要かに応じて、Cloud Storage バケットに保存されたデータにアクセスする方法が多数あります。サーバー上のデータにアクセスする場合は、サーバー側のライブラリと JSON および S3 互換の XML RESTful API が提供されます。また、変更をスクリプトで記述したり、他の管理タスクを実行したりする必要があれば、便利なコマンドライン ツールが用意されています。

Google-Cloud Server SDK

Google Cloud Platform は、Google Cloud Storage を含むさまざまな GCP サービスに高品質なサーバー SDK を提供します。これらのライブラリは、Node.jsJavagoPythonPHPRuby で使用できます。インストール手順、認証、およびトラブルシューティングを含む詳細については、リンク先のプラットフォーム固有のドキュメントをご覧ください。

以下に、Google Cloud SDK の使用例を示します。

Node.js

    // Require gcloud
    var gcloud = require('google-cloud');

    // Enable 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 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 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 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 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 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}"
    

REST API

クライアント ライブラリのない言語を使用している場合、クライアント ライブラリでは実現できない機能が必要な場合、または優先的に使用したい好みの HTTP クライアントがある場合は、Cloud Storage に備わっている JSON API と XML 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

オブジェクトのバージョニング

何かを誤って削除して、そのバックアップを取っていなかったという経験はないでしょうか。Cloud Storage のオブジェクト バージョニングは、データのバックアップとバックアップからの復元を自動化します。gsutil versioning set コマンドを使用して、オブジェクト バージョニングを有効にすることができます。

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

Firebase Storage は必ず最新バージョンを扱うため、オブジェクトを復元したい場合には、上記に示した他のいずれかの API またはツールを使用して、必要なオブジェクトを「最新」に設定する必要があります。

オブジェクトのライフサイクル管理

古いファイルを自動的にアーカイブまたは削除する機能があれば、多くのアプリケーションにとって役立ちます。Cloud Storage に備わっているオブジェクトのライフサイクル管理を使用すると、一定時間が経過したオブジェクトを削除またはアーカイブできます。

写真共有アプリケーションで、すべての写真を 1 日以内に削除する必要があるとします。次のようにオブジェクト ライフサイクル ポリシーをセットアップできます。

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

そして、gsutil lifecycle set コマンドを使ってこれをデプロイします。

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

なお、バケット内のすべてのファイルにこれが適用されるため、毎日削除すべき写真と一緒に、長期間残しておきたい重要なユーザー バックアップを保存している場合には、2 つの別個のバケットを使用するか、gsutil または独自のサーバーを使って手動で削除を実行することができます。

Google App Engine

Google App Engine は、受信したトラフィック量に応じてバックエンド ロジックを自動的にスケールする Platform as a Service です。バックエンド コードをアップロードするだけで、Google がアプリの利用可能性を管理するため、サーバーを準備したり、維持したりする必要がありません。App Engine は、Firebase アプリケーションの処理能力や信頼性を高める迅速かつ簡単な方法です。

Cloud Storage 用の Firebase SDK は Google App Engine のデフォルト バケットを使用します。つまり、App Engine アプリをビルドする場合に、組み込み App Engine API を使用して Firebase と App Engine の間でデータを共有できます。これは、自動エンコード、動画のコード変換、画像変換、その他の計算集中型のバックグラウンド処理に役に立ちます。

Google App Engine 向けの Java、Python、go のスタンダード環境には、GAE Images API(JavaPythongo)が含まれています。これを使用すれば、画像のサイズ変更、回転、反転、切り取りに加えて、画像配信 URL を返すことで、Cloudinary や Imgix と同様のクライアント側変換が可能になります。

既存の Google Cloud Platform プロジェクトを Firebase にインポートするとき、既存の App Engine オブジェクトを Firebase で使用可能にするには、オブジェクトのデフォルトのアクセス制御を Firebase からのアクセスを許可する設定にする必要があります。そのためには gsutil を使って次のコマンドを実行します。

gsutil -m acl ch -r -u firebase-storage@system.gserviceaccount.com:O gs://<your-cloud-storage-bucket>

既知の問題

次の 2 つのケースで GAE アプリをインポートできないことがわかっています。

  1. 以前の App Engine Datastore Master/Slave アプリがプロジェクトに含まれている。
  2. ドメインの接頭辞が付いたプロジェクト ID(たとえば domain.com:project-1234)がプロジェクトに設定されている。

いずれの場合も、このプロジェクトは Cloud Storage for Firebase に対応していません。また、Cloud Storage を使用するには、新しい Firebase プロジェクトを作成する必要があります。支援が必要な場合は、サポートに連絡してください。

Google Cloud Functions(ベータ版)

Google Cloud Functions は軽量、イベントベース、かつ非同期のコンピュート ソリューションです。クラウド イベントに応答できる、単一目的の小規模な関数を作成することができます。サーバーやランタイム環境を管理する必要はありません。これらの関数を使用して、動画のコード変換、機械学習を使用した画像の分類、またはメタデータ と Firebase Realtime Database の同期を行うことができます。Google App Engine よりオーバーヘッドが小さい Cloud Functions は、Firebase Storage の変化に対応する最速の方法です。

Google Cloud Vision API

デベロッパーは Google Cloud Vision API を使用して、強力な機械学習モデルを使いやすい API にカプセル化することで、画像の内容を理解できます。画像を数千ものカテゴリに高速で分類し、画像に含まれる個々の物体や顔を検出し、画像内の活字を見つけて読み取り、不快なコンテンツを識別し、画像感情分析を提供することができます。

Google Cloud Speech API

Vision API と同様に、デベロッパーは Google Cloud Speech API を使用して、Cloud Storage に保存された音声ファイルからテキストを抽出できます。この API は 80 を超える言語とその変化形を認識し、グローバルなユーザーベースをサポートします。Google Cloud Natural Language API と組み合わせることにより、デベロッパーは生のテキストを抽出して、そのテキストの意味を推測できます。また、世界中のユーザーを対象とする場合は、これと Google Translate API を組み合わせて、90 を超える言語にテキストを翻訳します。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。