アプリで実行時にファイルを読み書きしたり、動画やイメージなどの静的コンテンツを提供したりする必要がある場合は、Cloud Storage バケットの使用をおすすめします。
アプリを作成すると、App Engine がデフォルトのバケットを作成します。このバケットでは、ストレージの最初の 5 GB が無料で提供され、Cloud Storage I/O オペレーションの無料の割り当ても用意されています。別の Cloud Storage バケットを作成することもできますが、無料の 5 GB ストレージが用意されているのは、デフォルトのバケットのみです。
App Engine での Cloud Storage の使用
App Engine アプリから Cloud Storage バケットを使用するには:
App Engine プロジェクトで既存のバケットの名前を確認します。Cloud Storage との間でデータをアップロードまたはダウンロードするときに、この名前を指定します。
Cloud Storage バケットの名前をアプリケーションにハード コーディングするのではなく、アプリケーションの環境変数に保存することをおすすめします。
アプリで Cloud Storage を依存関係として宣言するには、次の手順を実施します。
Go
go get cloud.google.com/go/storage
コマンドを使用します。あるいは、アプリのgo.mod
ファイル内で依存関係を宣言することもできます。詳しくは、依存関係を指定する方法をご覧ください。Google Cloud クライアント ライブラリを使用して、バケットにデータをアップロードまたはバケットからデータをダウンロードします。
静的コンテンツの提供については、静的ファイルの保存と提供をご覧ください。
Java
Google Cloud クライアント ライブラリを使用して、バケットにデータをアップロードまたはバケットからデータをダウンロードします。
静的コンテンツの提供については、静的ファイルの保存と提供をご覧ください。
Node.js
app.yaml
で、GOOGLE_CLOUD_PROJECT
環境値にプロジェクト ID を追加します。GCLOUD_STORAGE_BUCKET
環境値には作成済みの Cloud Storage バケットの名前を設定します。アプリの
package.json
ファイルに@google-cloud/storage
を追加します。詳しくは、依存関係を指定する方法をご覧ください。Google Cloud クライアント ライブラリを使用して、バケットにデータをアップロードまたはバケットからデータをダウンロードします。
静的コンテンツの提供については、静的ファイルの保存と提供をご覧ください。
ローカルでの実行とテストの手順については、
README.md
ファイルをご覧ください。PHP
google/cloud-storage
をアプリのcomposer.json
ファイルに追加し、アプリのディレクトリからcomposer install
を実行します。詳しくは、依存関係を指定する方法をご覧ください。ストリーム ラッパーとしてアプリに
Google\Cloud\Storage\StorageClient
を登録してください。次に、gs
プロトコルを使用して、ファイルを読み書きします。ストリーム ラッパーの登録と使用例をご覧ください。
代わりに、Google Cloud クライアント ライブラリを直接使用することもできます。
Python
アプリの
requirements.txt
ファイルにgoogle-cloud-storage
を追加します。詳しくは、依存関係を指定する方法をご覧ください。Google Cloud クライアント ライブラリを使用して、バケットにデータをアップロードまたはバケットからデータをダウンロードします。
静的コンテンツの提供については、静的ファイルの保存と提供をご覧ください。
Ruby
アプリの
Gemfile
にgoogle-cloud-storage
を追加します。詳しくは、依存関係を指定する方法をご覧ください。Google Cloud クライアント ライブラリを使用して、バケットにデータをアップロードまたはバケットからデータをダウンロードします。
静的コンテンツの提供については、静的ファイルの保存と提供をご覧ください。
デフォルト バケットの使用
アプリを作成すると、App Engine により、最初の 5 GB のストレージを無料で提供するデフォルトのバケットが作成されます。また、デフォルトのバケットには、Cloud Storage I/O オペレーション用の無料の割り当ても含まれています。詳しくは、料金、割り当て、上限をご覧ください。ストレージが 5 GB の上限を超えると課金が開始します。
デフォルト バケットの名前は、
project-id.appspot.comの形式で指定します。
App Engine は、アプリの新しいバージョンをデプロイする際に、一時ストレージに使用するバケットも作成します。staging.project-id.appspot.com
という名前のこのバケットは、App Engine でのみ使用できます。アプリケーションはこのバケットとはやり取りできません。
バケットの権限を設定する
アプリに関連付けるサービス アカウントには、プロジェクトでバケットとの間で読み取りと書き込みをするための権限が必要です。必要な権限については、Cloud Storage に適用される IAM のロールをご覧ください。
多くの場合、アプリに関連付けるサービス アカウントは、デフォルトの App Engine サービス アカウントです。
組織のポリシー構成によっては、デフォルトのサービス アカウントにプロジェクトの編集者のロールが自動的に付与される場合があります。iam.automaticIamGrantsForDefaultServiceAccounts
組織ポリシー制約を適用して、自動的なロール付与を無効にすることを強くおすすめします。2024 年 5 月 3 日以降に組織を作成した場合、この制約はデフォルトで適用されます。
自動ロール付与を無効にする場合、デフォルトのサービス アカウントに付与するロールを決定し、これらのロールを付与する必要があります。
デフォルトのサービス アカウントにすでに編集者ロールが設定されている場合は、編集者ロールを権限の低いロールに置き換えることをおすすめします。サービス アカウントのロールを安全に変更するには、Policy Simulator を使用して変更の影響を確認してから、適切なロールを付与または取り消す操作を行います。
他のユーザー、アプリ、プロジェクトがバケットとその内容にアクセスできるようにする方法については、バケットの権限の設定をご覧ください。
ローカル開発用サーバーでの Cloud Storage の使用
App Engine のローカル開発用サーバーは、Cloud Storage をエミュレートしないため、インターネットを介して、すべての Cloud Storage リクエストを実際の Cloud Storage バケットに送信する必要があります。
料金、割り当て、制限
Cloud Storage への Cloud Storage クライアント ライブラリの呼び出しに関連する帯域幅課金はありません。ただし、オペレーション料金は適用されます。また、ライブラリは URL 取得サービスを使用して Cloud Storage とやり取りするため、呼び出しは URL の取得割り当てに対してカウントされます。
なお、Cloud Storage は従量課金サービスであり、Cloud Storage の価格表に従って課金されることに注意してください。