Slide 1

Slide 1 text

Web APIのAWS Lambda移行で工夫したこと 2024-05-22 アーキテクチャを突き詰める Online Conference https://findy.connpass.com/event/314782/ ENECHANGE株式会社 VPoT兼CTO室マネージャー 岩本 隆史

Slide 2

Slide 2 text

岩本 隆史 (iwamot) 現職:ENECHANGE 全社的な技術施策の提案~実行 前職:AWS Japan クラウドサポートアソシエイト AWS Community Builder (2024~) カテゴリ:Cloud Operations

Slide 3

Slide 3 text

移行の背景

Slide 4

Slide 4 text

電力使用量予測マイクロサービス https://enechange.jp/try/input

Slide 5

Slide 5 text

Elastic Beanstalk (Docker) で運用 https://aws.amazon.com/jp/elasticbeanstalk/

Slide 6

Slide 6 text

全社的なElastic Beanstalk卒業の気運 EOLになるプラットフォームから新しいバージョンへのアップグレードはメジャ ーバージョンアップになり、既存の環境とは別に新しい環境を作成する必要があ ります。 https://dev.classmethod.jp/articles/eb-platform-versionup-with-existing-config/

Slide 7

Slide 7 text

無駄なALBを発見

Slide 8

Slide 8 text

移行先の検討

Slide 9

Slide 9 text

EKS? ECS? Lambda?

Slide 10

Slide 10 text

EKSは学習コストがかかるので除外

Slide 11

Slide 11 text

APIはエンドポイント1つだけ POST /predict

Slide 12

Slide 12 text

Lambdaに決定

Slide 13

Slide 13 text

移行で工夫したこと

Slide 14

Slide 14 text

コンテナイメージの最適化 まず、可能な時はいつでもAWS が提供するベースイメージをコンテナイメージの 出発点として使用します。次に、マルチステージビルドを使用して、不要なレイ ヤやファイルを最終イメージに追加しないようにします。 https://aws.amazon.com/jp/blogs/news/optimizing-lambda-functions-packaged-as- container-images/ ベースイメージを python:slim から public.ecr.aws/lambda/python に変更 最終イメージから機械学習モデルの訓練データを削除

Slide 15

Slide 15 text

「プロビジョニングされた同時実行」の設定 Lambda が呼び出しを実行するために新しい環境を初期化しなければならない状 況は、コールドスタートとして知られています。コールドスタートを緩和するた め、プロビジョニングされた同時実行を使用できます。 https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda- concurrency.html#reserved-and-provisioned

Slide 16

Slide 16 text

「プロビジョニングされた同時実行」の設定 使用率が50%を超えたらスケールするようApplication Auto Scalingを設定

Slide 17

Slide 17 text

可用性とレイテンシの監視 SLOを策定 期間:28日間 可用性:99.9%以上 レイテンシ:正常系レスポンスの95パーセンタイルが0.08秒以下 レイテンシ:正常系レスポンスの50パーセンタイルが0.06秒以下 エラーバジェットのバーンレート監視を内製ツールで開始

Slide 18

Slide 18 text

リトライ実装の依頼 Web API パターンのクライアントで行うべきエラーハンドリングの 1 つとしてリ トライがあります。 リクエスト頻度の制限 (=スロットリング) や、一時的な障害、ネットワーク起因 によるエラーなど一時的なエラーにはリトライで対応します。 https://aws.amazon.com/jp/builders-flash/202307/serverless-error-handling-2/ 開発チームにAPIエラー時のリトライ実装を依頼

Slide 19

Slide 19 text

移行後

Slide 20

Slide 20 text

ALBが半減

Slide 21

Slide 21 text

Lambdaの料金もEC2の半額 $110/月 → $55/月

Slide 22

Slide 22 text

NAT Gatewayはゼロに EC2削除によりインターネット通信が消滅 $45/月 * 6台のコスト削減

Slide 23

Slide 23 text

可用性やレイテンシも上々

Slide 24

Slide 24 text

まとめ

Slide 25

Slide 25 text

Web APIのAWS Lambda移行で工夫したこと コンテナイメージの最適化 「プロビジョニングされた同時実行」の設定 可用性とレイテンシの監視 リトライ実装の依頼