FlaskのWebサーバをECインスタンス上で起動したい
PythonのWebアプリ開発をテキストにの勉強をしているなかで、FLASKでローカルにサーバを立ち上げ、ブラウザでアクセスするケースでつまずきました。
AWSのECインスタンスに開発環境を構築しているので、FLASKで起動するアプリケーションを外部からアクセスできるように設定する必要があります。
FLASKでサーバを起動するコード
サンプルコードはローカル環境のサーバ立ち上げだったので記載は以下の通りでした。
from flask import Flask
application = Flask(__name__)
@application.route('/')
def hello_world():
return "Hello World!"
if __name__ == '__main__':
application.run('127.0.0.1', 8000, debug=True)
起動してみます。
python Hello_World.py
アプリケーションサーバーは一応起動します
Serving Flask app "Hello_World" (lazy loading)
Environment: production
WARNING: Do not use the development server in a produc
tion environment.
Use a production WSGI server instead.
Debug mode: on
Running on http://127.0.0.1:8000/ (Press CTRL+C to quit)
Restarting with stat
Debugger is active!
Debugger PIN: 121-481-375
application変数にFlaskのインスタンスを代入し、application.runでローカルサーバー(127.0.0.1)を起動するわけですが、クラウド環境においてあるので、当然こうなります。
調べてみると、実行可能ファイルを使用してサーバーを起動する場合は、‘host=0.0.0.0’を使用することで非ローカル接続に開くことができるとのことでした。
そこで、以下の通り、IPを変更します。
application.run(‘0.0.0.0’, 5000, debug=True)
8000番のポートはApachが待ち受けているので、5000番に変更します。
ちなみに、Application.runのポートはデフォルトで5000番になっているので、ここは省略も可です。
コードを実行すると記載したIPアドレスの5000番ポートで待ちうけの状態になります。
$python Hello_World.py
* Serving Flask app "Hello_World" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environm
ent.
Use a production WSGI server instead.
* Debug mode: on
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 121-481-375
5000番のポートを開ける
5000番のポートは開けていないので、AWSのセキュリティグループでルーティングの設定を変更します。
AWSコンソールでVPCを開き、セキュリティグループの設定へ移動します
該当するセキュリティグループを選択して、ポートを追加します
ポートの指定はTCP、任意の場所から、ポート番号は先ほどコードに記載した5000番です。
これで準備は完了です。
Webブラウザからアクセスしてみる
http://xxx.xxx.xxx.xxx:5000
無事にアクセスできました
まとめ
Flaskで実行しているWebサーバを外部へ公開するための設定を紹介しました。’host=0,0,0,0″という特別なIPを指定した上、ポートを開放すれば比較的簡単に実現できます。
Terrific work! That is the type of info that are supposed to be shared around the web. Modesta Alessandro Tamaru