Firebase は Google Cloud サービス アカウントを使用して、ユーザー認証情報を共有せずにサービスを操作および管理します。 Cloud Storage を使用する Firebase プロジェクトを作成すると、対応するサービス アカウントがすでにプロジェクトで使用可能になっていることに気付くかもしれません: service-<project number>@gcp-sa-firebasestorage.iam.gserviceaccount.com
。詳細については、このFirebase サポート ガイドを参照してください。
内部では、Cloud Storage 用の Firebase SDK は、 App Engineの無料層のデフォルト バケットを使用します。これにより、クレジット カードを入力したり、Cloud 請求先アカウントを有効にしたりすることなく、Cloud Storage をすばやく起動して実行できます。また、Firebase と Google Cloud プロジェクトの間でデータを簡単に共有できます。
既存の Cloud Storage バケットのインポートを含む Google Cloud との統合には、Blaze プランの Firebase プロジェクトが必要です。プランの詳細については、料金ページをご覧ください。
Google クラウド ストレージ
Google Cloud Storage APIを使用して、Cloud Storage 用の Firebase SDK 経由でアップロードされたファイルにアクセスできます。特に、ファイルのコピーや移動、リファレンスで利用可能なすべてのファイルの一覧表示など、より複雑な操作を実行できます。
これらのリクエストでは、Firebase Authentication や Cloud Storage セキュリティ ルールではなく、Google Cloud Storageアクセス コントロール オプションを使用することに注意してください。
API
Cloud Storage 用の Firebase SDK に加えて、目的に応じて、Cloud Storage バケットに保存されているデータにアクセスする方法が他にもいくつかあります。サーバー上のデータにアクセスしている場合、 JSON
および S3 と互換性のあるXML
RESTful API だけでなく、サーバー側のライブラリも提供しています。また、スクリプトの変更やその他の管理タスクを実行する必要がある場合は、コマンド ライン ツールを使用できます。重宝します。
Google Cloud サーバー SDK
Google Cloud は、Cloud Storage を含む多数のクラウド プロダクト向けに高品質のサーバー SDK を提供しています。これらのライブラリは、 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 はJSONとXMLの両方の API を提供します。 .
これらのストレージ データ アクセス API に加えて、Firebase プロジェクトで使用する Cloud Storage バケットを管理するには、 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 はマルチテナント サービスです。つまり、ユーザーは基盤となるリソースの同じセットを共有します。これらの共有リソースを最大限に活用するために、バケットには初期 IO 容量があります。
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 にはオブジェクト ライフサイクル管理が用意されており、一定の時間が経過するとオブジェクトを削除またはアーカイブできます。
すべての写真を 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
または独自のサーバーを使用します。
App Engine
App Engine は、受信したトラフィックの量に応じてバックエンド ロジックを自動的にスケーリングする「Platform as a Service」です。バックエンド コードをアップロードするだけで、Google がアプリの可用性を管理します。プロビジョニングまたは保守するサーバーはありません。 App Engine は、追加の処理能力または信頼できる実行を Firebase アプリケーションに追加するための迅速かつ簡単な方法です。
Cloud Storage 用の Firebase SDK は App Engine のデフォルト バケットを使用します。つまり、App Engine アプリを構築する場合、組み込みの App Engine API を使用して Firebase と App Engine の間でデータを共有できます。これは、オーディオのエンコード、ビデオのトランスコーディング、画像の変換、およびその他の計算集約型のバックグラウンド処理を実行するのに役立ちます。
App Engine の Java、Python、および goスタンダード環境には、App Engine Images API ( Java 、 Python 、画像のサイズ変更、回転、反転、切り抜きができるほか、クライアント側の変換を可能にする画像提供 URL を返すことができる) が含まれています。 、Cloudinary と Imgix に似ています。
既存の Google Cloud プロジェクトを Firebase にインポートするときに、既存の App Engine オブジェクトを Firebase で使用できるようにする場合は、オブジェクトにデフォルトのアクセス制御を設定して、 gsutil
を使用して次のコマンドを実行し、Firebase がオブジェクトにアクセスできるようにする必要があります。 :
gsutil -m acl ch -r -u service-<project number;gt@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://<your-cloud-storage-bucket>
既知の問題点
App Engine アプリをインポートできない既知のケースが 2 つあります。
- プロジェクトには、以前の App Engine Datastore マスター/スレーブ アプリが含まれています。
- プロジェクトには、
domain.com:project-1234
のように、プロジェクト ID のプレフィックスが付いたドメインがあります。
いずれの場合も、プロジェクトは Cloud Storage for Firebase をサポートしないため、Cloud Storage を使用するには新しい Firebase プロジェクトを作成する必要があります。サポートにお問い合わせください。
Google Cloud Functions(ベータ版)
Google Cloud Functionsは軽量でイベントベースの非同期コンピューティング ソリューションであり、サーバーやランタイム環境を管理する必要なく、イベントに応答する小さな単一目的の関数を作成できます。これらの関数は、動画のコード変換、機械学習を使用した画像の分類、Firebase Realtime Database とのメタデータの同期に使用できます。 App Engine よりもオーバーヘッドが少ない Cloud Functions は、Cloud Storage の変更に対応する最速の方法です。
Google クラウド ビジョン 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 以上の言語に翻訳します。