Slide 1

Slide 1 text

Nov 9, 2022 C - 1 [Amazon EKS on AWS Fargate] スタートアップの "次の3年" を支えるためのインフラ技術 池内 孝啓 - Takahiro Ikeuchi Awarefy CTO

Slide 2

Slide 2 text

Agenda 自己紹介 スタートアップにとっての技術選定とは これまでの3年と、mBaaS の運用で生まれた課題 "次の3年" を支えるためのインフラ技術 まとめ 1. 2. 3. 4. 5. 💡 本資料はセッション後に公開いたします

Slide 3

Slide 3 text

池内 孝啓(いけうち たかひろ) 株式会社Hakali 取締役CTO 自己紹介 Web フロントエンド、モバイル、バックエンドからインフラまで こなすマルチスタック・ソフトウェアエンジニア。 2015年に株式会社ALBERTにて東証マザーズへのIPOを経験。その後起業〜廃業を経て 2019年より現職。デジタル認知行動療法アプリ Awarefy を 2020年にローンチ。 アマゾンウェブサービス(AWS)利用歴10年〜。

Slide 4

Slide 4 text

執筆技術書 著者ページ : https://www.amazon.co.jp/~/e/B00W961N5O

Slide 5

Slide 5 text

Follow me! https://github.com/iktakahiro https://iktakahiro.dev/ @iktakahiro https://www.awarefy.app 5

Slide 6

Slide 6 text

私たちが解決したいこと 国内外の精神疾患患者数は年々増加傾向に あり、近年特にうつ病をはじめとする 気分障害の患者数が急速に増加。 こころの病気は生涯を通じて5人に1人が かかるとも言われています。 資料:厚生労働省「患者調査」 https://www.mhlw.go.jp/toukei/list/10-20.html

Slide 7

Slide 7 text

メンタルヘルスに課題を抱えた人に対する 適切なケアが十分に届いていない・わかりやすく 提供されていない。 時間的制約・距離的制約・精神疾患に対するスティグマ 課題 いつでも気軽に取り組めるアプリを通じて、 メンタルケアを自分で・簡単に・わかりやすく 行えるような仕組みを提供する。 解決策 わたしたちが実現したいこと

Slide 8

Slide 8 text

デジタル認知行動療法アプリ「Awarefy」

Slide 9

Slide 9 text

カラダとココロの状態に気づく ことができると、安心します。 毎日のセルフモニタリング コンディション 寝る前や朝起きたときに、 自分を整える習慣ができました。 自分の感情を客観的に理解できる いい機会になっています。 感情メモ 自分の感情がひと目で分かる 解決策:認知行動療法をアプリで © Hakali Inc. 豊富なマインドフルネス瞑想 音声ガイド

Slide 10

Slide 10 text

シード 〜 アーリーステージのスタートアップにとって 技術選定とは 10

Slide 11

Slide 11 text

5 〜 10年くらい ? スタートアップのステージ シード アーリー ミドル レイター

Slide 12

Slide 12 text

スタートアップのステージ シード アーリー ミドル レイター イマココ

Slide 13

Slide 13 text

エンジニア人数 1-3人 プロダクトの不確実性 極めて高い 最優先事項 Problem Solution Fit シード期の状況 ※ 企業や事業ドメイン、マーケットによってことなります

Slide 14

Slide 14 text

シード期の技術選定 Pivot をくり返す可能性が高いため、システムの作り込みを できるだけ遅延させる No-Code, Low-Code で進めるならそれがベスト BaaS, mBaaS の活用を有力選択肢に入れておく

Slide 15

Slide 15 text

エンジニア人数 2-5人 プロダクトの不確実性 高い 最優先事項 Product Market Fit アーリー期の状況 ※ 企業や事業ドメイン、マーケットによってことなります 15

Slide 16

Slide 16 text

アーリー期の技術選定 プロダクトや事業の不確実性は依然として高い PMFに向けた仮説検証のアジリティを確保しつつ 将来のスケーラビリティ確保に向き合う シード期のシステムのリアーキテクチャを行うかも含めて 意志決定を迫られる難しい時期

Slide 17

Slide 17 text

