概要
Slackを盛り上げようと思って、定期的に記事の新着情報をSlackに流したい。
ただサーバは持ちたくない。コストかかるし。
サーバレスでコスト安くうまくできないかなーと思って考えた。
利用ツール
- AWS CloudWatch
- 定期的にlambdaのスクリプトを呼び出す
- AWS Lambda
- CloudWatchで呼び出される
- 主な処理部
- pythonで実装
- AWS DynamoDB
- 過去のスクレイピング情報の保管
- PynamoDBを利用
- lambda_uploader
- ワンクリックデプロイを実現!
処理フロー
- AWS CloudWatch
- Lambdaの処理を呼び出す
- AWS Lambda
- 過去のスクレイピングデータをDynamoDBから取得
- 現ページに記載されている情報をスクレイピング
- 過去登録されているかどうかを比較
- 登録されていないデータをDynamoDBへ登録
- 登録されたデータをSlackへ通知
まとめ
詳しくはリポジトリ参照ください。
https://github.com/tashua314/fun_slack_lambda
TODO
- モデル周りがこれだけだとわかりにくいかも。もうちょっとドキュメント周り調整する。
所管
ありがちなフローな気がするけど同じ構成で全て通して作ってる人の記事があまりなかった。
NoSQLをまだあまり使ってないので使用方法がこなれてない感にやきもきで思ったより時間かかってしまった。
hash_keyとかrange_keyとかの概念をようやく掴めてきた。
複数のサイトのスクレイピングにも対応できるよう作ったつもりだが、いけそうかな・・?
CloudWatchを今までログ確認用としか使ってなかったけど、cronのようなスケジューラとしても使えるんじゃん。
活用の幅が広がりそう。
コストを考えたらDynamoさんじゃなくてスプレッドシートをDB代わりにしてもまぁできたっちゃできたが、後悔はしていない。
今回のDynamoDBの使い方としては微妙な気もする。
一応記事データ溜め込んでるけど、そういうのじゃなくて、
「状態管理」的な方が使い方としては的確な気がする。
クエリの作成がRDBMSより自由度が無いし。
今回でいうと、溜め込んでる分ってあまり意味がなくて、
「最後に取り込んだデータ」が何かさえわかれば正常に稼働する。