Google App Engineのリソース割り当てを使いきった場合の処理について
Google App Engine公式ページのドキュメントは日本語化されていない部分が多く、リソース割り当てを使い切った場合の処理についてもその一つです。
これは実行中のコード内からリソースの状態を知るおそらく唯一の方法であるにも関わらず日本語版がないので訳してみました。
原文はQuotas | App Engine Documentation | Google Cloudです。
原文のライセンスはCC BY 3.0です。サンプルコードはApache 2.0 Licenseです。
訳ここから
https://developers.google.com/appengine/docs/quotas#When_a_Resource_is_Depletedリソースが尽きた場合
アプリケーションが割り当てられたリソースを使いきった場合、そのリソースは割り当てが補充されるまで使用できなくなります。これは割り当て補充までアプリケーションが機能しなくなるかもしれないということです。
リクエストの処理を開始するために必要なリソースについては、それらが尽きていた場合、既定でApp Engineはリクエストハンドラを呼び出す代わりにHTTP 403 Forbiddenステータスコードを返します。以下のリソースがこのパターンに該当します。
・Bandwidth, incoming and outgoingヒント:アプリケーションが割り当てを使いきった場合に自作のエラーページを送出するように設定することもできます。詳細はCustom Error Responsesのドキュメントを御覧ください。Python Java
上記以外のすべてのリソースはそれらが尽きていた場合、アプリ内で利用しようとすると例外が発生します。この例外をアプリケーションでキャッチして扱うことでユーザーに対して親切なエラーメッセージを表示するといったことができます。Python APIではこの例外は"apiproxy_errors.OverQuotaError"です。Java APIではこの例外は"com.google.apphosting.api.ApiProxy.OverQuotaException"です。
以下のサンプルはe-mail関連の割り当てが上限を超えていた場合にSendMessage()メソッドによって発生するOverQuotaErrorをキャッチする方法を示しています。
try: mail.SendMessage(to='test@example.com', from='admin@example.com', subject='Test Email', body='Testing') except apiproxy_errors.OverQuotaError, message: # エラーをログ出力 logging.error(message) # ユーザーに対して有益な情報を表示 self.response.out.write('The email could not be sent. ' 'Please try again later.')もしアプリケーションが予想外にシステムリソースを使い切ったのでしたらアプリケーションの性能を分析してみることをお考えください。
あなたのアプリはデフォルトの割り当て上限を超えていますか?もしあなたがプレミアアカウントのお客様でしたらサポートに連絡し追加の割り当てを請求することができます。もしプレミアアカウントでなければMail API割り当ての拡大を申し込むか、それ以外の割り当て上限の拡大のために機能改善リクエストを送ることができます。もしくはGoogleのプレミアアカウントについてご確認いただくこともできます。
訳ここまで
上記のサンプルコードでは書かれていませんが"apiproxy_errors"は"google.appengine.runtime"にあるモジュールなので
from google.appengine.runtime import apiproxy_errors
のようにインポートして使います。
原文のプレミアアカウントうんぬんの話は課金しての上限も使い切った場合の話だと思います。