メニュー

2012年5月2日

Google App EngineとGoogle Cloud Storage


Google App EngineとGoogle Cloud Storageが連携できるようにAPIが用意されつつあるので試してみた。

まず、AppEngineからCloudStorageにデータを保存するのは簡単。

files.gs.createしてopenしてwriteするだけ。

こんな感じ:

write_path = files.gs.create(
  filename,
  mime_type='application/octet-stream',
  acl='public-read',
  cache_control='max-age=31536000',
  )
with files.open(write_path, 'a') as fp:
  fp.write(data)

finalizeするまでは追記可能なので、ログをどんどん書き込むといった用途にも使える。


次にImages APIのget_serving_urlで使おうとしたところ、出来なかった。

まず、GSのファイル名からBlobKeyを作成するところまでは出来る。
gs_key = blobstore.create_gs_key(filename)
次に、このBlobKeyをget_serving_urlに渡す。
images.get_serving_url(gs_key)

開発環境だと、get_serving_urlは成功するが、スタブにバグがあって、そのURLへアクセスすると500になる。

プロダクションだとget_serving_urlがInvalidBlobKeyErrorになる。

というわけで今のところPicasa経由での表示は出来ない。

これが使い方の問題なのか、まだget_serving_urlが未対応なのか、どちらかは分からない。


なお、CloudStorage上のオブジェクトに直接アクセスする分には問題ない。


追記:
現時点では、get_serving_urlはGoogle Cloud Storageをサポートしていないそうです。
http://code.google.com/p/googleappengine/issues/detail?id=7441#c2