やりたいこと
- S3へのファイルアップロードをトリガーに、AWS上でかなり重たい処理(動画処理)をさせたい
- しかし、LambdaだとTimeOutやメモリ不足が心配
- そこで、LambdaでEC2を起動させて、起動時にPythonのスクリプトを自動で実行させる
※Pythonに限らず何でも実行できます。
ファイル構造
/home/ec2-user/
└── environment
├── main.py
└── start_function.sh
/etc/init.d/
└── start
- (任意)ホームディレクトリ(/home/ec2-user)に
environment
というディレクトリを作る - 自動実行させたいpythonスクリプト
main.py
- pythonスクリプトを実行させるためのシェルスクリプト
start_function.sh
- EC2の起動時にシェルスクリプトを実行させるための
start
※ファイル名やディレクトリ名は自分で好きに変えてください
本編
pythonスクリプトを実行させるshellスクリプト
sudo vim /home/ec2-user/environment/start_function.sh
以下をコピペ
#!/bin/bash
nohup /usr/local/src/pyenv/shims/python /home/ec2-user/environment/main.py &
exit 0
起動時にshellスクリプトを実行させるためのファイル
sudo vim /etc/init.d/start
以下をコピペ
#!/bin/sh
# chkconfig: 345 99 10
# description: start_function shell
case "$1" in
start)
su -l ec2-user -c "sh /home/ec2-user/environment/start_function.sh"
;;
stop)
/usr/bin/kill python
echo "stop!"
;;
*) break ;;
esac
権限の変更と自動起動への登録
cd /etc/init.d
sudo chmod 775 start
sudo chkconfig --add start
sudo chkconfig start on
sudo chkconfig --list start
以下のような出力が出れば完成。
start 0:off 1:off 2:on 3:on 4:on 5:on 6:off