前提・実現したいこと
Google App Engine スタンダード環境にてPythonのFlaskでWebアプリケーションを作成しており、app.yamlを以下のように設定し、常時1インスタンスが起動した状態にしたいと思っています。
[app.yaml] runtime: python37 instance_class: F2 inbound_services: - warmup entrypoint: gunicorn -b :$PORT --workers 2 --threads 2 main:app automatic_scaling: min_instances: 1 max_instances: 2 min_idle_instances: automatic max_idle_instances: automatic
発生している事象および確認したいこと
アクセスが全くない状態でしばらく放置してログを確認すると、
以下のようにインスタンスのシャットダウンと起動を繰り返していることが確認出来ます。
※1時間に数回繰り返すことも多々あります。
/_ah/warmup [INFO] Starting gunicorn 20.0.4 [INFO] Listening at: http://0.0.0.0:8081 (7) [INFO] Using worker: threads [INFO] Booting worker with pid: 15 [INFO] Booting worker with pid: 18 [INFO] Handling signal: term [INFO] Worker exiting (pid: 15) [INFO] Worker exiting (pid: 18) [INFO] Shutting down: Master /_ah/warmup [INFO] Starting gunicorn 20.0.4 [INFO] Listening at: http://0.0.0.0:8081 (7) [INFO] Using worker: threads [INFO] Booting worker with pid: 15 [INFO] Booting worker with pid: 17
min_instancesを設定しているため、ウォームアップリクエストを設定し、
アプリケーションが処理していることもログから確認出来ています。
ウォームアップリクエストによりすぐに起動するため、結果としては常時1インスタンス起動にはなっているのですが、このように、アクセスが全くない状態でインスタンスがシャットダウンと起動を何度も繰り返すのは正しい動きでしょうか?
補足情報(FW/ツールのバージョンなど)
質問用に以下のようなサンプルアプリになっています。
[requirements.txt] Flask==1.1.1 gunicorn
[main.py] from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, World!' @app.route('/_ah/warmup') def warmup(): # Handle your warmup logic here, e.g. set up a database connection pool return '', 200, {}
あなたの回答
tips
プレビュー