Slide 1

Slide 1 text

スタンバイにおけるECS on FargateからEKS on Fargateへ移行した話 2021年11月04日 1

Slide 2

Slide 2 text

自己紹介 吉田 芳弘 ○ Senior Site Reliability Engineer 技術 ○ AWS ○ Scala 興味 ○ DevOps(開発速度向上) 2

Slide 3

Slide 3 text

会社紹介 社名:株式会社スタンバイ(https://stanby.co.jp/) 代表:南 壮一郎 所属人数:207名(2021年10月1日時点) 沿革:2019年11月、Zホールディングス株式会社と株式会社ビズリー チ(現ビジョナル株式会社)との合弁事業会社として設立 ミッション:UPDATE WORKSTYLES 「はたらく」にもっと彩を 3

Slide 4

Slide 4 text

サービス紹介 求人検索エンジン「スタンバイ」
 https://jp.stanby.com/ 取扱求人数:1000万件以上
 (2020年8月時 点) CM公開中https://jp.stanby.com/cm 4

Slide 5

Slide 5 text

今日の話題 移行の計画から実際に移行するまでのジャーニー ○ 導入を検討している方への礎になれれば ○ 執筆時点のバージョンの話になりますので、後に修正されている可能性がありま す 5

Slide 6

Slide 6 text

アジェンダ 概要 ○ 移行の計画 ○ EKS on Fargateを選んだ理由 ○ 既存システムとの結合 ○ 切替方法 ○ 今後の展望 まとめ 6

Slide 7

Slide 7 text

それでは いってみよう 7

Slide 8

Slide 8 text

8 移行の計画

Slide 9

Slide 9 text

スタンバイのシステム概要 9 以下の3大機能 ○ 求人を集める ○ 求人を提供する ○ 広告を配信する 全てAWS上にあり、ほと んどがECS/Fargate 常時100台前後のコンテナ が稼働 求人を集める 求人を提供する 広告を配信する

Slide 10

Slide 10 text

EKS/Fargate移行対象 10 全て一気に移行は危険な ので、frontとweb-apiを対 象にした よく使われるメインの機 能なので、課題や不具合 を早く発見できることを 期待 移行対象 移行対象 求人を提供する

Slide 11

Slide 11 text

移行の計画 11 マイクロサー ビスの他に代 替案はなかっ たか? 達成したいこ とは何か? 移行中に起き た出来事

Slide 12

Slide 12 text

移行の計画 12 マイクロサー ビスの他に代 替案はなかっ たか? 達成したいこ とは何か? 移行中に起き た出来事

Slide 13

Slide 13 text

達成したいことは何か? デリバリーパフォーマンスを上げていきたい 13

Slide 14

Slide 14 text

達成したいことは何か? デリバリーパフォーマンスを上げていきたい ○ デプロイの頻度(特に) ○ 変更のリードタイム ○ MTTR(特に) ○ 変更失敗率
 Source:Google Cloud, Google Cloud で実行されている DevOps 組織の有効性を評価する
 https://cloud.google.com/blog/ja/products/gcp/another-way-to-gauge-your-devops-performance-according-to-dora 14

Slide 15

Slide 15 text

移行の計画 15 マイクロサー ビスの他に代 替案はなかっ たか? 達成したいこ とは何か? 移行中に起き た出来事

Slide 16

Slide 16 text

マイクロサービスの他に代替案はなかったか? 前提 ○ エンジニアの人数が今後急拡大する予定 ○ デリバリーパフォーマンスを計測して上げていきたい ■ 自動計測するためには、現在のシステムの変更、及び何かしらのツールの作成が必要 16

Slide 17

Slide 17 text

マイクロサービスの他に代替案はなかったか? MTGをおこなった ○ 弊社のサービスが抱えている課題を出す ○ それに対するソリューションを出す ○ グループ化する 17 例:

Slide 18

Slide 18 text

マイクロサービスの他に代替案はなかったか? kubernetesにしたら解決する課題が多かった ○ 環境(staging,production)ごとにDocker Imageを別々に生成している ○ 共通で使っているSideCarをupdateするのが大変 ○ Service Mesh を使ったカナリアリリース、サーキットブレーカーの導入 ○ 変更失敗率を下げたい ○ etc... ■ 作り込めば解決はできるが、我々のチームとしては、マネージドで解決できるならマネージドにしたい 18

Slide 19

Slide 19 text

マイクロサービスの他に代替案はなかったか? ただ、いつかは移行したいという意見は一致したが、今すぐ移行する かは、エンジニアの意見が全員一致はしなかった ○ 今後のスタンバイの事業拡大を考慮し、会社全体で移行を決定し、全面的にコ ミットして取り組むことに 19

Slide 20

Slide 20 text

移行の計画 20 マイクロサー ビスの他に代 替案はなかっ たか? 達成したいこ とは何か? 移行中に起き た出来事

Slide 21

Slide 21 text

突然ですが、 皆さんは 御存知でしょうか? 21

Slide 22

Slide 22 text

「モノリスから マイクロサービスへ」という書籍を! 22

Slide 23

Slide 23 text

移行中に起きた出来事 書籍に書いていることが実際に起きました! ○ 1ヶ月ぐらいたったときに、チームのメンバーから何で移行するんだっけ? ○ 調査したいことが無限に出てくる ○ etc… 書籍のまわし者ではないのですが、移行を検討する前に読了しておく ことをおすすめします 23

Slide 24

Slide 24 text

24 EKS on Fargateを選んだ理由

Slide 25

Slide 25 text

EKS on Fargateを選んだ理由 スタンバイのサービスはECS on Fargateで動いている ○ EC2と違ってインスタンスのことを考慮に入れないでscalingをしていたので、また新 しい仕組みを考えて実装するのはコストがかかる ○ あとでFargateにしようとすると、そこでまた新しい仕組みを考える必要がある ダメだったらEC2にしよう ○ 試しにやってみるかという軽い気持ちだった 25

Slide 26

Slide 26 text

EKS on Fargateの課題 DaemonSetが利用できない Podの起動が(場合によっては)遅い SecurityGroupPolicy未対応 26

Slide 27

Slide 27 text

EKS on Fargateアップデート 27

Slide 28

Slide 28 text

28 既存システムとの結合

Slide 29

Slide 29 text

既存システムとの結合 29 メトリクス ログ CD

Slide 30

Slide 30 text

既存システムとの結合 30 メトリクス ログ CD

Slide 31

Slide 31 text

既存システムとの結合(ログAS-IS) 31

Slide 32

Slide 32 text

既存システムとの結合(ログAS-IS) 32 ECSの情報やサー ビス名を取得して 設定している error logだけ Datadogに送信して slack通知をしている

Slide 33

Slide 33 text

EKS on Fargateに変えてい きたい 33

Slide 34

Slide 34 text

今できていることはでき るようにしたい 34

Slide 35

Slide 35 text

そんなに甘くない 35

Slide 36

Slide 36 text

既存システムとの結合(ログ) EKS on Fargateでサービスの情報が取れない ○ fluentbitのFilter(Kubernetes)が動かず、コンテナ情報が取れていない ■ issue(https://github.com/aws/containers-roadmap/issues/1197) 36

Slide 37

Slide 37 text

既存システムとの結合(ログTO-BE) 37

Slide 38

Slide 38 text

既存システムとの結合(ログTO-BE) 38 cloudwatch logsのlog groupには サービス名が出る。 subscription filterで後続に接続で きるようにした

Slide 39

Slide 39 text

既存システムとの結合 39 メトリクス ログ CD

Slide 40

Slide 40 text

既存システムとの結合 ASIS ○ Datadog Agent、Datadog Trace Agent、Datadog Integrationを使って様々なメト リクスを取得 40

Slide 41

Slide 41 text

既存システムとの結合 kubernetesのCluster情報が追加で欲しい ○ Datadog Cluster Agentを入れればOK? 41

Slide 42

Slide 42 text

そんなに甘くない 42

Slide 43

Slide 43 text

既存システムとの結合 Datadog Cluster Agentが基本的にはDaemonsetが前提 ○ install guide Podとしても動かせるとはドキュメントに書いてある ○ Helmのvalue値を色々調整して動かしました 43

Slide 44

Slide 44 text

既存システムとの結合 44 メトリクス ログ CD

Slide 45

Slide 45 text

既存システムとの結合 45 CodeBuildで ECRにpush 検証環境 ecspressoで Fargateに deploy CodeBuildでECR にpush 本番環境 ecspressoで Fargateにdeploy ASIS

Slide 46

Slide 46 text

既存システムとの結合 既存のシステムにも課題がある ○ 本番環境でもbuildをしている ○ deployをする前にe2e testの実行を行っていない ■ pull request merge前に行っている ○ DockerImageがlatest運用されている 46

Slide 47

Slide 47 text

どこまで一度に変更する か 47

Slide 48

Slide 48 text

今できていることはでき るようにしたい 48

Slide 49

Slide 49 text

既存システムとの結合 既存のdeployフローはそのままに、別のdeployフローを作成 ○ e2e test実行は一旦そのまま ○ 別のdeployフローにすることによって、切り戻しができるようにした Github ActionsとArgoCDでdeployフローを作成し、GitOpsの形に 49

Slide 50

Slide 50 text

既存システムとの結合 50 検証環境 本番環境 TOBE

Slide 51

Slide 51 text

既存システムとの結合 51 検証環境 本番環境 TOBE feature branch base開発だっ たので、この形 に code repositoryが複数ある ため、dispatchで別の Github Actionsを叩くよう にして共通化 git tagで指定した ものをpullしてき て別のECRに詰 め替え

Slide 52

Slide 52 text

52 切替方法

Slide 53

Slide 53 text

切替方法 53

Slide 54

Slide 54 text

切替方法 54 weightを変更するだけで切り替 えられるようにした これによって切り戻しも簡単に

Slide 55

Slide 55 text

55 今後の展望

Slide 56

Slide 56 text

今後の展望 今回変更したのは一部のサービスだけ ○ まずは横展開できるように運用してみてあがってきた課題を修正 56

Slide 57

Slide 57 text

今後の展望 デリバリーパフォーマンスの可視化 Blue Green Deployment、カナリアリリース 検証環境、QAテスト環境、負荷テスト環境を素早く増やす or リクエ ストをバイパスできる環境を用意することによって開発速度の向上 etc... 57

Slide 58

Slide 58 text

58 まとめ

Slide 59

Slide 59 text

まとめ ジャーニーの結果 ○ デリバリーパフォーマンスを計測する土台を作成することができた ○ 開発速度向上のための施策がしやすくなった 導入を検討している人に向けて ○ 「モノリスからマイクロサービスへ」は読んだ方が良い ○ ログやメトリクスは今のシステムのまま行けるのか先に調査することがおすすめ 59

Slide 60

Slide 60 text

まとめ まだまだ改善したいことは山積み!! 我々の旅はつづく... ○ @yoshihir_jp ○ @ryota_hnk ○ 大橋 香菜子 ○ 小宮 孝二 ○ ki38sato 60

Slide 61

Slide 61 text

メンバー募集しています! 人々の「はたらく」をアップデートしていく仲間を募集しています。 「株式会社スタンバイ エンジニア 求人」で検索 61 ソフトウェアエンジニア 広告エンジニア 検索エンジニア SRE データエンジニア 機械学習エンジニア QAエンジニア フロントエンドエンジニア モバイルアプリエンジニア サーチクオリティ エンジニアリングマネージャー CTO室/プロジェクトマネージャー CTO室/組織運営担当

Slide 62

Slide 62 text

No content