AWS Lambda から Twitter に投稿する

 以前、Qiita にまとめたのですが、例が少し複雑だったので、復習も兼ねてシンプルに投稿するだけの手順をまとめようと思います。

  • Twitter アプリの登録とアクセスキーの取得
  • Lambda ファンクションの作成
  • Lambda ファンクションのデプロイ

の流れで進めていきます。

Twitter アプリの登録とアクセスキーの取得

Bot 用の Twitter アカウントを作成する

 ご自身のアカウントでつぶやく場合はこの手順はスキップしてください。

Twitter アプリの登録する

 ↑のアカウントでログインしたまま、下記のURLに遷移してください。

https://apps.twitter.com/app/new

まず、Twitter アプリの概要を登録します。(URLは有効なものでないと怒られます。URLがない場合はどうするんですかね??)

f:id:ketancho_jp:20171213235432p:plain

各種キーの取得

次に、Lambda からTwitterに投稿するために必要な4つのキーを取得します。

  • Consumer Key (API Key)
  • Consumer Secret (API Secret)
  • Access Token
  • Accesss Token Secret
Consumer Key, Secret

 Keys and Access Tokens タブに遷移します。すると、Application Settings の欄に Consumer Key と Consumer Secret が表示されています。こちらを控えておくようにしてください。

f:id:ketancho_jp:20171213235529p:plain

Access Token, Secret

 次に、アクセストークンですが、同じタブ内で、Create my access token というボタンを押下します。 f:id:ketancho_jp:20171213235552p:plain

すると、下記のように各トークンが表示されるので、こちらも控えておいてください。

f:id:ketancho_jp:20171213235735p:plain

Lambda ファンクションの作成

 では、Lambda ファンクションを作成していきます。ここから先の流れは、AWS Lambda から外部 API を呼び出す - log4ketancho と同じです。

作業ディレクトリの作成

 まずは、作業用のディレクトリを作成します。

$ mkdir lambda_tweet
$ cd lambda_tweet/

認証ライブラリのインストール

 次に、認証ライブラリである requests_oauthlib を導入します。先ほど入手した各種トークンを用いて Twitter に接続する際に必要になります。

$ pip install requests_oauthlib -t ./

Lambda ファンクションの作成

 続いて、 Hello World と投稿する Lambda ファンクションを作成していきます。

$ vim tweet.py
from requests_oauthlib import OAuth1Session

CK = '***' # * enter your Consumer Key *
CS = '***' # * enter your Consumer Secret *
AT = '***' # * enter your Access Token *
AS = '***' # * enter your Accesss Token Secert *

UPDATE_URL = 'https://api.twitter.com/1.1/statuses/update.json'

def lambda_handler(event, context):
    _tweet("Hello World")

# tweet text
def _tweet(text):
    params = {"status": text }
    twitter = OAuth1Session(CK, CS, AT, AS)
    req = twitter.post(UPDATE_URL, params = params)

    if req.status_code == 200:
        return text
    else:
        return req.status_code

エラーハンドリングが適当ですみません。

デプロイする

上記モジュールを zip 化する

$ zip -r lambda_tweet.zip ./

マネージメントコンソール経由でデプロイする

 新たにLambdaファンクションを作成します。AWSリソースにアクセスしないので、ロールは適当なものを選択してください。

f:id:ketancho_jp:20171214010055p:plain

 続いて、先ほど作成した zip ファイルをアップロードしてください。ハンドラをファイル名に合わせることを忘れないようにしてください。 f:id:ketancho_jp:20171214010059p:plain

試し実行する

 では、試し実行してみます。Lambda Function の「テスト」ボタンを押してみます。Twitter を見ると Hello World とつぶやかれていれば成功です;)

f:id:ketancho_jp:20171214010102p:plain