Cloud Storage の使用

PHP 5 アプリで実行時にファイルを読み書きする、またはムービー、画像などの静的コンテンツを提供する必要がある場合は、Cloud Storage バケットの使用をおすすめします。

アプリを作成すると、App Engine がデフォルトのバケットを作成します。このバケットでは、ストレージの最初の 5 GB が無料で提供され、Cloud Storage I/O オペレーションの無料の割り当ても用意されています。別の Cloud Storage バケットを作成することもできますが、無料の 5 GB ストレージが用意されているのは、デフォルトのバケットのみです。

App Engine での Cloud Storage の使用

App Engine アプリから Cloud Storage バケットを使用するには:

  1. App Engine プロジェクトで既存のバケットの名前を確認します。Cloud Storage との間でデータをアップロードまたはダウンロードするときに、この名前を指定します。

    Cloud Storage バケットの名前をアプリにハード コーディングするのではなく、アプリの環境変数に保存することをおすすめします。

  2. アプリで Cloud Storage を依存関係として宣言するには、google/cloud-storage をアプリの composer.json ファイルに追加し、アプリのディレクトリから composer install を実行します。詳しくは、Composer をご覧ください。

  3. ストリーム ラッパーとしてアプリに Google\Cloud\Storage\StorageClient を登録してください。次に、gs プロトコルを使用して、ファイルを読み書きします。

    ストリーム ラッパーの登録と使用例をご覧ください。

    代わりに、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 の価格表に従って課金されることに注意してください。