2013年5月9日木曜日

26.Google App Engine 1.8.0リリース

このエントリーをはてなブックマークに追加




Google App Engine 1.8.0がリリースされたので変更点を確認しました。
また、最後に「おまけ」としてAppEngineのSDK一般について2点書いています。


先日まで1.7.8 Pre-releaseとされていたものが、
正式リリースでは1.8.0というバージョン番号になったようです。
それもあってか本家のMLでも若干の混乱があった模様。


○関連リンク

SdkForJavaReleaseNotes - googleappengine - Google App Engine Java SDK
SDKダウンロードページ


◯1.8.0変更点

- The Mail API now allows attachments with .zip and .gzip extensions as long as
  the archives do not contain entries with blacklisted extensions.
  http://code.google.com/p/googleappengine/issues/detail?id=5933

Mail APIを使ってメールを送信する際にzipとgzipを添付できるようになった。
ただしzipやgzipの中に「禁止されている拡張子のファイル」を含んでいるとダメ。

「禁止されている拡張子」については以下を参照
Mail Java API Overview - Google App Engine — Google Developers
(「As a security measure to protect against viruses〜」以下)


- New Billing Enabled apps will no longer default to an email quota of 20,000 per day.
  Instead, apps will need to file a request through the admin console to get email quotas increased.

課金が有効なアプリケーションのEmailのQuotaがデフォルトで一日当たり20,000になった。
ただし、
Google Checkoutのアカウントで最初の課金が成功するまではQuotaが「100」という点はこれまで同様。
Quotaを増加したい場合はAdmin Consoleの「Quota Details」ページのリンクからリクエストする必要がある。

MailのQuota
Increasing your Daily Mail Quota

「1.8.0以後に課金設定を有効にしたアプリはそれ以前から課金を有効にしているアプリよりもQuotaが下がる」
と書いてあるようですが、
先ほど試しに新しいアプリを作成して課金を有効にしてみたところ、
従来通りのQuota 「1,771,789」のままでした。
んー、条件がよくわかりません。。
まあ少ない場合は最初の課金を待って、20000で足りなければリクエスト送って増やしてもらう、ということで。


- Admin console dashboard charts and reports for all users have been fully
  migrated to the new, more reliable backend announced in 1.7.6.

 管理コンソールのダッシュボードチャートとレポートが
  1.7.6のタイミングでアナウンスされた、新しい、より信頼性の高いバックエンドに完全に移行された。
  (見た目ではわかりませんでした)


- The maximum size of POST requests made through URLfetch has been increased from 5MB to 10MB.

 URLfetchを通じて行うPOSTリクエストの最大サイズが5MBから10MBに増加された。


- Fixed an interaction issue between the Java MapReduce library and the Files API which causes loss of data.
  If you are using the experimental Java MapReduce library,
  we strongly encourage you to update to the latest version of the library in the public svn:
  https://code.google.com/p/appengine-mapreduce/source/checkout

  JavaのMapReduceライブラリとファイルのAPIの相互作用によって
  データの損失を引き起こす問題を修正しました。
  もしexperimentalなJavaのMapReduceのライブラリを使用している場合は、
  public svnにある最新バージョンのライブラリのにアップデートすることを強く勧めます。


- Fixed an issue with the Mail API to prevent sending mail from a Google Apps mail account that has been suspended.
  https://code.google.com/p/googleappengine/issues/detail?id=6181

  「中断されているGoogle Appsのメールアカウントからのメール送信を防いでいた、
  メールAPIの問題を修正しました。」
  と訳してみたけど、Issueを見ると、
  「これまでは中断されているGoogle Appsのメールアカウントから送信した場合に、
   MailAPIの呼び出しはエラーにならないけど実際にはメールが送信されなかった」
  ↓
  「その場合には"unauthorized sender"を返すようにした」
   って書いてあると思う。


- Fixed an issue that caused Full-Text Search to fail in the Java dev_appserver.
   https://code.google.com/p/googleappengine/issues/detail?id=9088
 
  Java dev_serverで全文検索(Full-Text Search)が失敗する問題を修正した。


- Fixed an issue with Java dev_appserver which caused the AdWords API to not work.
  https://code.google.com/p/googleappengine/issues/detail?id=9213

  Java dev_serverでAdwordsのAPIが動作しない問題を修正した。


- Fixed an issue with the Java SDK jar file being too large for Windows 64.

 Java SDKのjarファイルがWindows64環境で大きすぎる問題を修正しました。
 (1.7.7.1で修正された「jarが大きすぎてWindowsでデプロイが失敗していた」と同じ?)


- Fixed a JAXBPermission.setDatatypeConverter permission issue in Java7 runtime.

 Java7で「JAXBPermission.setDatatypeConverter」のパーミッションの問題を修正しました。



◯おまけ1:Production環境のバージョンとSDKのバージョン

AppEngineのProduction環境(クラウド上の実環境)では常に最新のバージョンが動いています。(今なら「1.8.0」)
言い換えれば、他のクラウド(Windows Azureとか)のように
「Production環境でディベロッパーの指定した古いバージョンで動作させる」ということはできません。

ローカルの開発環境(dev server)では古いSDKを指定して動作させることができますが、
この場合、実際に運用する環境と異なるバージョンのSDKを使って開発・テストしていることになるのであまり良い状態ではありません。
自分の過去の経験上ではこれが原因でトラブルになったことはありませんが、
開発環境のSDKのバージョンはできるだけ最新の状態を維持するのが良いでしょう。

と言っても、
今回もそうだったようにProduction環境のリリースの方がSDKのリリースより先に行われるので
その間は開発環境でテストしたバージョンと異なるバージョンで
Production環境のアプリが動作することにはなるわけですが。

現状この期間に関してはどうすることもできないので、
「少なくとも一つ前のバージョンは正しく動くようにテストしているはず」と信じて、
あまり古くならないように維持するのが現実的なところでしょうか。
でも今後一度でもこれに関連してトラブルが起きたら結構なリスクに感じるようになるんだろうな。。



◯おまけ2:SDK1.7.6以降のdev_server(Java)で出力されるStacktrace

リクエストの度にFINEレベル(log4jなんかのtrace相当)で以下のStacktraceが出力されます。

com.google.appengine.tools.development.DevAppServerServersFilter getCurrentServerInstance
詳細レベル(低): Exception getting server instance
com.google.appengine.api.labs.servers.ServersException: No valid instance id for this instance.
at com.google.appengine.api.labs.servers.ServersServiceImpl.getCurrentInstanceId(ServersServiceImpl.java:75)
at com.google.appengine.tools.development.DevAppServerServersFilter.getCurrentServerInstance(DevAppServerServersFilter.java:210)
.....

「1.7.6 の Changelog にある 'multiple logical sub components' 関係のトレース」らしいですが、
これが出力されていても正常に動作はしているようです。(たぶん)

ただ、表示されると邪魔ですし、コンソールにStacktraceが表示されることに慣れてしまうのも良くないので、
logging.propertiesに一行追加して以下のようにしておきましょう。

.level = FINEST
com.google.appengine.tools.development.level = WARNING




このエントリーをはてなブックマークに追加