技術選定 = 投資であり、事業戦略 技術選定は将来に向けて 行われるべき 採用 生産性 コスト 楽しさ 将来性 安定性 キャリア ブランド どこに投資するかという 意志決定もある トレンド 好み

Slide 18

Slide 18 text

これまでの3年

Slide 19

Slide 19 text

おもな技術スタック - 2019 〜 2021 Flutter mBaaS モバイルアプリ NoSQL on mBaaS

Slide 20

Slide 20 text

Flutter 1ソースで iOS / Android の両プラットフォームに対応できる デスクトップアプリやWebアプリにも拡張可能 エコシステムが充実しており開発体験に優れる 選定の理由 エンジニアが少数(というか1名)だったため これからムーブメントが来そうという予感がしていたため 20

Slide 21

Slide 21 text

NoSQL on mBaaS インフラの管理、バックエンドアプリの実装と運用を (ほぼ)用意しなくてよいのが最大の利点 エンジニアが(以下同文 Flutter との相性がよい(と思った) 選定の理由

Slide 22

Slide 22 text

NoSQL のデメリットの顕在化 サーバーサイド・アプリがないことのデメリットの顕在化 悩んだ点 Flutter の選定 プロダクトのローンチの成功、運用面での大きな障害が 起きなかった → mBaaS の力によるところが大きい 良かった点 ローンチして2年、技術選定のふり返り

Slide 23

Slide 23 text

NoSQL on mBaaS の運用で生まれた課題 データの集計がし難い、できない データの正規化ができない バックアップ、リストアのオペレーションが不安 アクセス設定、セキュリティ周りの権限設定に柔軟性がない

Slide 24

Slide 24 text

いずれも、導入時点で想定しうる内容ではある 事業フェーズとのミスマッチが思っていたよりは早く 来てしまった。あくまでマッチングの問題 NoSQL on mBaaS の運用で生まれた課題

Slide 25

Slide 25 text

将来のための リアークテクチャ 直近の スピード感 変えるべきか、留まるべきか、それが問題だ。 25

Slide 26

Slide 26 text

中長期でみて事業のスピード感が損なわれれば、意志決定は 妥当ではなかったと見なされる うまくいけば、成功事例と見なされる どのような技術選定をしても、 事業が成長しなければ(事業的な)価値はない

Slide 27

Slide 27 text

NoSQL や mBaaS のデメリットの解消 解決したかったこと ではなく

Slide 28

Slide 28 text

ビジネスモデルとシステムアーキテクチャを統合し、 Moat(競合優位性)を生み出すこと 解決したかったこと

Slide 29

Slide 29 text

2020年5月ローンチ、mBaaS による完全サーバーレス 2022年7月にAWSに移行を実施 2022年2月頃より移行準備を開始

Slide 30

Slide 30 text

"次の3年" を支えるためのインフラ技術 30

Slide 31

Slide 31 text

mBaaS のデメリットを解消しつつ たしかにあったメリットをできるだけ失わないこと 少人数で運用できるよう自動化・コード化を前提とする 技術的挑戦をする・攻めの姿勢! インフラ移行・リアーキテクチャのテーマ

Slide 32

Slide 32 text

目的はあくまでも Moat(競合優位性)を生み出すこと

Slide 33

Slide 33 text

おもな技術スタック - 2022 〜 Flutter Go Protocol Buffers / gRPC PostgreSQL GitHub Actions Argo CD

Slide 34

Slide 34 text

構成図

Slide 35

Slide 35 text

AWSのおもな採用サービス・ツール Amazon Elastic Kubernetes Service (EKS) AWS Fargate Amazon Aurora Serverless v2 AWS Cloud Development Kit (CDK) 35

Slide 36

Slide 36 text

Flutter 続投 選定の理由

Slide 37

Slide 37 text

Go ミニマルなバックエンドシステムとしての豊富な採用実績 コンテナ運用との相性の良さ 選定の理由

Slide 38

Slide 38 text

選定の理由 Protocol Buffers / gRPC インターフェースドリブンなシステム設計 クライアント(Dart)、サーバー(Go)のコードの自動生成 alt-RESTFul API としてのナレッジを獲得するため gRPCのWebサーバーをAWSで運用するTipsはのちほど

Slide 39

Slide 39 text

Amazon Elastic Kubernetes Service (EKS) リリースまでの最短ルートを目指すなら Amazon Elastic Container Service (Amazon ECS) も 選択肢に 技術投資をするなら Kubernetes と判断 AWS CDK との組み合わせで構築コストを最小化(後述) 選定の理由

Slide 40

Slide 40 text

AWS Fargate - (Amazon EKS on AWS Fargate) Amazon EKS において Amazon Elastic Compute Cloud (Amazon EC2) を運用しないための唯一の選択肢 サーバーレスの継続 選定の理由 40

Slide 41

Slide 41 text

Amazon Aurora Serverless v2 No-NoSQL(つまりRDB)な DBの選択肢としては一択 フルマネージドの利点と、サーバーレスの利点を合わせ持つ 2022年4月22日に一般公開されたばかり 技術的挑戦を忘れない 選定の理由

Slide 42

Slide 42 text

AWS Cloud Development Kit (CDK) AWS CloudFormation を管理していく戦略のひとつとして 途中から Infrastructure as Code の大変さを被らないため に最初から投入していく TypeScript バージョンを採用 選定の理由

Slide 43

Slide 43 text

Amazon EKS の採用について Q1. マイクロサービス化しているの? A1. していません Q2. アクセス数が膨大だったりするの? A2. まだまだ伸びしろあります (累計約 20万ユーザー)

Slide 44

Slide 44 text

Amazon Elastic Container Service (Amazon ECS) もじゅうぶん巨人ですけどね 少人数のチームが(マイクロサービス化もしていないのに) Amazon EKS を採用する理由 巨人( = k8s エコシステム)の肩に乗る 一度構築できてしまえば運用は大変ではない 構築は Amazon EKS Blueprints for CDK がオススメ(次頁)

Slide 45

Slide 45 text

AWS の構成管理を「コード」で行える TypeScript や Python、Go、Java などをサポート https://github.com/aws/aws-cdk https://docs.aws.amazon.com/cdk/v2/guide/multiple_languages.html AWS Cloud Development Kit (CDK) 45

Slide 46

Slide 46 text

Amazon EKS のための Amazon CDK TIPS

Slide 47

Slide 47 text

Q. Cloud Formation で Infrastructure as Code は実現できるのではでしょうか?

Slide 48

Slide 48 text

たしかにそうですが、 あれは YAML です。

Slide 49

Slide 49 text

AWS の構成管理を「コード」で行える https://github.com/aws/aws-cdk AWS Cloud Development Kit (CDK)

Slide 50

Slide 50 text

AWS CDK を使うことで YAML職人から脱却できる 50

Slide 51

Slide 51 text

AWS Cloud Development Kit (CDK)

Slide 52

Slide 52 text

とにかく依存関係が多い Amazon Virtual Private Cloud (Amazon VPC) Subnet groups, AWS Security Groups etc... 構築に20分程度はかかり試行錯誤が大変 AWS CDK + Amazon EKS つまづきポイント

Slide 53

Slide 53 text

AWS Cloud Development Kit (CDK) https://aws-quickstart.github.io/cdk-eks-blueprints/ Well-Architected な Amazon EKS クラスターを構築するための 秘伝(?)のレシピが搭載されたライブラリ群

Slide 54

Slide 54 text

たったこれだけのコードで(※) Amazon VPC の設定にはじまり、ネットワークレイヤの設定を 自動で行ったうえで Amazon EKS の構築を始めてくれる(!) ※ 実際はもうちょっと書きますが、全体で50行くらい

Slide 55

Slide 55 text

External Secrets Operator (ESO) や Argo CD など、 Kubernetes の運用に必要なサービスをあわせて導入できる 豊富な Addon 55

Slide 56

Slide 56 text

Infrastructure as Code / GitOps Open ID Connect で GitHub 上の 特定リポジトリからのCDK実行を許可 https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/about-security- hardening-with-openid-connect

Slide 57

Slide 57 text

Amazon EKS 構築 TIPS

Slide 58

Slide 58 text

AWS の構成管理を「コード」で行える https://github.com/aws/aws-cdk AWS Cloud Development Kit (CDK) Amazon EKS Blueprints その後 Amazon EKS のクラスタ構築後は、 Kubernetes Manifest を書こう AWS の関心事が関係する Manifest は 仕様やバージョンに特に注意して進める

Slide 59

Slide 59 text

Elastic Load Balancing (ELB) / Application Load Balancer (ALB) は Ingress として定義する

Slide 60

Slide 60 text

Protocol Buffers / gRPC(再掲) インターフェースドリブンなシステム設計 クライアント(Dart)、サーバー(Go)のコードの自動生成 alt-RESTFul API としてのナレッジを獲得するため 選定の理由 60

Slide 61

Slide 61 text

AWS の構成管理を「コード」で行える https://github.com/aws/aws-cdk AWS Cloud Development Kit (CDK) gRPC を対象とする Web アプリを運用する場合、下記3つに注意 ALB 関連のオプションを gRPC 向けの内容にする ALB からのヘルスチェックにアプリ側で応答する Pod(コンテナ)内のヘルスチェックに対応する

Slide 62

Slide 62 text

ALB からのヘルスチェックにアプリ側で応答する ALB からのヘルスチェックにアプリ側で応答する 定義したパス(サービス)で所定のレスポンスを返す https://github.com/grpc-ecosystem/grpc-health-probe grpc-health-probe の利用が便利

Slide 63

Slide 63 text

AWS の構成管理を「コード」で行える https://github.com/aws/aws-cdk AWS Cloud Development Kit (CDK) AWS Fargate 用の Deployment 1 Pod = 1 Fargate Node vCPUとメモリの値を指定

Slide 64

Slide 64 text

AWS の構成管理を「コード」で行える https://github.com/aws/aws-cdk AWS Cloud Development Kit (CDK) Amazon EKS on AWS Fargate 注意点 Daemon Set 未対応 シークレット管理の選択肢が限られる Sidecar は対応してます AWS Graviton プロセッサ未対応 対応に期待

Slide 65

Slide 65 text

AWS の構成管理を「コード」で行える https://github.com/aws/aws-cdk AWS Cloud Development Kit (CDK) Amazon EKS とシークレット管理 スマートな解決策は現状提示されていない https://github.com/aws/secrets-store-csi-driver-provider-aws https://github.com/external-secrets/external-secrets Secrets Store CSI Driver が有力だが、Daemon Set の使えな い AWS Farget では利用できない External Secrets Operator を採用 65

Slide 66

Slide 66 text

Amazon EKS 運用 TIPS

Slide 67

Slide 67 text

AWS の構成管理を「コード」で行える https://github.com/aws/aws-cdk AWS Cloud Development Kit (CDK) RDB マイグレーションどこでやろう問題 シークレット管理と並ぶ運用課題2大あるあるの1つ Pod の起動前に DBマイグレーション こっちも起動したから DBマイグレーション Replica set : 2

Slide 68

Slide 68 text

AWS の構成管理を「コード」で行える https://github.com/aws/aws-cdk AWS Cloud Development Kit (CDK)

Slide 69

Slide 69 text

AWS の構成管理を「コード」で行える https://github.com/aws/aws-cdk AWS Cloud Development Kit (CDK) Amazon EKS とDB マイグレーション Argo CD を使おう Manifest 運用を GitOps で遂行するための便利ツール https://argoproj.github.io/

Slide 70

Slide 70 text

Infrastructure as Code / Git Ops GitHub 上の差分を検知して Manifest を適用(SYNC) SYNC の前後に HOOK を仕込むことが できる この仕組みを利用して、 DB マイグレーションを実行する 70

Slide 71

Slide 71 text

移行プロジェクトの結果

Slide 72

Slide 72 text

AWS の構成管理を「コード」で行える https://github.com/aws/aws-cdk AWS Cloud Development Kit (CDK) 技術チーム約3名で、インフラ設計、バックエンド実装、 データマイグレーションを遂行 構想8ヶ月、実行半年 もちろん課題や積み残しはあるものの、AWS 化計画を達成 移行プロジェクトの結果

Slide 73

Slide 73 text

まとめ

Slide 74

Slide 74 text

なぜ "3年" なのか シード アーリー ミドル レイター 恐らく3年後には次の次のステージを (チームが)見据えているはず そのときまで事業をブーストできる インフラ基盤をいまつくる

Slide 75

Slide 75 text

No content

Slide 76

Slide 76 text

See you again at the next stage!! @iktakahiro