作っているもの: http://billboard-tv.tk/
github: https://github.com/abeyuya/billboard-tv-serverless2
serverlessとかreactに興味があったので、土日とかに勉強がてら、billboard-tvというWebサイトをちまちま作っています。
今まで趣味プログラミングのコードを公開してなかったけど、公開した方がいろいろ良いよなぁ、と思い公開してみた。
その解説の記事です。
(だらだらと感想文みたいになってしまいました...)
一人でやるよりも誰かの目に晒した方がやる気が出るかもしれないしね!
react編: http://qiita.com/abeyuya/items/64dde6c6dd117fc29217
serverless
serverlessってのはこれ https://github.com/serverless/serverless
現状、serverlessでは定期的にビルボードのランキング情報を取得して、整形したjsonをS3に吐く処理をしている。
フロント側はReact.jsで書いていて、静的ファイルをS3で配信している。
フロント側からはこのjsonを取りに行くようになっている。
serverless使っているけどAPIGatewayは現状使っていなくて、ただlambdaファンクションを便利にデプロイするのに使っている感じ。
料金的にはlambdaの課金のみで、今回みたいに細々使うだけなら無料枠に収まる。
どうやらEC2のしょぼいマシン1ヶ月分くらいのリソースは無料枠っぽいので、趣味レベルWebサイトならガンガン使っても無料枠に収まりそうな気がする。
lambdaファンクションの定期実行
週に1度スクレイピングをしたくて、スケジューリングを設定している。
本当はserverlessでcron設定をちょろっと書いて、デプロイコマンド叩くと反映されるみたいなことがやりたかった。
けど、どうやら現状ではAWS側にそもそもlambdaのスケジューリングのAPIが無いらしく、serverlessからそういったことはできなかった。
なので、ログインして管理画面からぽちぽち設定した。
できるようになりました!
便利!
参考: http://docs.serverless.com/docs/function-configuration#section-event-sources-configurations
serverlessの苦労話
最初見つけた時はjaws-frameworkという名前だった。
インストールして少し触ってて、次の週になったら名前が変わっていてびっくりした。
開発中もすごい勢いでバージョンアップしていて、合わせてちょこちょこアップデートしていた。
まだ当面はこんな感じが続くんじゃないだろうか。
実プロダクトで導入するには結構勇気がいりそう。
あと、serverlessでやり始めて一番苦労したのはエラーログを見つけるところだった。
- ローカルだと動くのにデプロイすると動かない
- 管理画面見てても、console.logの出力とかどこにも無い
- デプロイ後のログは見れないと思ってた
- 途中でClowdWatchで見れることを知って歓喜
lambdaサイコーじゃないか
今回のような要件にはlambda非常にマッチするなと思った!
週に1回しか動かない処理なので、そのためにEC2起動するのはもったいない。
lambdaはイベントドリブンな面の活用をよく見かけるけど、今回みたいなバッチ処理的なやつも非常に相性が良いなぁと思った。
あとは、今回みたいにほぼ静的なWebサイトなんだけど、一部だけ動的な部分があるサイトとかも結構相性が良いと思った。
例1 ランディングページ
ランディングページ的なWebサイトだとメール登録した後の「ご登録ありがとうございました!」というメール送信のためだけにサーバやDBが必要になるので、そこだけlambdaとDynamoDBで作るとか良さそう。
そうすると、フロント側は全部middlemanとかで書けて、サーバの管理を一切しなくて良くなる。
サーバを持つとすごく面倒くさい。それが解消されるのがすごく良い。
サーバを持つと、
yum installとかして、
ユーザー作ったりldapセットアップしたり、
監視のためにzabbixいれたりClowdwatchの設定をしたり
する。
本当に面倒くさい。
chefのレシピとかが整備されていれば楽になるかもしれないけど、それもでなんだかんだ面倒くさい。
新規の小さなWebサイトをぽこぽこ出すような環境だと本当に面倒くさい。
しかも定額お金かかる。
負荷やばそうならスケールアウトしないといけない。
lambdaサイコー!!!!!!!!!!!!!!
例2 問い合わせページ
上記とほとんど一緒だけど、静的なWebサイトでも問い合わせページが必要になると、それだけで何かしらバックエンド処理が必要でサーバが必要になる。
lambdaでやれそう
lambdaサイコー!!!!!!!!!!!!!!
例3 ランキングページ
そんなに作ることないだろうけど、今回みたいな定期的にランキング更新するだけのWebサイトも相性良い。
例4 Twitter認証が必要な静的Web
静的Webだからサーバサイドの環境とか一切用意してないけど、
Twitter認証の機能が必要になった場合とかに使える。
参考: http://qiita.com/abeyuya/items/3aade1b3f359a941c22c
という訳で、lambdaは結構使いドコロがあるなぁと感じている。
serverlessは仕事とかで使うにはまだ厳しい印象だけど、lambdaは積極的に活用してサーバレスなインフラの恩恵を預かりたい。
今この記事を書いてて、lambdaの良いところはイベントドリブンでなんたらとかパフォーマンスがどうたらじゃなくて、インフラの面倒を見なくて良い「フルマネージド」なところだなぁと思った。
自分にとっては。
lambdaサイコー!!!!!!!!!!!