Subscribed unsubscribe Subscribe Subscribe

Twitterでふぁぼったものをひたすら試します

「Amazon Web Services クラウドネイティブ・アプリケーション開発技法」を読んでTwitterのbotを作った

botってほどじゃないんだけどね

本について

Amazon Web Services クラウドネイティブ・アプリケーション開発技法 一番大切な知識と技術が身につく (Informatics&IDEA)

Amazon Web Services クラウドネイティブ・アプリケーション開発技法 一番大切な知識と技術が身につく (Informatics&IDEA)

  • 作者: NRIネットコム株式会社,佐々木拓郎,佐藤瞬,石川修,高柳怜士,佐藤雄也,岸本勇貴
  • 出版社/メーカー: SBクリエイティブ
  • 発売日: 2016/04/20
  • メディア: 単行本
  • この商品を含むブログ (1件) を見る

AWSというとやはり秘密鍵公開からの爆死が非常に怖い。Amazonのレビューにもあるとおり、本執筆当時の手順(というかUI)と今のAWSが違うとはいえ、アカウント作成段階のセキュリティ設定からフォローしてくれるのはやはりありがたい。後半は飽きて読んでない一通り読めばAWSの雰囲気もつかめて、多分本番もいける。多分。

本なしじゃAWSむずいじゃん。基本英語だし。怖いし。Qiitaに一通りの手順がまとまった記事があるわけじゃないし。
っていう人にはまあ買ってもいいんじゃないかと思った。サーバの特にセキュリティはわからないから、EC2は怖くて使えないなと思ったけど、EC2以外のサービスを組み合わせれば比較的安全にいけることを学んだ。例題がスマホアプリとNode.js(ただのjavascript程度)だしね。

Twitterといっしょにあそぶ

わたしは毎日のツイートの2番目が必ず「おはようおやすみ」である。起きたと見せかけて2度寝する可能性が非常に高いからである。2番目である理由は特にない。これの自動化を試みる。
面倒なのは、AWSで組み上げることよりも、直近ツイートがその日最初かどうかの判断のほう。3時寝7時起きツイートとか17時頃にその日のツイッタ活動開始とかがありうる。

起床後最初のツイートに「おはようおやすみ」のリプライを送れ!

構成は基本的に↓のパクリ。CloudWatchのところからイベントを作って入力や対象Lambdaのバージョンを指定すれば完璧。
面倒なのでAPI Gatewayは挟まず直接DynamoDBを操作している。

qiita.com

Lambdaで動かすプログラムはなんといってもやはりGradle+Kotlinである。JavaPythonは書いててつまらないので採用を見送った。Mavenxmlがキモいので今後のご活躍をお祈りする。

jarに依存関係のものを全て入れなければならないので、Kotlinやaws-lambda-javaやtwitter4j以外に

jar {
    from {
        configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
    }
}

が必要である。え、必要だよね?

log4jを使うときはsrc/main/resources/log4j.propertiesが必要。→ロギング(Java) - AWS Lambda

料金とか制限とか

そもそものbotの動作として、

  1. CloudWatchに呼ばれる
  2. DynamoDBを読んで今日の「おはようおやすみ」ツイートが終わっているか確認
  3. 終わっていなければTwitterをなぐって起床後最初のツイートがあるか確認
  4. 起床後最初のツイートがあればTwitterに投稿、投稿が成功すればDynamoDBに記録

である。毎分DynamoDBを殴るのは確実で、TwitterAPIはツイートしてしまえば回数を消費しない。

AWS Lambdaの料金

1分刻みのスケジュールを使用すると31日間で2678400回起動することになる。このうち1000000回は無料である。超えた分は$0.20/1000000回といったところ。つまり月$0.33568。ま、いいっしょ。

AWS DynamoDBの料金

う〜んわからん。Amazon Web Services Simple Monthly CalculatorのDynamoDBで計算しようにも、1秒間に0.017回の読み込みを指定できない。ま、なんとかなるっしょ。

Twitter APIの叩きすぎ?

今回はTwitter4jのTwitter.getUserTimelineで自分のツイートを取ってきている。こいつは中でGET statuses/user_timelineを叩いていて、user authで180回/15分とかなのでまあなんとかなるっしょ。
app authのほうが300回/15分でお得っぽいけど面倒だしそんなにいらないのでパス。

運用結果

良い感じ。あとは回数をこなしてバグが出てくるのを待つか〜。

まとめ

やってみると以外と簡単! 課金が怖いので、これいじょうのことはしゃかいじんになってえらいひとにえーだぶりゅーえすつかえっていわれたらかんがえる。辛い。