Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Twitter Botを作ってカスタマイズとトラブルシュートをした話

Twitter Botを作ってカスタマイズとトラブルシュートをした話

2022/7/6 JAWS-UG朝会 #35 登壇資料

amarelo_n24

July 06, 2022
Tweet

More Decks by amarelo_n24

Other Decks in Technology

Transcript

  1. Twitter Botを作ってカスタマイズと
    トラブルシュートをした話
    2022/7/6
    JAWS-UG 朝会 #35

    View full-size slide

  2. 自己紹介
    名前 :藤田 直幸
    Twitter :@amarelo_n24(コーヒー焙煎人兼エンジニア)
    Facebook:https://www.facebook.com/naoyuki.fujita.37
    取得済AWS認定 :CLF、SAA、DVA、SCS
    好きなAWSサービス:AWS CLI、AWS CloudShell、Cloud9
    好きなコーヒー豆 :ブラジル ブルボンアマレロ

    View full-size slide

  3. 1.builders.flash とは?
    2.作成したTwitter Botの概要
    3.カスタマイズポイント
    4.トラブルシューティング
    5.まとめ
    話すこと

    View full-size slide

  4. 1. builders.flash とは?

    View full-size slide

  5. 変化を求めるデベロッパーの皆様へ楽しみながら実践的に学べる
    トピックをお届けする AWS のウェブマガジンです。
    ・デベロッパーの方が持つ悩みや不安に対するヒントとなる様々なテクノロジーの解説
    ・課題解決を AWS を活用しながら行う方法
    ・デベロッパーインタビュー
    ・テクノロジーを日常の中で楽しむ体験記
    ・学校における最新のテクノロジー教育への取り組み
    ※抜粋
    https://aws.amazon.com/jp/builders-flash/about/?awsf.filter-name=*all
    builders.flash とは?

    View full-size slide

  6. 2022/7/4現在、以下の記事が公開されています。
    これらの記事を参考にTwitter Bot を作りました。
    第1回 おはようBot編
    第2回 昔書いた記事の宣伝 Bot 編
    第3回 リファクタリング & 曜日ごとのツイート 編
    第4回 新章突入 ! 気になるワード検索 & 通知 Bot 編
    第5回 皆さまの代わりに英語でツイートしておくよ Bot 編
    第6回 AWS Step Functions を使って Well-being Bot を作ろう ! (前編)
    第7回 AWS Step Functions を使って Well-being Bot を作ろう ! (後編)
    お役立ち Twitter Bot を作りながら学ぶ AWS ドリル

    View full-size slide

  7. 2.作成したTwitter Botの概要

    View full-size slide

  8. EventBridgeを使って自動投稿
    Cron式で毎朝7時に実行

    View full-size slide

  9. Systems Manager Parameter StoreにTwitter APIのKeyとTokenを保存
    SecureStringで保存。

    View full-size slide

  10. Systems Manager Parameter Storeに曜日ごとのメッセージを保存
    曜日ごとに異なった文言
    を入れてツイート

    View full-size slide

  11. DynamoDBにツイート内容を格納

    View full-size slide

  12. EveryDayCoffeeTweet_β @EVDY_Coffee_TWT
    ツイート結果

    View full-size slide

  13. 3.カスタマイズポイント

    View full-size slide

  14. ツイートするコーヒー豆を毎日変えたい
    要件
    ・アイテムが増えても、コード変更せずにツイートに
    使えるようにしたい。
    ・アイテムの追加頻度と量はそれ程ではないため、
    自動化まではしなくて良い。

    View full-size slide

  15. パーティションキーを単純な数字に変更

    View full-size slide

  16. DynamoDBの項目数を取得

    View full-size slide

  17. ランダムで取得した値をキー参照してツイート
    1~レコード数でランダム値を取
    得。それをキーにしてツイートす
    るコーヒー豆をDynamoDBから取
    得してツイートする。

    View full-size slide

  18. ツイートする豆の種類が毎日変わったことを確認
    ランダムに抽出するので、同
    じコーヒー豆が2日連続で出
    ることももちろんある。

    View full-size slide

  19. アイテム追加、手動でやるのめんどくさい

    View full-size slide

  20. アイテム追加をAWS CLIで
    aws dynamodb batch-write-item
    で読み込むJSONファイルを指定して実行。
    “UnprocessedItems”:{} と表示されれば成功
    事前にJSONファイルをアップ
    ロードしておく。

    View full-size slide

  21. JSON書くのも大変…悩ましい…
    ひとまずExcel関数を駆使して作成。
    batch-write-itemコマンドとJSON作成
    については、以下をご参照ください。
    https://speakerdeck.com/amarelo_n2
    4/dynamodbteburuniawsclideaitemu
    wo-gua-deng-lu-surufang-fa
    読み込ませたJSONファイル

    View full-size slide

  22. 追加データが使われたことも確認

    View full-size slide

  23. 4.トラブルシューティング

    View full-size slide

  24. いつもの時間にツイートされていなかった。
    EventBridgeの設定もLambdaのコードも変えていないのに…
    7/1の朝

    View full-size slide

  25. CloudWatch Logsで調査
    Task timed out ???

    View full-size slide

  26. 正常時のログイベント

    View full-size slide

  27. Twitter APIに障害が発生していたことが分かった。
    翌日はちゃんとツイートしていた。
    いろいろ調べてみたが…

    View full-size slide

  28. ログイベントも問題なし

    View full-size slide

  29. 5.まとめと今後やってみたいこと

    View full-size slide

  30. ・builders.flashを参考にTwitter Bot 作ってみた話をしました。
    ・やはりもっとコード書けるようになって、もっと効果的な
    Twitter Botにしたいと思った!!
    ・DynamoDBにアイテムを一括で追加する効率的な方法を
    もう少し検討したい。
    ・この登壇までの間に、TwitterAPIが落ちた時の動作を
    知れたのは良かった(?)
    まとめ

    View full-size slide

  31. ・気温情報を取得し、気温によるツイート内容変化
    - 暑い日はアイスコーヒーそれ以外はホットコーヒーを推奨。
    - さらに、夏は水分補給の促進、冬は換気の促進も。
    ※去年作った水分補給アラートをアップデートしたい。
    ・一定期間、特定文言のツイートしてなかったら通知
    - 焙煎に関するツイートしてなかったら:「焙煎の調子はどう?」
    - AWSに関するツイートしてなかったら:「次の認定試験頑張ろう!」
    など・・・AWSドリル第6回と7回が参考になりそう。
    今後やってみたいこと

    View full-size slide