読者です 読者をやめる 読者になる 読者になる

YAMAGUCHI::weblog

土足で窓から失礼いたします。今日からあなたの息子になります。 当年とって92歳、下町の発明王、エジソンです。

名言BotをGoogle App Engineに移行した

Python WebService

動機

これまで名言Bot自鯖で運用してきたのですが、こいつが電気代をだいぶ食うのでなんとかならないかなあと思っていました。

そんな折、Google App Engineがcronのサポートを始めたので、電気代がかかりかつうるさい自鯖を停めるいいきっかけになりました。

方法

名言Botは実行スクリプトとして書いたPythonスクリプトをcronで叩いていただけなので、これをGoogle App Engineで叩けるように変更すればよい。

アプリケーションの登録

まずアプリケーションの登録をします。(要Google App Engineアカウント)

f:id:ymotongpoo:20090501001738p:image

アプリケーションの作成

最初にSDKをダウンロードして各プラットフォームごとに設定をします。

それが終わったら早速プロジェクトを作成。

$ dev_appserver.py myapp

これによってmyappというディレクトリとmain.py, index.yaml, app.yamlといったファイルが作成されます。このmain.pyの中にあるmainメソッドでこれまでcronに叩かせていたPythonスクリプトのmainメソッドを呼ぶようにします。
元のファイルをhoge.pyだったとすると、元のmainメソッドをprocessとか名前を変更して、

import wsgiref.handlers
from hoge import Hoge # 追加

from google.appengine.ext import webapp

class MainHandler(webapp.RequestHandler):

  def get(self):
    h = Hoge() # 追加
    h.process() # 追加
    self.response.out.write('task finished')

def main():
  application = webapp.WSGIApplication([('/', MainHandler)],
                                       debug=True)
  wsgiref.handlers.CGIHandler().run(application)


if __name__ == '__main__':
  main()

こんな感じでたった3行追加するだけ。楽ちん。

YAMLの設定

あとはこのスクリプトとURLのマッピングを行います。

application: myapp
version: 1
runtime: python
api_version: 1

handlers:
- url: /hoge/.*
  script: main.py

つづいてcronの設定。

cron:
- description: hoge cron job
  url: /hoge/
  schedule: every 30 minutes
アプリケーションのアップロード

以上ができたら早速デプロイ。

appcfg.py upload myapp
cron情報

実際にcronが行われているかどうかはGoogle App EngineのDashboardで確認できます。
f:id:ymotongpoo:20090501003139p:image

まとめ

とっても簡単にcronをGoogle App Engineに任せられます。これでBot自鯖に置かなくてもいいですね。どんどんGAEに移行していこうと思います。