share facebook facebook2 twitter menu hatena pocket slack

2015.12.07 MON

ラムダこりゃ(Amazon Lambda チュートリアル 3)〜 Lambda 「だけで」 Twitter につぶやかせる 〜

川原 洋平

WRITTEN BY川原 洋平

おはげようございます。

追記

5 分ごとに処理をさせたい場合には以下のように設定するのが一番簡単だった。

20151010185344

最初からこの設定でやっておけば良かった…。

tl;dr

これまた re:Invent 2015 にて Lambda で Scheduled Events という機能をサポートとの発表があった。

aws.typepad.com

この Scheduled Event というのは個人的解釈でざっくり言うとクーロン、そう、Cron 。つまり、従来 Lambda は SNS や S3 や CloudWatch Logs 等のイベントを検知して Lambda Function が実行されていたものが、Lambda 内のスケジュールでも Function が実行出来るようになったということ!(なんだなという認識)

ためそ

教材

github.com

スケジューリング

今回、重要になるのは Scheduled Event の設定。例えば、5 分毎に Function を実行させたい場合には以下のように設定する。

20151010095510

Schedule expression には Cron フォーマットで記載することが出来るとのことなので、当初は敢えて以下のように記述してみたが…

cron(*/5 * * * * )

これだと…なぜかエラーが出てしまう…試行錯誤した結果、以下のように記述することで 5 分毎の実行が可能となった。

cron(*/5 * * * * ?)

6 番目の「?」は「年」を表現しているようで、この場合には「2015」が入るようだ。

トゥイート

20151010100223

おお、Lambda だけでトゥイート出来てる。

ログも確認してみる。

20151010100556

で、なんぼ?

ドキュメントによるとambda のコスト計算をざっくり纏めると以下の要素で計算を行う。

  • リクエスト数
  • 処理に掛かった時間
  • 無料枠(Lambda 関数に割り当てたメモリ量によって無料利用枠で実行できる時間が異なる)

例えば、5 分ごとのツイートを 128MB メモリ量で 1 ヶ月間行った場合には以下のような計算式になる(と思われる)。

  • 24 時間 x 60 分 = 1440 分
  • 1440 分 ÷ 5 分毎 = 288 回(リクエスト)/day
  • 288 リクエスト/day ✕ 30 日 = 8640 回(リクエスト)
  • 1 回のファンクションの処理に 10 秒掛かると想定して 8640 リクエスト✕ 10 秒 = 86400 秒

128 メモリ量で無料枠で実行可能なリクエスト数は 3,200,000 秒なので無料枠内で収まる…はず。

ということで…

  • ちょっとしたサービスなら Lambda だけで運用出来てしまいそうな気がした
  • crontab フォーマットっぽい書き方が出来るのは解りやすいので嬉しい(但し、6 桁だったりしたのが戸惑った)
  • 次は Python で Function 作ってみたいなあ

以上。

元記事はこちら

ラムダこりゃ(Amazon Lambda チュートリアル 3)〜 Lambda 「だけで」 Twitter につぶやかせる 〜