AWS lambdaを使ってみる
元々タスクスケジューラで動かしていたDiscord botをAWS lambdaに移行してみたので、メモ📝
1,ライブラリを特定のフォルダにインストールする
↓の場合my_lambda を指定
py -m pip install -r requirements.txt -t ./my_lambda
2,lambda_function.pyに処理を記載。 function名はlambda_functionとする。
3,lambda_function.pyもmy_lambda フォルダに移動してzipで固める
4、aws lambdaにアップロードする
環境変数をコード上で呼び出すためには
import os cousumer_key = os.environ['CONSUMER_KEY']
のように書く AWS Lambda 環境変数の使用 - AWS Lambda
コードはこんな感じ。特定のTwitterアカウントのツイートを取得してbotで表示するもの
import tweepy import requests from discordwebhook import Discord import os consumer_key = os.environ['CONSUMER_KEY'] consumer_secret = os.environ['CONSUMER_SECRET'] access_token = os.environ['ACCESS_TOKEN'] access_secret = os.environ['ACCESS_SECRET'] webhook_url = os.environ['WEBHOOK_URL'] class TwitterApi: def get_latest_tweet(self, account_name): auth = tweepy.OAuthHandler(consumer_key, consumer_secret) auth.set_access_token(access_token, access_secret) api = tweepy.API(auth, wait_on_rate_limit=True) tweet = api.user_timeline(id=account_name, count=1)[0] screen_name = tweet.user.screen_name return tweet.text def lambda_handler(event, context): api = TwitterApi() text = api.get_latest_tweet("@xxxxxxx") discord = Discord(url=webhook_url) discord.post(content=text)
6,デプロイする&テストしてみる。
ここで
401 Unauthorized\n32 - Could not authenticate you
が出る。あら認証されてない、おや(;'∀')
7,Twitterの開発者ポータル見ると
This App has violated Twitter Rules and policies. As a result, it can no longer be accessed. For assistance, submit a support ticket
のエラーが。プロジェクト作り直して諸々のキーを再取得
8,環境変数変えてテスト→成功
9,トリガーをイベントで設定
今回は毎日0時に投稿したいので、
cron(00 15 * * ? *)
と記載。この時間はUTC time
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/services-cloudwatchevents-expressions.html
10,無事0時に表示、おめでとう㊗
めっちゃ便利やないか、、、今までタスクスケジューラでやってたから、PC起動していないときは実行されなかったんだよね。 やってみようと思ったのは応用情報のシステムアーキテクチャ解いててFaaSについて出てきて、ふむFaaSでbot実行できるのでは? FaaSには
AWS Lambda
Google Cloud Functions
Microsoft Azure Functions
などがあるのね、awsアカウント持ってるしやってみよう、ってなったから。 次はもう一個Discord上で動かしたい処理があるからそれも作ってみよー