Slide 1

Slide 1 text

ALB + Lambda を活⽤した 既存システムのMicroservice化 Katsuhide Kayashima

Slide 2

Slide 2 text

•萱島 克英 •担当 •Cloud Migration •全社的な改善業務 •好きな技術 •ECS、EKS、GKE、Spinnaker ⾃⼰紹介

Slide 3

Slide 3 text

今⽇お話すること ALB Lambda と を使って モノリスな既存システム を Microservice化 しようとしているお話

Slide 4

Slide 4 text

•ALB + Lambda を選択した背景 •デプロイフロー •改善ポイント (期待値込み) •監視周り Agenda + = ?

Slide 5

Slide 5 text

Keynote Presentation ALB + Lambdaを選択した背景

Slide 6

Slide 6 text

•コンシューマ向けサービスの⼤半をAWS、GCPで運⽤ •アプリケーションはContainer化されており、ECS、EKS、GKE で運⽤ •Serverless の利⽤実績は少ない状況 NAVITIMEのバックエンド

Slide 7

Slide 7 text

既存の地図データ配信フロー Service A Service B 地図配信 Service Users ALB ALB ALB ECS ECS ECS (共通API)

Slide 8

Slide 8 text

既存フローの問題点 Service A Service B 地図配信 Service ALB ALB ALB ECS ECS ECS •ServiceA とServiceB はリクエストを Proxingしているだけ •地図配信リクエスト数は全体リクエストの 約6割 (共通API) Users

Slide 9

Slide 9 text

既存フローの問題点 Service A Service B 地図配信 Service ALB ALB ALB ECS ECS ECS •ServiceB には多数の 共通API が稼働 = モノリシック •EC2リソースをアクセスに合わせて無駄なく増減させるのは難しい  →無駄に起動しているEC2リソースが多少なり存在 Users (共通API)

Slide 10

Slide 10 text

これを ALB + Lambdaで剥がしたい

Slide 11

Slide 11 text

•ALB のバックエンドに Lambda が選択可能に! (Re:invent 2018) 良いタイミングで - その1

Slide 12

Slide 12 text

•VPC内の Lambdaに対する ENIのアタッチスピードが⼤幅に向上 ! 良いタイミングで - その2

Slide 13

Slide 13 text

Lambda導⼊後のフロー Service A Service B 地図配信 Service ALB ALB ALB ECS ECS ECS (共通API) Users Lambda

Slide 14

Slide 14 text

•無駄なコンピューティングリソースの削減 •モノリスなシステムから地図リクエストが剥がされることによる耐障 害性向上 •既存ECSインスタンスのスケール戦略が楽に ALB + Lambda構成に期待している事

Slide 15

Slide 15 text

Elite Slides Keynote Presentation Deploy & Improvement

Slide 16

Slide 16 text

Deploy 地図配信 Service Jenkins ALB ECS Alarm Topic AWS CloudFormation •CloudformationでLambda、ALB Targetgroup、Alarm、Topicを作成 •aws-sam-cli で作成したtemplate をベースに必要なリソースをappend

Slide 17

Slide 17 text

デプロイ 地図配信 Service Jenkins ALB ECS Alarm Topic AWS CloudFormation •Cloudformation の Template は1つ、アプリ毎に変動する部分だけ Parameterファイル化 Deploy Template.yaml アプリA⽤パラメータファイル + アプリB⽤パラメータファイル アプリC⽤パラメータファイル

Slide 18

Slide 18 text

Failover Service A Service B 地図配信 Service ALB ALB ALB ECS ECS ECS (共通API) Users Lambda Cloudformation の Stackを削除する事で、既存のルーティングに切り戻す

Slide 19

Slide 19 text

•API毎に 同時実⾏数の上限値 を設定 •上限値を超えた分は 502 がすぐに返却 改善ポイント API毎に Lambda を分けた事により、予期せぬ⼤量アクセスがあった場合でも バックエンドシステムの輻輳が起きにくくなる

Slide 20

Slide 20 text

Elite Slides Keynote Presentation 監視

Slide 21

Slide 21 text

Cloudwatch Prometheus & Grafana Datadog 監視ツール Lambda → Cloudwatchとのインテグレーションで簡単に監視できそう

Slide 22

Slide 22 text

実施した監視項⽬ 項⽬ 監視の⽬的 Errors • Lambda⾃体でエラーが発⽣していないか? • 例)Memory超過、Timeout Application Errors • アプリケーションでエラーが発⽣していないか? • 例)Upstreamからエラーが返却された • 例)Runtime Error Throttle Errors • 同時実⾏数の上限を超えていないか? Healthy Host Count • ALB → Lambdaのヘルスチェックが200で返っているか?

Slide 23

Slide 23 text

ご清聴ありがとうございました!