æçµæ´æ°æ¥ï¼2018/3/6
ããã«ã¡ã¯ãå°è¥¿ã§ãã
ããã¾ã§ç´¹ä»ãã¦ããGoogle App Engine(GAE)ã§ãããç¡ææ ã大ããã¨ã¯ãããã¡ãã£ã¨éãå¦çãããã¨ãã«ãªã¯ã¨ã¹ããç«ã¦ç¶ãã«æ¥ãã¨ãããã«2å°ä»¥ä¸ã¤ã³ã¹ã¿ã³ã¹èµ·åãã¦ãã¾ãã¾ãã
ã¤ã³ã¹ã¿ã³ã¹æéã®ç¡ææ ã¯28æéãªã®ã§ããã®ç¯å²å ã§æãããã¨ãéè¦ã§ãã
å æãæé50ä¸PVã»ã©ãããµã¤ããGAEã«ç§»è¡ãã1ã¶æã»ã©ç¡æã§éç¨ãããã¨ãã§ããã®ã§ããã®éã«ãã£ããã¨ããä¼ããã¾ãã
PHPã§è©¦ãããã®ã§ãããåºæ¬çã«ã¯Python, Go, Javaã®å ´åãåãã¯ãã§ãã*1
GAEã£ã¦ãªãããï¼ã¨ããæ¹ã¯ã¾ãã¯ãã¡ããã©ããï¼
さくっとPHPでサイト作るならGoogle App Engineが最高 - koni blog
Node.jsã®æ¹ã¯ç¡æã§ä½¿ããªãã¿ããã§ãã詳ããã¯ä¸çªä¸ã
ä½ã«èª²éãããã®ã
å®å ¨ç¡æã§éç¨ããããã«ãã¾ãã¯å ¬å¼ãµã¤ãã®Always Free ã®ãã¼ã¸ ã¨Google App Engine ã®æéãã¼ã¸ ã§ä½ã«èª²éãããã®ã確èªãã¾ãããã
ãã£ã¨ç¡æã§ä½¿ãããã®
ä¸è¨ï¼ã¤ãã¾ã¨ããã¨ä»¥ä¸ã«ãªãã¾ãã
- ã¤ã³ã¹ã¿ã³ã¹æéã28æéï¼æ¥
- ãããã¯ã¼ã¯ãã©ãã£ãã¯ï¼éä¿¡ï¼GAEâã¦ã¼ã¶ã¼ï¼ã1GBï¼æ
- ãããã¯ã¼ã¯ãã©ãã£ãã¯ï¼åä¿¡ï¼ã¦ã¼ã¶ã¼âGAEï¼ãç¡æ
- 5GBã®ã¯ã©ã¦ãã¹ãã¬ã¼ã¸ ï¼GCSã®ãã¨ã§ãï¼
- å ±æMemcacheãï¼GAEããã®ã¿ä½¿ãããã£ãã·ã¥ãµã¼ãï¼
- ã®æ¤ç´¢ãªãã¬ã¼ã·ã§ã³ã1000åï¼æ¥
- æ¤ç´¢ã¤ã³ããã¯ã¹ä½æã10 MB
- ã¡ã¼ã«ã100ä»¶ï¼æ¥
- DataStoreããã¼ã¿ä¿åï¼1GBï¼æ¥ãèªã¿åãã50000ä»¶ï¼æ¥ãæ¸ãè¾¼ã¿ã20000ä»¶ï¼æ¥
ãã®ç¯å²å ã§éç¨ãããã¨ã§ãç¡æéç¨ãå¯è½ã¨ãªãã¾ãã ããã«å ¥ã£ã¦ããªããã®ã¯ãããªã課é対象ã«ãªãã®ã§ãç¡æã§éç¨ãããå ´åã¯è«¦ãã¾ãã
å¿ ããããæéã¨ãã¦ã¯ãä¸çªä¸ã®ãã¤ã³ã¹ã¿ã³ã¹æéãã¨ã転ééã§ããããããã¯ã¼ã¯ãã©ãã£ãã¯ï¼éä¿¡ãåä¿¡ï¼ãã§ãã
åä¿¡ã¯ç¡æãªã®ã§ãGAEâã¤ã³ã¿ã¼ãããæ¹åã®ã¿èª²éããã¾ãããã®ãããã¯ä»ã®GCPã®ãããã¯ããAWSã¨åãã§ããã
ãã以å¤ã¯ä½¿ã£ãåã ã課éããã¾ããä»ã®é¨åãç¡æã§éç¨ããã®ã¯ãç¡ææ 以ä¸ä½¿ããªããã°ããã®ã§ãä¸è¬çãªæ¹æ³ã¨åãã§ãã memcachedã§ããã°å¿ è¦ãªåã ããã£ãã·ã¥ããã¨ããå¿ è¦ãªãã°ã ãéãã¨ãã«ãªãã¾ãã
ä»åã¯ãã¤ã³ã¹ã¿ã³ã¹æéã«ç¦ç¹ãå½ã¦ã¾ãã
ãªãGAEã§ã¯2011å¹´ã«æéä½ç³»ãå¤§å¹ ã«å¤æ´ããã¾ããããã¤ã¦ã¯PVãã¼ã¹ã§æéãæ±ºã¾ã£ã¦ããããã¾ãããããã®ã«ã¼ã«ã¯å»æ¢ã«ãªãã¾ãããGAEé¢é£ã§æ¤ç´¢ããã¨2010å¹´ããã®è¨äºãå¤ããããããã®ã§ã注æãã ããããã®è¨äºã¯ãããããããã2016å¹´ã¨æ¸ãã¦ããã¾ããï½
ã¤ã³ã¹ã¿ã³ã¹æé
ãã¤ã³ã¹ã¿ã³ã¹æéãã¯ãã¤ã³ã¹ã¿ã³ã¹ã®ç¨¼åå°æ°Ãæéãååä½ã§ç´¯ç©ãããã®ã§ãã 1æ¥ããã«è¨ç®ãããæ¯æ¥ãªã»ããããã¾ãããªã®ã§ã1æ¥ã ãç¡ææ ãè¶ ãã¦ã課é対象ã«ãªãã¾ãã ã¡ãªã¿ã«GAEã®1æ¥ã¯ãããªãã¿ã®PSTãªã®ã§ãJST-17ã«ãªãã¾ããã¤ã¾ãæ¥æ¬æé17æé ãªã»ããããã¾ãã*2
ã¤ã³ã¹ã¿ã³ã¹ã¯ã©ã¹ã«ã¤ãã¦ï¼2017/11/30追è¨ï¼
ãã¤ã³ã¹ã¿ã³ã¹æéãã¯ä»¥åã¯1種é¡ï¼F1
ï¼ã®ã¿ã§ãããã2016 å¹´ãããããæ¡å¼µãããä»ã®ã¤ã³ã¹ã¿ã³ã¹ã¯ã©ã¹ãé¸ã¶ãã¨ãã§ããããã«ãªãã¾ããã
F1
ã ã¨ã¡ã¢ãª128MBãCPU600MHz ã¨ãªã£ã¦ãã¾ãã
F2ã¯F1ã®2åã®ã¹ããã¯ã§ã ãããæéã2åã¨ãªãã¾ãããæéè¨ç®ã§ã¯ãF2ã1æéå©ç¨ããã¨F1ã2æéå©ç¨ããã¨ãã¦è¨ç®ããã¾ããã¤ã¾ãF2ã ã¨28/2=14æéããç¡æã«ãªãã¾ããã®ã§ã注æãã ããã
ã¤ã³ã¹ã¿ã³ã¹ã¯ã©ã¹ã«ã¤ãã¦ã®ããã¥ã¡ã³ã
ç¡æéç¨ããããã«ãããã¨
æ½çâ ãthreadsafeã«ãã
ããã¯åºæ¬ä¸ã®åºæ¬ãã¨ãããã¨ã«ãªãã¾ãã
ããã©ã«ãã§ã¯GAEã¯ãã·ãªã¢ã«ã«ã¢ã¯ã»ã¹ãå¦çãã¾ããã¤ã¾ãããããªã¯ã¨ã¹ãã®å¦çãçµããã¾ã§ã次ãå¦çã§ãã¾ããã ï¼ãªãã§ãããªä»æ§ã«ãªã£ã¦ãããã ã»ã»ã»ãwhy google people!!!ï¼
ããã§ãapp.yaml
ã«ä»¥ä¸ã追è¨ãã¾ããPHPã®å ´åã並åã«å¦çãããã¨ã¯ä¸è¬çãªã®ã§ããã«ããä¸å
·åã¯èµ·ãã«ããã¨æãã¾ãã
threadsafe: true
æ½çâ¡ãAutoScalingã®è¨å®ã®èª¿æ´
GAEã§ã¯ãã¢ã¯ã»ã¹æ°ã«å¿ãã¦ã¤ã³ã¹ã¿ã³ã¹ãèªå調æ´ãããããã«ãªã£ã¦ãã¾ãã
ããã©ã«ãã ã¨ããããããªãä¿å®çã¨ãããããã¤ãã¤ã¤ã³ã¹ã¿ã³ã¹ãç«ã¡ããªããªãæ»ãªãªãããã«ãªã£ã¦ãã¾ãã ããã ã¨28æéãè¶ ãã¦ãã¾ãã®ã§ã
- ã§ããã ãã¤ã³ã¹ã¿ã³ã¹ãç«ããªãããã«
- éå°ãªã¤ã³ã¹ã¿ã³ã¹ã¯ããè½ã¨ã
ã¨ãã調æ´ããã¾ãã
konisimpleã¨ãããµã¤ãã§å®éã«ä½¿ããã¦ããè¨å®ã¯ä»¥ä¸ã«ãªãã¾ãã ããããã®ãã©ã¡ã¼ã¿ã®æå³ãã³ã¡ã³ãã«æ¸ãã¦ããã¾ãã
automatic_scaling: min_idle_instances: automatic # idleç¶æ ã«ããã¤ã³ã¹ã¿ã³ã¹ã®æå°å¤ max_idle_instances: 1 # idleç¶æ ã«ããã¤ã³ã¹ã¿ã³ã¹ã®æå¤§å¤ min_pending_latency: 3000ms # ãªã¯ã¨ã¹ããå¦çããã¾ã§ã«è¨±ãããå¾ ã¡æéã®æå° max_pending_latency: automatic
ãã®è¨å®ã ã¨ã
- idleãªã¤ã³ã¹ã¿ã³ã¹ãã1ãè¶ ããã¨ãã¯è½ã¨ã(max_idle_instances)
- pending latencyã3ç§ãè¶ ãããinstanceãå¢ãã(min_pending_latency)
ã¨ããæåã«ãªãã¾ãã
å®éã®ã¤ã³ã¹ã¿ã³ã¹æ°ã®å¢æ¸ãè¦ã¦ã¿ã¾ãããã
1ã¨2ã§å¤§ä½æ¨ç§»ãã¦ãã¾ããã28ã¤ã³ã¹ã¿ã³ã¹æé以å ã«ããããã«ãåºæ¬ã¯1å°èµ·åãå¢ããæã ã2å°ã«ãããã¨ããæåã«ãªã£ã¦ãã¾ããã
æ½çâ¢ãstatic serverãæ´»ç¨ãã
js, cssãç»åãªã©ãéçãªã³ã³ãã³ãã¯ãstatic serverããé ä¿¡ããããã«ããã¨ãã¤ã³ã¹ã¿ã³ã¹æéãä¸åæ¶è²»ããã転ééã®ã¿ã§æ¸ã¿ã¾ãã
ãã®è¨å®ã¯ãapp.yaml
ã«ä»¥ä¸ã®ããã«æ¸ãã¾ãã
handlers: # ç»åãå ¥ã£ã¦ãããã£ã¬ã¯ããª/img ãã¾ããã¨static serverããé ä¿¡ããå ´å - url: /img static_dir: img # 1ãã¡ã¤ã«ã ãstatic serverããé ä¿¡ããå ´å - url: /img/example.png static_files: img/example.png upload: img/example.png
æ½çâ£ãã¨ãã¸ãã£ãã·ã¥ãæ´»ç¨ãã
GAEã¯ãã¨ãã¸ãã£ãã·ã¥ã«å¯¾å¿ãã¦ãã¾ããã¨ãã¸ãã£ãã·ã¥ã¯ãã®ãããå¼·åã§ãã
cssãjsãç»åãªã©ã®éçãªã½ã¼ã¹ã¯ããããã¤ç´å¾ããstatic serverããé ä¿¡ãããã®ã§ããã®ããã¤ã³ã¹ã¿ã³ã¹æéãå ¨ãæ¶è²»ãã¾ããã HTMLã®é ä¿¡ã¯ãåºæ¬çã«ã¤ã³ã¹ã¿ã³ã¹æéãæ¶è²»ãã¾ãã è¿å´ããHTMLã®å 容ããå ¨ã¦ã¼ã¶ã¼ã«å¯¾ãã¦å ¨ãåãã§è¯ãå ´åã¯ãHTMLã®é ä¿¡ãã¨ãã¸ãã£ãã·ã¥ãæ´»ç¨ãã¾ãããã
å©ç¨æ¹æ³ã¯ç°¡åã§ãããã£ãã·ã¥ãã¦æ¬²ãããã¼ã¸ã®HTTPã¬ã¹ãã³ã¹ãããã«ä»¥ä¸ã追è¨ããã ãã§ãã PHPã§ã¯ä»¥ä¸ã®ã³ã¼ãã§å®ç¾ã§ãã¾ãã
header("cache-control: public, max-age=3600");
3600ã®ã¨ããã¯ä½ã§ãæ§ãã¾ããã
ãã®ããããè¿ããæ°åå©ãã¨ã以éã¯ãã£ãã·ã¥ã使ããã¾ãã ã¡ãªã¿ã«GAEã西海岸ãªã¼ã¸ã§ã³ã§ä½¿ãã¨æ°ç¾msãã©ã¦ã³ãããªããã§ããã£ã¦ãã¾ãã¾ãããã¨ãã¸ãã£ãã·ã¥ã«ä¹ã£ãã³ã³ãã³ãã¯50msãããã§å¸°ã£ã¦ãã¾ããããã¯å°æ¹¾ããè¿ã£ã¦ãããã®ã¨æããã¾ãã*3
2016å¹´11æãæ±äº¬ãªã¼ã¸ã§ã³ã§ãå©ç¨ã§ããããã«ãªã£ãã®ã§ãã¨ãã¸ãã£ãã·ã¥ä½¿ããªãã¦ãã©ã¦ã³ãããªããã¯æ°åmså°ã«ãªãã¾ããï¼ ãã ãç¡æéç¨ã¨ããç¹ã§ã¯ãã¤ã³ã¹ã¿ã³ã¹ãåãããªããã¨ããã¢ãªã®ã§ããã®æ¹æ³ã¯å¼ãç¶ãéè¦ã§ãã
ãã£ãã·ã¥ã«è¼ã£ã¦ããã確èªãã
GAEã«ä¹ã£ã¦ãããã®ãµã¤ããChromeã®ã¤ã³ã¹ãã¯ã¿ã§è¦ãæ§åã§ãã50msç¨åº¦ã§ã¬ã¹ãã³ã¹ãæ¥ã¦ãã¦ãã¬ã¹ãã³ã¹ãããã«Age
ã¨ãããã£ã¼ã«ãã追å ããã¦ããã®ããããã¾ããããããã£ãã·ã¥åå¾ããã®ç§æ°ã§ãã
æ½çâ¤ããã£ãã·ã¥ã§ããã³ã³ãã³ããmemcacheã«ã®ãã
ããã¯ä¸è¬çãªæ¹æ³ãªã®ã§å²æãã¾ãã
äºç®è¨å®
ä¸è¨ã®æ¹æ³ã§ãç¡æã§ã®éç¨ãã§ããããã«ãªãã¾ããã
ä¸å¿ä¸å®ãªãããäºç®ããè¨å®ããããä¸å®ã®éé¡ã«éãããã¢ã©ã¼ããé£ã°ããã¨ãã§ãã¾ãã
ãã®ä»ã®æ¹æ³
å®ã¯ãGAEã®ã¤ã³ã¹ã¿ã³ã¹æ°ã®å¶å¾¡æ¹æ³ã¯ä»¥ä¸ã®3種é¡ããã¾ãã
- Basic Scaling
- Manual Scaling
- Automatic Scaling
é常ãµã¤ããéç¨ããå ´åã¯ãã¢ã¯ã»ã¹æ°ã«å¿ãã¦ã¤ã³ã¹ã¿ã³ã¹æ°ãæè»ã«å¤ãããã¨æãã®ã§ããã®è¨äºã§ã¯Automatic Scaling ã鏿ãã¾ããããããã絶対ã«1ã¤ã³ã¹ã¿ã³ã¹ã ãã§éç¨ããããã¿ãããªå ´åã¯ã
- Manual Scalingã«ãã¦ã
instances
ãåºå®å¤ã«ãã - Basic Scalingã«ãã¦ã
max_instances
ãåºå®å¤ã«ãã
ã¨ãã対å¿ãå¯è½ã§ãããããã ã¨ã¢ã¯ã»ã¹å¢ã«å¯¾ãã¦å¯¾å¿ã§ããªãå ´åãããã®ã§ãé常ã®ãµã¤ãã§ã¯ãã¾ã使ããã¨ã¯ãªãã¨æãã¾ãã
詳細ã¯ãã¡ãï¼
An Overview of App Engine | App Engine standard environment for PHP | Google Cloud
ã¾ããJavaãPythonã®å ´åã¯ã1ã¤ã³ã¹ã¿ã³ã¹ãåæã«å¦çã§ãããªã¯ã¨ã¹ãæ°ãè¨å®ããmax_concurrent_requests
ã¨ããè¨å®ãããããããä¸ãããã¨ããæ¹æ³ãåãããã§ãã
ã¡ãªã¿ã«ããã¯PHPçã¯å¯¾å¿ãã¦ãã¾ããã*4詳細ã¯ä»¥ä¸ãã覧ãã ããã
An Overview of App Engine | App Engine standard environment for Java | Google Cloud
ã¾ã¨ã
ãã¨ã¯ããå®å ¨ã«æ¾ç½®ãã¬ã¼ã§OKã§ããç´ æµã§ããã
GAEé¢é£ã®ä»ã®è¨äº
SSLè¨¼ææ¸ãå®å ¨ç¡æã§éç¨ãã¾ãããï¼ï¼ koni.hateblo.jp
PHPã§ããã£ã¨ä½ãå ´åã®GAEã®ç¹å¾´ãã¾ã¨ãã¾ããï¼ koni.hateblo.jp
PHPã§ã5åã§åããã¨ããã¾ã§è¡ããã³ãºãªã³ãªè¨äºã§ãï¼ koni.hateblo.jp
åèãµã¤ã
追è¨(2015/1/6 15:40)
Google App Engineãç¡æã§éç¨ããæ¹æ³ï¼2017å¹´çï¼ - koni blogb.hatena.ne.jpåèã«ãªãã¾ãããã¡ãªã¿ã«ããã¯ä½ããã®PHPãã¬ã¼ã ã¯ã¼ã¯ã使ç¨ãã¦ãã¾ããï¼
2016/01/06 14:52
PHPã®CodeIgniterã¨ãããã¬ã¼ã ã¯ã¼ã¯ã使ã£ã¦ãã¾ãã ãã¬ã¼ã ã¯ã¼ã¯ãåé¡ãªãåãã¦ãã¾ãã
Flexible Environmentã«ã¤ã㦠(2016/10/3追è¨)
ãã®è¨äºã¯ãApp Engine Standard Environmentãã®ãã®ã§ãã
è£ã§VMãç«ã¡ä¸ãã£ã¦SSHãã°ã¤ã³ãã§ãããããããApp Engine Flexible Environmentãï¼æ§Managed VMs=MVMsï¼ã§ã¯ã¾ãå¥ã®å¯¾å¿ãå¿ è¦ããã§ãã
Node.jsã®å ´åãStandard Environmentã¯ãªããFlexible Environmentã®ã¿ãããªãã¨ã®ãã¨ã ãªã®ã§ãç¡ææ ã¯ä½¿ãã¾ããã
éã«PHPã¯Flexible Environmentã«ã¯ããã©ã«ãã§ã¯ãããã対å¿ãã¦ãã¾ãããCustom Runtimeã§å®è¡ãããã¨ã¯å¯è½ãããã¾ãããã¾ã§ãããªãGCEããªã
Google App Engine を安く Node.js で使う - Qiita
æ±äº¬ãªã¼ã¸ã§ã³éè¨ã«ã¤ã㦠(2016/11/15 追è¨)
æ±äº¬ãªã¼ã¸ã§ã³ãéè¨ããGAEã使ããããã«ãªãã¾ããã ç±³å½ã»ã¨ã¼ãããã®ãªã¼ã¸ã§ã³ã¨æ¯ã¹ãã¨ã3å²ã»ã©é«ãã§ãã
æ´æ°å±¥æ´
2017/1/30ï¼ã¤ã³ã¹ã¿ã³ã¹ã¯ã©ã¹ã«ã¤ãã¦è¿½è¨ï¼
*1:Javaã®å ´åã¯ãã¯ã©ã¹ãã¼ããæ¯åèµ°ãã®ãé ãäºã ã¨ãã話ã対å¿ãå¿ è¦ãããã
*2:ãDaily quotas are replenished daily at midnight Pacific timeãhttps://cloud.google.com/appengine/docs/quotas?hl=ja
*3:2015/1/7 9:00 é ããã³ã¡ã³ãããä¿®æ£ãã¾ãã
*4:ãautomatic_scaling.max_concurrent_requests not available for php55 runtime.ãã¨ããã¨ã©ã¼ãåºã¾ãã