GAE FEのdeployストレスを軽減する10の方法

GAE FEのdeployストレスを軽減する10の方法

「やっぱり AppEngine ja night #2」のLTで発表した資料です。

5bc984d78def65048378c439d77c379f?s=128

Tomoya Amachi

October 26, 2017
Tweet

Transcript

  1. GAE Flexible のdeploy ストレスを軽減する 10 の方法

  2. ター ゲット/ 目的 GAE 初心者向け 自分もまだ1 ヶ月いじった程度 その間にdeploy をどのように変更していったかを共有 有識者の方へ

    「 ぼくのかんがえたさいきょうのでぷろい」 つぶやき希望!!
  3. 自己紹介 天地 知也 ( あまち ともや) 略歴 看護師 ネイティブゲー ムのプロダクトマネー

    ジャ ネット広告の運用マネー ジャ システムエンジニアリングをさせてもらえないので 会社をつくり、 フリー のシステム屋
  4. 紹介するプロジェクトの概要 runtime : custom base : gcr.io/google‑appengine/php:latest

  5. デプロイ 2 大ストレス デプロイ時間が長い 複数環境への対応

  6. デプロイ時間が長い について

  7. デプロイプロセスを分解 g c l o u d a p p

    d e p l o y のプロセスをまず確認 1. ひもづくservice などをチェック ( 詳しくは知らない) 2. CloudBuilder にファイルを送る 3. CloudBuilder でimage をビルド i. ファイルをコンテナ内にCOPY ii. 管理されているパッケー ジを取得 4. ContainerResistory にimage をPush 5. Service を更新 ( 詳しくは知らない) 6. 安全に向き先を切り替え
  8. ビルドを速くする対策 1. GCE サー バでビルドしGCR へPUSH イメー ジを指定し、 直接デプロイ GCR

    への距離を短く CPU, メモリは環境ごとに要調整 2. 依存しているライブラリごとビルド ライブラリの初期インストー ルをなくす composer.json requires.txt etc...
  9. 向き先の切り替えを速く 3. 長いプロセスは分解しTaskQueue などを利用 ※ GAE Flexible はalpha (us‑central‑1 のみ申請したら利用可)

    ※ Pub/Sub で代替 4. Queue で利用するものはservice を分ける
  10. Makefile の一部 PHP の場合 d e p l o y

    : $ { E N V } c p - f $ ( T A R G E T _ D I R ) c o m p o s e r . j s o n $ ( T A R G E T _ D I R ) / c o m p o s e r c p - f $ ( T A R G E T _ D I R ) / c o m p o s e r . g a e . j s o n $ ( T A R G E T _ D I R ) # # # デプロイコマンド # # # c p - f $ ( T A R G E T _ D I R ) / c o m p o s e r . l o c a l . j s o n $ ( T A R G E T _ D I R ) p r o j e c t | - s e r v i c e 1 | | - c o m p o s e r . l o c a l . j s o n | | - c o m p o s e r . g a e . j s o n | | - / v a r / c o m p o s e r / v e n d o r / { 常に利用するライブラリ} | | - / v e n d o r / { G A E だけで必要なライブラリ} e x t - r e d i s , e x t - m b s t r i n g | - s e r v i c e 2 | . . . ( 同じ構成)
  11. 複数環境への対応 について

  12. 複数環境の構築 5. 環境ごとにGCP のプロジェクトを分ける 6. 環境ごとにビルド用サー バのプロジェクトを分ける 7. 全プロジェクトに、 全環境用の設定ファイルを入れる

    8. ルー ルをつくり、 バー ジョンは自動で採択
  13. None
  14. Makefile d e p l o y : $ {

    E N V } V E R S I O N = $ $ ( ( \ $ $ ( g c l o u d a p p v e r s i o n s l i s t - - s e r v i c e $ { S E R V I C E } - - p r o j e c | t a i l - 1 | a w k ' { p r i n t $ $ 2 } ' ) + 1 \ ) ) g c l o u d a p p d e p l o y a p p - $ { S E R V I C E } - $ { E N V } . y a m l \ - - q u i e t - - v e r s i o n $ { V E R S I O N } - - s e r v i c e $ { S E R V I C E } \ - - p r o j e c t p r o j - $ { E N V } p r o d : D o c k e r f i l e . p r o d c p - f $ ( P R O J E C T _ D I R ) / $ ( S E R V I C E _ D I R ) / D o c k e r f i l e . p r o d \ $ ( P R O J E C T _ D I R ) / $ ( S E R V I C E _ D I R ) / D o c k e r f i l e s t g : D o c k e r f i l e . s t g c p - f $ ( P R O J E C T _ D I R ) / $ ( S E R V I C E _ D I R ) / D o c k e r f i l e . s t g \ $ ( P R O J E C T _ D I R ) / $ ( S E R V I C E _ D I R ) / D o c k e r f i l e d e v : D o c k e r f i l e . d e v c p - f $ ( P R O J E C T _ D I R ) / $ ( S E R V I C E _ D I R ) / D o c k e r f i l e . d e v \ $ ( P R O J E C T _ D I R ) / $ ( S E R V I C E _ D I R ) / D o c k e r f i l e
  15. その他のストレス対策 9. 過去のバー ジョンを自動で消すように( お金節約対策) d e p l o

    y : $ { E N V } g c l o u d a p p v e r s i o n s d e l e t e - - q u i e t \ $ $ ( g c l o u d a p p v e r s i o n s l i s t - - p r o j e c t p r o j - $ { E N V } \ - - s e r v i c e $ { S E R V I C E } \ - - f i l t e r = S E R V I N G _ S T A T U S : S T O P P E D | a w k ' { p r i n t $ $ 2 } ' ) \ - - s e r v i c e $ { S E R V I C E } - - p r o j e c t b i z s h i f t - $ { E N V }
  16. その他のストレス対策 10. デプロイ開始と終了時にSlack に通知( デプロイまだ ですか? 対策) c u r

    l - X P O S T - - d a t a - u r l e n c o d e " p a y l o a d j s o n d a t a " \ h t t p s : / / h o o k s . s l a c k . c o m / s e r v i c e s / x x x x x x x x
  17. おわり