Slide 1

Slide 1 text

@shimakaze_soft GAE によるPythonWEB アプリケー ションの⾼速開発 shimakaze_soft WEB エンジニア勉強会 2019-08-30 shimakaze-git

Slide 2

Slide 2 text

BackEnd Enginner しまかぜsoft (@shimakaze_soft) 株式会社 Pasona JOB HUB に所属 DjangoCongressJP スタッフ バックエンドエンジニア( 主にDjango を使⽤) 少しだけインフラエンジニアも兼務 BtoC 向けのサービスを開発 shimakaze_soft ( ⼤島和輝) お前、誰よ?

Slide 3

Slide 3 text

・Google App Engine を⽤いてのPython の WEB アプリケーションの⾼速な開発 今⽇話すこと

Slide 4

Slide 4 text

・Django を⽤いてのGAE による開発⽅法をお話し ます ・GAE のStandard( スタンダード) 環境を使⽤しま すが、Flexible( フレキシブル) は使いません 今回話すことの注意点

Slide 5

Slide 5 text

・Python は軽量プログラミング⾔語の⼀種 ・巷では機械学習やデーター分析系で有名 ・WEB アプリケーションでも普及 ・Django はPython の中では有名なWEB フレームワーク - instagram - connpass Django とは何か? ついでにPython について

Slide 6

Slide 6 text

・GCP のサービスの⼀つで、インフラ上でアプリケー ションを実⾏できるPass ・Heroku みたいなもの、AWS でいうならECS ・単純にアプリケーションをアップロードするだけでア プリケーションを実⾏可能 Google App Engine とは

Slide 7

Slide 7 text

・AWS のECS よりも価格が安い ・Node 、Java 、Ruby 、C# 、Go 、Python 、PHP など のあらゆる⾔語ををサポート ・Standard とFlexible の⼆種類がある Google App Engine の特徴 (1)

Slide 8

Slide 8 text

・Nginx みたいなWEB サーバーが不要になる ・デプロイすると⾃動でstackdriver logging にログを 流す Google App Engine の特徴 (2)

Slide 9

Slide 9 text

Google App Engine Flexible 環境とStandard 環境 の違い

Slide 10

Slide 10 text

Flexible 環境 ・ローカルディスクの書き込み可能 ・Dockerfile によるカスタマイズが可能 ・SSH 接続が可能 Standard 環境 ・⼀部、機能が制限されている ・ローカルディスクの書き込みが不可能 ・インスタンスの起動時間が⼀瞬 ・SSH 接続ができない

Slide 11

Slide 11 text

Google App Engine 実践編

Slide 12

Slide 12 text

$ django-admin startproject sample_django $ cd sample_django $ python manage.py migrate $ touch requirements.txt $ vim requirements.txt # django を導⼊ django==2.2.3 Django のセットアップ (1)

Slide 13

Slide 13 text

$ vim config/settings.py # STATIC 関連の設定 STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, 'static') $ python manage.py collecstatic Django のセットアップ (2)

Slide 14

Slide 14 text

$ touch main.py $ vim main.py # GAE で読み込むためのファイルを設定する from sample_django.wsgi import application app = application Django のセットアップ (3)

Slide 15

Slide 15 text

app.yaml AppEngine の動作に必ず必要な基本的なファイル dispatch.yaml cron.yaml ルーティングルールを細く設定する設定ファイル バッチ関連の設定ファイル、設定したスケジュールの 時間帯に特定のURL に対してリクエストを送る Google App Engine 各種設定ファイル

Slide 16

Slide 16 text

動かすランタイムとバージョンの指定 runtime: python37 構成ファイルの書き⽅ (1) app.yaml runtime の設定 python37

Slide 17

Slide 17 text

handlers: - url: / script: auto - url: /static static_dir: static/ 構成ファイルの書き⽅ (2) app.yaml handlers のルーティングの設定

Slide 18

Slide 18 text

handlers: - url: / script: auto (auto にするとmain.py を⾃動で選択) - url: /static static_dir: static/ 構成ファイルの書き⽅ (2) app.yaml handlers のルーティングの設定

Slide 19

Slide 19 text

env_variables: TEST_ENV: 0 構成ファイルの書き⽅ (3) app.yaml env_variables 環境変数の設定

Slide 20

Slide 20 text

・requirements.txt というのはPython のパッケージ 管理ファイル ・以下のコマンドがGAE 内で $ pip install -r requirements.txt requirements.txt の内容を元に⾃動でパッ ケージをインストールする

Slide 21

Slide 21 text

・requirements.txt にgunicorn を加えなくてもいい gunicorn はDjango では定番のアプリケーションサーバ GAE にgunicorn が最初から⼊っている

Slide 22

Slide 22 text

以下のコマンドでデプロイ $ gcloud app deploy -q gcloud app deploy によるデプロイ

Slide 23

Slide 23 text

引数を指定することでyaml ファイルを選択できる $ gcloud app deploy staging-app.yaml gcloud app deploy によるデプロイ

Slide 24

Slide 24 text

https://[ バージョン]-dot-[ プロジェクトID].appspot.com ⾃動でSSL 付きのドメインが振られる

Slide 25

Slide 25 text

Google App Engine 使って後悔したこと

Slide 26

Slide 26 text

・10 分以上かかることも結構ある ・⼤した規模じゃないアプリでもStandard で 3 分ぐらいかかる デプロイ遅い( フレキシブルだと最悪)

Slide 27

Slide 27 text

・デフォルトで設定されているdefault アプリケー ションのみにドメインを切れる ・それ以外のアプリケーションはサブドメインのみ GAE 内でドメイン⼀つしか切れない

Slide 28

Slide 28 text

WebSocket が未対応

Slide 29

Slide 29 text

⾼速開発とか⾔っているけど デプロイ遅くて結構ストレス貯まります

Slide 30

Slide 30 text

・Nginx の設定などが不要 ・インフラの管理が圧倒的に楽 ・結構癖があって制限がある ・デプロイ遅い まとめ

Slide 31

Slide 31 text

ご静聴ありがとうございました!