動機
これまで名言Botを自鯖で運用してきたのですが、こいつが電気代をだいぶ食うのでなんとかならないかなあと思っていました。
そんな折、Google App Engineがcronのサポートを始めたので、電気代がかかりかつうるさい自鯖を停めるいいきっかけになりました。
方法
名言Botは実行スクリプトとして書いたPythonスクリプトをcronで叩いていただけなので、これをGoogle App Engineで叩けるように変更すればよい。
アプリケーションの作成
最初に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のマッピングを行います。
- app.yaml
application: myapp version: 1 runtime: python api_version: 1 handlers: - url: /hoge/.* script: main.py
つづいてcronの設定。
- cron.yaml
cron: - description: hoge cron job url: /hoge/ schedule: every 30 minutes
アプリケーションのアップロード
以上ができたら早速デプロイ。
appcfg.py upload myapp
まとめ
とっても簡単にcronをGoogle App Engineに任せられます。これでBotを自鯖に置かなくてもいいですね。どんどんGAEに移行していこうと思います。