前回軽くさわったGAE(Google App Engine)の使い方というかサービス構成を構造ファイルを作りながら見る。
Go1.12のapp.yaml構成を参考にYAMLファイルを書いてみます。
他の言語でもコア部分は同じですが必要なものがちょくちょく違います。
他言語についてはここから「APIとリファレンス→構成ファイル」を参照。
設定一覧
とりあえずドキュメントにあるものを書き出してみる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# キャッシュ保存時間 default_expiration: "4d 5h" # 環境変数、リソース名やパスワードとか? env_variables: BUCKET_NAME: "example-gcs-bucket" # エラーハンドル error_handlers: - error_code: over_quota # 割り当て上限 file: over_quota.html - error_code: timeout # タイムアウト file: over_timeout.html handlers: - url: /.* script: auto #ウォームアップ https://cloud.google.com/appengine/docs/standard/go112/configuring-warmup-requests?hl=ja #inbound_services: #- warmup # インスタンス ## automatic_scaling: F1、F2、F4、F4_1G ## basic,manual scaling: B1、B2、B4、B4_1G、B8 instance_class: B1 # メインパッケージのフォルダ指定 main: ./ # ランタイム名 runtime: go112 # サービス名 service: service-name #VPCコネクタ https://cloud.google.com/appengine/docs/standard/go112/connecting-vpc?hl=ja #vpc_access_connector: # name: "projects/[PROJECT_ID]/locations/[REGION]/connectors/[CONNECTOR_NAME]" # スケーリング(3つのうち1つを選ぶ) ## オートスケーリング ## 詳細まで設定できて自動でスケールする automatic_scaling: max_instances: 1 ## 基本スケーリング ## インスタンス最大数とインスタンス保持時間だけ決める basic_scaling: max_instances: 1 idle_timeout: 10m #10~3600s ## 手動スケーリング ## インスタンスの数を固定する manual_scaling: instances: 1 |
色々ありますがとりあえず気にするところを見てみます。
スケーリングとインスタンス
インスタンス時間に課金されるのでここが一番大事だと思います。
無料枠のインスタンス時間は次のようになっています。
1 日あたり 28 時間のフロントエンド インスタンス時間、1 日あたり 9 時間のバックエンド インスタンス時間
ドキュメントによってはバックエンドは8インスタンス時間と書かれています。
これは最低クラスのインスタンスF1、B1での時間でありF2、B2だと半分の時間になるようです。
バックエンドではデフォルトで使用されるインスタンスがB2なのには注意する。
またスケーリングは3種類から選べるが使えるインスタンスが異なる。
例えばbasic_scaling
でF1インスタンスを使おうとするとエラー。
INVALID_ARGUMENT: Instance class (F1) is only allowed with the automatic scaling value.
つまりフロントエンドサービスを作るのであればautomatic_scaling
一択。
インスタンスを無料内に制限するだけならこれでいいはず。
1 2 3 |
instance_class: F1 automatic_scaling: max_instances: 1 |
その他スケーリングキーはこちら。
ハンドラ
ハンドラ要素の詳細はこちらを参照しますが基本的にURLハンドリングはアプリ側でやるのでupload以外は省略してもいい気がします。
静的ファイルのサーブを設定することでインスタンス時間の節約やアプリ負荷を減らすことが出来そう。
1 2 3 4 5 6 |
handlers: - url: /html static_dir: html - url: /favicon.ico static_files: favicon.ico upload: favicon\.ico |
この設定でhtml
フォルダ内の静的HTMLファイルにアクセスしてもインスタンスが出来ませんでした。
files設定ではGAEにアップロードするファイルを正規表現で書いています。
処理内で画像やHTML、CSS、JSのような静的ファイルを利用する、あるいはサーブする場合には必要な分をupload設定しないといけない。
SSLリダイレクトも設定できます。
1 2 3 4 |
handlers: - url: /.* script: auto secure: always |
neverを指定するとHTTPへのリダイレクト設定もできる。
エラーハンドル(error_handlers
)の方はPaaS由来の割り当て上限エラーとタイムアウトに対応した静的ファイルを返せます。
何を返すべきなのかはわからないけど「時間をおいて下さい」とかかな。
サービスとインスタンス
概要にあるようにインスタンスはツリーの最下位にある。
Project→App Engine→サービス→バージョン→インスタンス のツリー構造。
service
でサービス名を指定しない場合にはdefaultサービスとして作られます。
そして同じサービスをデプロイするたびにバージョンが増えます。
そのうち管理できなくなると思うのでgcloud app deploy -v v1
のようにバージョンを指定してデプロイするのがよさそうかな。
新しいバージョンをデプロイすると自動でトラフィック割り当てされるので古いバージョンのインスタンスはそのうちなくなるはずですが、manual_scaling
の場合は残りそうなので停止したり削除する必要がありそうです。