やりたいこと
文章を自動生成するTwitterのbotを自作して公開したい。
自動生成するプログラムとTwitterに投稿するプログラムは前回までで出来たので、今回はAWSを使って公開するところまでをやる。
環境
Windowsで開発したプログラムをAWSに上げる。
開発環境
・Windows 10
・Python 3.10.7
本番環境
・AWS Lightsail(Amazon Linux 2)
・Python 3.7.10
やったこと
1.AWSのアカウント作成
2.AWS Lightsailのインスタンス作成
3.サーバに各種インストール
4.LightsailサーバーへSFTP接続
5.cronの設定
1.AWSのアカウント作成
まず、botを載せるサーバを用意する。
今回は勉強も兼ねてAWSにします。
アカウントの作成時に、英語で住所を入力するように求められたので、以下のサイトを参考にしました。
2.AWS Lightsailのインスタンス作成
botの公開先はいくつか候補があるようです。
・EC2
・Lightsail
・Lambda
今回作成したbotはSQLiteを含むのでLambdaは除外、EC2は設定が大変らしいので、Laightsailを使ってみます。
まず、インスタンス作成画面を開きます。
ロケーションは東京、プラットフォームはLinux/Unixを選択します。
次に設計図?の選択。
今回はbotを定期的に動作させるだけなんで、”OSのみ”を選択、OSはAmazon Linux 2
を選択します。
料金プランは一番安いやつで大丈夫でしょう。
この料金体系がわかりやすいのはLightsailの利点ですね。
任意でリソース名を入力します。
キーについての設定はそのままにしました。
最後に「インスタンス作成」ボタンをクリックして完了です。
すると、ホームに作成したインスタンスが表示されます。
(黒く塗りつぶしたところはIPアドレスです)
3.サーバに各種インストール
インスタンス作成に成功したらサーバに接続してみましょう。
表示されているインスタンス右上のオレンジの四角マークをクリックするとLinuxのターミナルが開きます。
そしたらbotに必要な以下のものをインストールしました。
・MeCab
・unidic-lite
・mokrovify
・tweepy
このとき、ハマったのが、まずPythonのコマンド。
[ec2-user@ip-xxxx ~]$ python --version
Python 2.7.18
[ec2-user@ip-xxxx ~]$ python3 --version
Python 3.7.10
最初、python --verserion
とうって、バージョンが2系なのに戸惑いました。
3系を使うならpython3
とうてばいいんですね……。
これはpip
コマンドも同様で、python3のpipを使うならpip3
とうちます。
[ec2-user@ip-xxxx ~]$ pip --version
pip 20.2.2 from /usr/lib/python2.7/site-packages/pip (python 2.7)
[ec2-user@ip-xxxx ~]$ pip3 --version
pip 20.2.2 from /usr/lib/python3.7/site-packages/pip (python 3.7)
それで次に以下のライブラリをインストールしたのですが、
・MeCab
・mokrovify
・tweepy
どうやらこれだけではMeCabが動かないようです。
後の工程でpyプログラムを実行して発覚したのですが、MeCab.Tagger("-Owakati")
の記述のある個所でRuntimeErrorが発生します。
以下のサイトを参考にしてunidic-lite
というものもインストールします。
これで必要なもののインストールが完了しました。
4.LightsailサーバーへSFTP接続
サーバの準備は出来たのでいよいよbotをアップロードします。
使うのはFileZilla
です。
LightsailのFTP接続の方法については公式ドキュメントを参考にしました。
接続できたらファイルをアップロードします。
試しにターミナルから直接プログラムを叩いてみて動作することを確認しました。
5.cronの設定
あとは、cronを設定してbotを定期的に起動させるだけです。
今回のbotは自動生成した文章をツイート機能と、僕のアカウントからツイートを取得してDBに格納する機能の2つあります。
ファイルもそれぞれで2つあるのでcronも2つ設定します。
50 * * * * /bin/python3 /home/ec2-user/hern/learn.py > /home/ec2-user/log/cron.log 2>&1
00 * * * * /bin/python3 /home/ec2-user/hern/post.py /home/ec2-user/log/cron.log 2>&1
上記の50 * * * *
や00 * * * *
は、それぞれ、毎時50分に実行する。毎時00分に実行する。です。
以下のサイトを参考にしました。
python3の場所は
sudo which python3
で調べました。
また、末尾の> /home/ec2-user/log/cron.log 2>&1
は、エラーが発生した際にログに出すための記述です。
ともかく、これで設定は完了。
うん。ちゃんとツイートしてます。いいですね!
今後はフォローバック機能や、リプライに反応する機能、生成する文章のブラッシュアップなどを目指したいと思います。
参考資料