basic_scaling の idle_timeout について #GAE
試したメモ。
app.yaml のドキュメントをみると、以下のように書いてある。
idle_timeout Optional. The instance will be shut down this amount of time after receiving its last request. The default is 5 minutes. 任意。 インスタンスは、最後の要求を受信した後、この時間をシャットダウンします。 デフォルトは5分です。(Google 翻訳)
受信とは…🤔
- 最後のリクエストを受け付けてからN分後にシャットダウンするのか
- 最後のリクエストを完了してからN分後にシャットダウンするのか
おそらく b だと思うけど、分からないので簡単に試した。
結論
b の最後のリクエストを完了してからN分後にシャットダウンする
が正しい。
検証ログ
以下のように basic_scaling
の設定をした app.yaml
を用意して、
# app.yaml ... 略 ... instance_class: B1 basic_scaling: idle_timeout: 1m # 5分だと長いので1分に設定 max_instances: 1 handlers: - url: /_ah/start # basic_scaling 用 script: _go_app login: admin - url: /path/to script: _go_app login: admin ... 略 ...
/path/to
にアクセスする。
func PathTo(w http.ResponseWriter, req *http.Request) { ctx := appengine.NewContext(req) for i := 0; i < 20; i++ { log.Infof(ctx, "sleep... i:%v", i) time.Sleep(10 * time.Second) } }
a であれば、最中にシャットダウンされるので、ログが途切れるハズ。
結果
途切れてない:)
LINE Notify を Go でさくさく使うためのライブラリをつくった #golang
github.com LINE Notify については こちら
使い方
実例コードを用意してます。
認証 と 通知 の2つ、サンプルがあります。
注意事項として、認証のサンプルはコールバック用の外部からアクセスできる URL が必要です。
通知のサンプルは、アクセストークンがあれば動きます。
アクセストークンは LINE Notify 管理画面でお試し発行できるので、それを使ってみてください。
認証について
通知用のアクセストークンを取得します。
具体的な流れは、
/auth
にアクセスした人を、LINE Notify 認証 URI にリダイレクト- リダイレクト先で通知設定をしたとき、
/callback
に POST リクエスト - 渡ってきたパラメータ(code)を使って、アクセストークンを取得
です。
/auth でやっていること
認証に必要なパラメータをセットして、認証 URI にリダイレクトしてます。
このとき CSRF 攻撃対策のために、state をもつようにしてます。
/callback でやってること
渡ってきたパラメータをパースします。
次に、state の値を比較して、正常なリクエストかどうかを確認します。
最後に、code をつかってアクセストークンを取得します。
通知について
アクセストークンをつかって通知します。
LINE Notify は、テキストだけではなく、画像を送ることもできます。
画像は、URL かバイナリで指定します。
もし仮に両方指定したときは、バイナリを優先します。
ちなみに GoogleAppEngine で使いたいときは、Client.HTTPClient
に urlfetch.Client
を入れるようにしてください。
c := linenotify.New() c.HTTPClient = urlfetch.Client()
Docker を使って PHP 5.2 環境を用意してみる
先日、ひょんなことから PHP 5.2 環境を用意した備忘録。
利用した Docker イメージ
Pull
docker pull tommylau/php-5.2 docker pull tommylau/nginx docker pull mysql:5.6
Run
docker run --rm --name mysql5.6 -e MYSQL_ROOT_PASSWORD=password -d mysql:5.6 docker run --rm --name php -v /path/to/web:/var/www/html --link mysql5.6:mysql -d tommylau/php-5.2 docker run --rm --name nginx -v /path/to/web:/var/www/html --link php:php -p 9000:80 -d tommylau/nginx
確認
cat /path/to/web/index.php <?php echo phpinfo(); open http://localhost:9000