AppEngineをみてみる (1)
- 以前触ってから大分変容しているので改めてGAEを眺めてみる
- standardとflexibleが存在するようだが
- とりあえずはstandardを触る
- 開始の手順として
プロジェクトの作成
があるが割愛する
依存ライブラリ
- とりあえずgo getしてもらってくる
go get -u google.golang.org/appengine/...
cloud app
- cloud sdkに含まれているコマンドで開発を行う
gcloud app deploy gcloud app browse
データ保存
- cloud datastoreを使用する
- これはkey-value storeぽい感じがする
- 真面目に運用するとなると若干辛い気がする
ユーザーの認証
- firebaseを使うようだ
非同期でのコードの実行
Go ランタイム環境
App Engine の Go ランタイム環境は、goroutine を完全にサポートしていますが、並列実行はサポートしていません。goroutine は単一のオペレーティング システム スレッドにスケジュールされます。このシングルスレッド制限は、今後のバージョンで解除される予定です
これ、割と辛そうだけど今後解消されるらしい。
GOPATH にパッケージ ソースを含める場合は、app.yaml ファイルを含む App Engine プロジェクト内のディレクトリ以下にソースコードを配置しないように注意する必要があります。この位置に配置すると、パッケージが 2 回読み込まれる可能性があります。サービスのディレクトリの相対パスに対して 1 回、完全修飾パスに対してもう 1 回です。これは修正が困難な問題の原因になり得るため、プロジェクトと GOPATH のスキャンでこのケースが検出された場合、エラーとして報告されます。
はまった気がする
ここ、以外と重要なことが書かれていて読み落とすとはまりそう。というかはまりました。
手動または基本のスケーリング インスタンス上で動作するコードは、生成元のリクエストよりも長く存続できるリクエストを開始できます。そのため、インスタンスは、任意の周期的タスクまたはスケジュールされたタスクを実行したり、ユーザーにリクエストが返された後もバックグラウンドで作業を継続したりできます。
- これは色々と使えそう
- 10個までという制限があるが
err := runtime.RunInBackground(c, func(c appengine.Context) { // do something... })
長いので続きは次回。