Lambda+DynamoDBを使ってTwitter Botを作ってみよう

AWSラボ
スポンサーリンク

今回は、Twitter Bot(自動ツイート)を作成していきたいと思います。

使用する主なAWSサービスは、Lambda、DynamoDB、CloudWatch Eventとなります。
Lambda関数の実装は、専用の開発環境が整っているCloud9を利用したいと思います。

Cloud9とは、簡単にいうとAWSの統合開発環境のサービスで、簡単に開発環境を構築できます。
Cloud9を利用することで、Lambda関数の実装が超簡単にできるのでオススメです。

ただし注意しなくてはならないのが、言語が限られているということです。
Cloud9で実装できるLambdaは「node.js」と「Python」になります。(※H31.3.3現在)

スポンサーリンク

どのようなことができるものなの?

あらかじめツイートテキストをDBに登録しておき、指定した日時になったら自動的にTwitter上へつぶやきます。

↓自動ツイートの結果

今後のバージョンアップは?

今回作成したシステムを使い、以下のようなシステムへバージョンアップさせるのも可能かなと思っております。

  • 画像イメージをS3へ登録し、ツイートテキストと一緒に画像データもツイートする
  • ツイートする日時やツイート内容をあらかじめ設定できるようなインターフェース(Webサイト)を用意し、誰でも簡単に設定できるようにする

仕組みの概要

今回作成したTwitter Botは、CloudWatch EventでLambdaを発火させ、LambdaからDynamoDBに登録されているデータを読み取り、Twitter APIを経由してツイートする仕組みとなります。

Twitter Botの作り方

(1)TwitterのAPIキーを取得

Twitterサイトで開発者アカウントの登録を行い、Twitterへツイートするために必要な以下の4つの情報を揃えておきましょう。
※以前は簡単に取得できたようなのですが、2018年夏に制限が厳しくなり、多少面倒になっているようです。

  1. Consumer API Key
  2. Consumer API secret key
  3. Access token
  4. Access token secret

※開発者アカウントの登録方法は、以下のサイトが参考になります。
Twitter のAPIキーの取得方法が変わった(Qiita)

(2)DynamoDBにアクセスできるIAMロールを作成

DynamoDBからデータを取得できるようにするために、DynamoDBにアクセスできるIAMロールを作成します。
今回はお試しということで”AmazonDynamoDBFullAccess”を付与しました。
フルアクセス権限なので、きちんとサービスとして作るときは権限設定を厳密にしましょう。

“LambdaBasicExecutionRole”も一緒に付与しておきます。

(3)DynamoDBのテーブル作成

DynamoDBにて以下のようなデータの入ったテーブル(“TwitterBot”)を用意します
※Cloud9とDynamoDBはリージョンを合わせるように注意してくださいね。

(4)Lambdaの実装

Cloud9で、Lambdaの実装を行っていきます。
LambdaのRuntimeはPython3.6、”Select blueprint”は”empty-python”で作成します。

作成の際、Lambdaに付与するロールを聞かれるので、(2)で作成したロールを選択します。

次のコマンドでPython用のライブラリのインストールをします。
インストール先は、アプリケーションディレクトリと同じ階層とします。

Lambdaのコードは以下の通りです。

作成できましたら、Cloud9上でLambdaをアップロードします。
Cloud9を使っていて一番楽だと感じた部分がココです!

(5)CloudWatch Event設定

Cron式にて”10 13 3 3 ? 2019″と指定します。(日本時間2019/3/3 22:10に起動させるため。)
※CloudWatch Eventでの時間指定はGMTのため)

で、Twitterを確認すると・・・・

はい、22:10に投稿されましたー!


今回はTwitter Botのコアとなる部分を作成してみました!

TwitterのAPIは、単にツイートする以外にも様々なものがあるようですので、時間を見つけて試していきたいと思います。

以上、hidesanでした!

スポンサーリンク
AWSラボ
Tech Dive
タイトルとURLをコピーしました