以前、Google Compute Engine でインスタンスを作成してアプリを起動しましたが、
今回はGoogle App Engine を使ってアプリを起動してみました。
やってみたこと
Hello Worldアプリをクローン
Hello Worldアプリをローカル環境で実行
Hello WorldアプリをGoogle App Engineにデプロイして実行
環境
Python2.7
Google App Engine(GAE)とは
Googleのインフラ上でアプリケーションを作成し、実行できるようにするPaaSのことです。
Dockerイメージやフレームワーク、ライブラリを独自に導入することができます。
現時点ではNode.js、Java、Ruby、C#、Go、Python、PHPをサポートしています。
GAEを使えば自分でメンテナンスするサーバーは必要なくなり、
単純にアプリケーションをアップロードするだけでアプリケーションを実行することができます。
環境構築
こちらの公式ドキュメントを参考にしました。
App Engine フレキシブル環境における Python のクイックスタート | Google Cloud Platform
GCPメニューからApp Engineを選択し、プロジェクトと言語、リージョンを選択します。
今回はPythonを選択しました。
チュートリアル手順が画面右側に表示され、ブラウザ上で操作する手順を記載してくれていますが、
ブラウザ上だとdev_appserver.pyが起動できず上手くいかなかったのでローカルでやりました。
GAEを使う前にgitのインストール、Pythonの環境構築、Google Cloud SDKのダウンロードが必要になりますが、
その手順に関しては以前に書いた記事に記載してあります。
サンプルアプリをダウンロード
サンプルとして用意してあるHello Worldアプリをローカルにクローンし、
実行したいコードが存在するディレクトリに移動します。
$ git clone https://github.com/GoogleCloudPlatform/python-docs-samples
$ cd python-docs-samples/appengine/flexible/hello_world
ローカル環境でのアプリ実行
まずローカル環境でアプリを実行してみます。
仮想環境に入り、サンプルアプリの実行に必要なライブラリをインストールします。
virtualenvがない場合はsudo pip install virtualenv
でインストールします。
<インストールしたライブラリ>
Flask 0.12.2
gunicorn 9.7.1
$ virtualenv env
$ source env/bin/activate
$ pip install -r requirements.txt
ちなみに下記が実行するPythonファイルのコードです。Hello World!
を表示させるようにしています。
main.py
import logging
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
"""Return a friendly HTTP greeting."""
return 'Hello World!'
@app.errorhandler(500)
def server_error(e):
logging.exception('An error occurred during a request.')
return """
An internal error occurred: <pre>{}</pre>
See logs for full stacktrace.
""".format(e), 500
if __name__ == '__main__':
app.run(host='127.0.0.1', port=8080, debug=True)
また、YAMLファイルにはデプロイの設定を指定することができ、
ランタイム環境、URL、ハンドラーなどを設定します。
詳細については下記の公式ドキュメントに記載されています。
app.yaml Reference | App Engine standard environment for Python | Google Cloud Platform
app.yaml
runtime: python
env: flex
entrypoint: gunicorn -b :$PORT main:app
runtime_config:
python_version: 3
manual_scaling:
instances: 1
resources:
cpu: 1
memory_gb: 0.5
disk_size_gb: 10
アプリケーションを実行します。
$ python main.py
ブラウザで下記URLをひらきます。
Hello World! が表示されます。
確認できたらcontrol + C
でウェブサーバーを終了しておきます。
GAEにデプロイして実行
hello_worldディレクトリで下記コマンドを実行してデプロイします。
$ gcloud app deploy
デプロイ対象のソースや、デプロイ先のプロジェクト、サービスなどが表示されるので、
問題なければY
を入力してデプロイを続行します。
少し時間がかかります。
デプロイが完了したら下記コマンドを実行します。
URLが表示されるのでそのURLをブラウザで表示します。
$ gcloud app browse
Hello World! が表示されました。
デフォルトのバケットでは5GBまで無料で使えるようです。
課金を停止するには、下記画面で対象プロジェクトを選択して削除します。
やってみた所感
簡単にデプロイすることができたので、試しにアプリケーション開発をしたい場合などに役立ちそうでした。
また、PHPやGOなど多くの言語をサポートしている、ダッシュボードで監視ができる、AWSよりも低価格といった点も魅力的でした。
ブラウザからコマンド操作もできるようでしたが、環境がどうなっているのかよくわからなかったり、
コマンドの入力が遅く感じたりしたので、現状ではできる限り自分のローカルで操作したいと思っています。
他のサービスと連携させたりもできそうなので、もっとよく触って理解を深めていきたいです。