LoginSignup
27
26

More than 5 years have passed since last update.

aws ec2で、pythonスクリプトを定期自動実行するまで

Posted at

はじめに

pythonで書いたスクリプトを、定期実行したかったのでサーバ上に動くようにしました。スクリプトの内容はスクレイピングとブログに自動投稿です。毎日一回だけなので、最初は手動でやっていましたが、勉強も兼ねてaws ec2を借りて動かしてみました。初めてのクラウド体験。

EC2インスタンスを起動まで

EC2インスタンスを作成するにはこの記事を参照すると良いと思います。無料枠で作成する場合は、設定なども参考になると思います。AWS側も丁寧に誘導してくれるので、そこに乗っかればいけました。

ec2インスタンスを作成した後

インスタンス上でpythonスクリプトを動かすのに行うことは、以下のことです。

  1. サーバにSSHでログイン
  2. サーバ上にpythonをインストール、仮想環境(venv)を作成
  3. ローカル開発環境にあるファイルやライブラリをサーバ上に同期
  4. スクリプトを定期実行するために、サーバ上のcronの設定

以上の作業でローカルにあるpythonスクリプトを、ec2インスタンス上で自動実行することができました。
それぞれ方法を見ていきましょう。

サーバにSSHでログイン

~/.ssh/config内
Host ec2:
 HostName <インスタンスのIPアドレス>
 User ubuntu
 IdentiFile <ダウンロードしたキーペア名.pemへのパス>

~/.ssh/config内に記述して、以下のコマンドでログインできます。

ssh ec2

サーバ上にpythonをインストール、仮想環境(venv)を作成

サーバ上にpythonとvenvをインストール/作成しましょう。

sudo apt-get install -y python3 python3.4-venv
python3 -V
python3 -m venv sample  仮想環境作成
. sample/bin/active 仮想環境に入る

ローカル開発環境にあるファイルやライブラリをサーバ上に同期

ローカルのファイルをサーバ上に同期するにはいくつか方法があると思いますが、今回はrsyncを使用します。

rsync -av <ファイル> ec2:パス

後は同期するファイルをこのコマンドで叩けば良いだけです。

同期するのは、ライブラリ集であるpip freeze実行するスクリプトです。前者は以下のようにテキストファイル化すると良いと思います。

pip freeze > requirements.txt 

スクリプトを定期実行するために、サーバ上のcronの設定

サーバ上で自動実行を行うためにはcronを設定します。そのためには/etc/crontabを編集しましょう。殆どがコメントになっていると思いますが、自動実行する時刻とコマンドをここに書くことで実装できます。

設定するには、左から分、時、日、月、曜日、ユーザ、コマンド内容の順番で記載していきます。以下の例は、毎日22時42分にコマンドを実行する例です。
また、実行するコマンドは分かりやすくシェルスクリプトにまとめてますが、まとめなくても大丈夫かもしれません。

# m h dom mon dow user  command
42 22   * * *   ubuntu  /home/ubuntu/run_script.sh > /tmp/run_script.log 2>&1

これでサーバ上で定期自動実行できました。

終わりに

awsの無料枠というのはec2起動時間が月に750時間までらしいです。なので一つのインスタンスを月にずっと起動してたら730時間なので、それだけで埋まってしまいます。
日に一度のみの定期実行したいだけならば、他の方法があると思うので調べてます。
aws lambdaがそれっぽい。

27
26
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
26