Google App Engine でアプリを起動してみました

以前、Google Compute Engine でインスタンスを作成してアプリを起動しましたが、
今回はGoogle App Engine を使ってアプリを起動してみました。






やってみたこと









環境









Google App Engine(GAE)とは



Googleのインフラ上でアプリケーションを作成し、実行できるようにするPaaSのことです。

Dockerイメージやフレームワーク、ライブラリを独自に導入することができます。
現時点ではNode.js、JavaRubyC#、Go、PythonPHPをサポートしています。
GAEを使えば自分でメンテナンスするサーバーは必要なくなり、
単純にアプリケーションをアップロードするだけでアプリケーションを実行することができます。






環境構築



こちらの公式ドキュメントを参考にしました。



App Engine フレキシブル環境における Python のクイックスタート  |  Google Cloud Platform





GCPメニューからApp Engineを選択し、プロジェクトと言語、リージョンを選択します。
今回はPythonを選択しました。



f:id:mtomitomi:20180226194655p:plain






f:id:mtomitomi:20180226194737p:plain





チュートリアル手順が画面右側に表示され、ブラウザ上で操作する手順を記載してくれていますが、
ブラウザ上だとdev_appserver.pyが起動できず上手くいかなかったのでローカルでやりました。



f:id:mtomitomi:20180226195541p:plain





GAEを使う前にgitのインストール、Pythonの環境構築、Google Cloud SDKのダウンロードが必要になりますが、
その手順に関しては以前に書いた記事に記載してあります。



mtomitomi.hatenablog.com






サンプルアプリをダウンロード



サンプルとして用意してある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をひらきます。



http://localhost:8080





Hello World! が表示されます。

確認できたらcontrol + Cでウェブサーバーを終了しておきます。



f:id:mtomitomi:20180227105659p:plain






GAEにデプロイして実行



hello_worldディレクトリで下記コマンドを実行してデプロイします。




$ gcloud app deploy





デプロイ対象のソースや、デプロイ先のプロジェクト、サービスなどが表示されるので、
問題なければYを入力してデプロイを続行します。
少し時間がかかります。





デプロイが完了したら下記コマンドを実行します。
URLが表示されるのでそのURLをブラウザで表示します。




$ gcloud app browse





Hello World! が表示されました。



f:id:mtomitomi:20180227110520p:plain





デフォルトのバケットでは5GBまで無料で使えるようです。

課金を停止するには、下記画面で対象プロジェクトを選択して削除します。



console.cloud.google.com






やってみた所感



簡単にデプロイすることができたので、試しにアプリケーション開発をしたい場合などに役立ちそうでした。
また、PHPやGOなど多くの言語をサポートしている、ダッシュボードで監視ができる、AWSよりも低価格といった点も魅力的でした。

ブラウザからコマンド操作もできるようでしたが、環境がどうなっているのかよくわからなかったり、
コマンドの入力が遅く感じたりしたので、現状ではできる限り自分のローカルで操作したいと思っています。

他のサービスと連携させたりもできそうなので、もっとよく触って理解を深めていきたいです。