LoginSignup
2
0

More than 5 years have passed since last update.

serverlessとlambdaで時刻に正確なbotをパッと作る

Posted at

表題の通りです。

なんで今更自前でbot作るんだよ

最近はある程度の定型発言をするだけなら便利なサービスがあります。

私の大好きなbotの一つである田舎の昼のサイレンbotもtwittbotを利用して運用されています。

ですが上記のサイレンbotはサイレンという ちょうど を伝えるべきであるのに大体は12:04くらいにサイレンが鳴ります(多分サーバの時計が微妙にずれてるとかだとは思います)。このことが許せないので自分で12時ちょうどに発言するbotを作りました。
(サイレンbot自体は大好きです、大切なことなので二度言います)

成果物

同じサイレンじゃつまらないかなと思ったので別のを作りました。12時に鳴くルビィちゃんbot @noon_pigii_bot です。12時ちょうどにピギィと鳴きます。多少のズレは許してください。

ルビィちゃんかわいいですよね。

ソースも置いておきます。
https://github.com/celeron1ghz/twitter-bot-pigii

実装

最近の世の中は便利で、こういうちょっとしたスクリプトを動かすのに良いlambdaと言うサービスがありますのでちゃっちゃと作ります。

serverless

ちょっと前に正式版になった serverless を使います。
使い方はほんと簡単で

  1. Administrator Access権限があるユーザのkeyとsecretを ~/.aws/credentials なり .envrc なりに設定する
  2. sls create -t aws-nodejs
  3. sls deploy

だけでHello Worldは動いてしまいます。すごい。ほんとロジックを書くことに集中できる感じです。
設定に書けばscheduled eventも設定してくれる、ちょうべんり。

scheduled eventがズレる問題

今回悩んだのはscheduled eventは指定時間ちょうどに発火してくれることを保証していないということです。なので2分前に起動してちょうどになるまでsleepするという泥臭い方法を取りました。今のところはscheduled eventsの発火は遅れても1分くらいなので大丈夫かなという感じですが、lambdaはタイムアウトの最大が5分なので遅れが広がるようなら要調整。まぁ詳しくはソースをみてください。

忘れちゃいけないのはscheduled eventsの時刻はUTCなのでcronの指定は9時間ずらすことくらいでしょうか。

まとめ

lambdaは月ごとに無料枠が湧いてくるサービスなので、serverlessも便利ですし、もっとこういうクソみたいなコードをたくさん書くべきだと思います。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0