Go 1.11 アプリで実行時にファイルを読み書きする必要がある場合や、ムービー、画像などの静的コンテンツを提供する必要がある場合は、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 バケットの名前をアプリにハード コーディングするのではなく、アプリの環境変数に保存することをおすすめします。
go get cloud.google.com/go/storage
コマンドを使用することによって、アプリで Cloud Storage を依存関係として宣言します。または、アプリのgo.mod
ファイルで依存関係を宣言することもできます。詳しくは、依存関係を指定する方法をご覧ください。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 の価格表に従って課金されることに注意してください。