2019/10/26に開催されたDevelopers.IO 2019 Fukuokaで発表させて頂いた際の資料です
劇的改善︖︖VPC Lambda Before&AfterCX事業本部岩⽥ 智哉
View Slide
スライドは後で⼊⼿することが出来ますので発表中の内容をメモする必要はありません。写真撮影をする場合はフラッシュ・シャッター⾳が出ないようにご配慮くださいAttention
3⾃⼰紹介lクラスメソッド株式会社lサーバーレス開発部 改め CX事業本部l⼤阪オフィス所属l好きなAWSサービス: AWS Lambda岩⽥ 智哉
4今⽇話したいことアンチパターンとされていたVPC Lambdaの懸念事項がどのように改善されたのか︖︖
5想定しているターゲット• AWS Lambdaの基礎的な知識を持っている⼈• サーバーレスなシステムの開発/運⽤をやってる⼈• VPC Lambdaの利⽤を検討している⼈
6アジェンダ• AWS Lambdaのアーキテクチャおさらい 5分• VPC Lambdaのアーキテクチャ(新)• VPC Lambdaのアーキテクチャ(旧)• 改善効果について6分4分6分• どのように考え⽅を変えるべきなのか• まとめ5分2分
7アジェンダ• AWS Lambdaのアーキテクチャおさらい 5分• VPC Lambdaのアーキテクチャ(新)• VPC Lambdaのアーキテクチャ(旧)• 改善効果について6分4分6分• どのように考え⽅を変えるべきなのか• まとめ5分2分
8Lambdaのアーキテクチャについて無駄なコスト※Security Overview of AWS Lambda(https://d1.awsstatic.com/whitepapers/Overview-AWS-Lambda-Security.pdf)より引⽤cgroupsnamespacesseccompiptableschroot
9Lambdaのアーキテクチャについて(EC2モデル)無駄なコスト• 1つのMicroVM上に複数のLambda実⾏環境を作成• AWSアカウントをまたいでWorkerは共有されない※Security Overview of AWS Lambda(https://d1.awsstatic.com/whitepapers/Overview-AWS-Lambda-Security.pdf)より引⽤
10Lambdaのアーキテクチャについて(Firecrackerモデル)• 1つのMicroVM上には1つのLambda実⾏環境しか作成しない• AWSアカウントをまたいでWorkerを共有する※Security Overview of AWS Lambda(https://d1.awsstatic.com/whitepapers/Overview-AWS-Lambda-Security.pdf)より引⽤
11アジェンダ• AWS Lambdaのアーキテクチャおさらい 5分• VPC Lambdaのアーキテクチャ(新)• VPC Lambdaのアーキテクチャ(旧)• 改善効果について6分4分6分• どのように考え⽅を変えるべきなのか• まとめ5分2分
12VPC Lambdaのアーキテクチャ (旧)ENIキャパシティの計算式: Projected peak concurrent executions * (Memory in GB / 3GB)※Announcing improved VPC networking for AWS Lambda functions(https://aws.amazon.com/jp/blogs/compute/announcing-improved-vpc-networking-for-aws-lambda-functions/)より引⽤
13VPC Lambdaのアーキテクチャ (旧)※A Serverless Journey: AWS Lambda Under the Hood (SRV409-R1) - AWS re:Invent 2018(https://www.slideshare.net/AmazonWebServices/a-serverless-journey-aws-lambda-under-the-hood-srv409r1-aws-reinvent-2018?ref=https://dev.classmethod.jp/cloud/aws/reinvent2018-srv409/)より引⽤
14VPC Lambdaの課題• ENIの枯渇問題• ENI作成のRate Limit• IPアドレス枯渇問題• ENI作成を伴うコールドスタート時の遅延• インターネットアクセスにNAT Gatewayが必要
15VPC LambdaからRDB(S)を利⽤する際の課題• 同時接続数の問題• コネクションプーリングが使えない• RDBはスケールアウトではなくスケールアップ• コスト最適化の課題
16RDB(S)を使う場合のコストと同時接続数の関係• 最⼤同時接続数を上げるにはインスタンスタイプを変える必要がある• 柔軟にスケールアップできない• コストを最適化できない処理可能な最⼤同時接続数とコスト 実際の接続数インスタンスタイプ変更 インスタンスタイプ変更
17VPC Lambdaは⼀般的にアンチパターンとされていた旧来の考え⽅
18アジェンダ• AWS Lambdaのアーキテクチャおさらい 5分• VPC Lambdaのアーキテクチャ(新)• VPC Lambdaのアーキテクチャ(旧)• 改善効果について6分4分6分• どのように考え⽅を変えるべきなのか• まとめ5分2分
19VPC Lambdaのアーキテクチャ (新)※Announcing improved VPC networking for AWS Lambda functions(https://aws.amazon.com/jp/blogs/compute/announcing-improved-vpc-networking-for-aws-lambda-functions/)より引⽤
20VPC Lambdaのアーキテクチャ (新)※A Serverless Journey: AWS Lambda Under the Hood (SRV409-R1) - AWS re:Invent 2018(https://www.slideshare.net/AmazonWebServices/a-serverless-journey-aws-lambda-under-the-hood-srv409r1-aws-reinvent-2018?ref=https://dev.classmethod.jp/cloud/aws/reinvent2018-srv409/)より引⽤
21Hyperplane• AWS内部で利⽤されているSDNの技術• S3 Load Balancerがベース• EFS、NLB、Private Link、Managed NATで利⽤• デフォルト5Gbit/secの性能Tbitレベルまでスケール• msレベルのレイテンシー
22新アーキテククチャへの移⾏開始• 2019/9/3 AWSより新アーキテクチャへの段階移⾏開始のアナウンス• 2019/9/27 オハイオ、フランクフルト、東京への適⽤完了のアナウンス
23• AWS Lambdaのアーキテクチャおさらい 5分• VPC Lambdaのアーキテクチャ(新)• VPC Lambdaのアーキテクチャ(旧)• 改善効果について6分4分6分• どのように考え⽅を変えるべきなのか• まとめ5分2分
Public subnet24検証1AWS CloudVPC• API GatewayのバックにVPC Lambdaを紐付け• EC2からheyコマンドで並列アクセス
252019/5/29時点の実⾏結果Summary:Total: 13.4614 secsSlowest: 13.0460 secsFastest: 0.0194 secsAverage: 1.2528 secsRequests/sec: 37.1433Total data: 2500 bytesSize/request: 5 bytesResponse time histogram:0.019 [1] |1.322 [448] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■2.625 [1] |3.927 [0] |5.230 [0] |6.533 [0] |7.835 [0] |9.138 [0] |10.441 [4] |11.743 [9] |■13.046 [37] |■■■
262019/10/20時点の実⾏結果Summary:Total: 1.3694 secsSlowest: 0.5470 secsFastest: 0.0225 secsAverage: 0.0970 secsRequests/sec: 365.1342Total data: 2500 bytesSize/request: 5 bytesResponse time histogram:0.023 [1] |0.075 [411] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■0.127 [25] |■■0.180 [1] |0.232 [0] |0.285 [0] |0.337 [0] |0.390 [9] |■0.442 [7] |■0.495 [33] |■■■0.547 [13] |■
27もうちょっとイジメてみる
28検証2ENI1が追加作成されたりしない︖︖• Lambdaの実⾏がすぐに完了しないように2秒のSleepを追加• heyの並列数を500に引き上げ
29検証2の結果Summary:Total: 21.8108 secsSlowest: 3.4042 secsFastest: 2.0223 secsAverage: 2.1532 secsRequests/sec: 458.4892Total data: 50000 bytesSize/request: 5 bytesResponse time histogram:2.022 [1] |2.160 [8998] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■2.299 [1] |2.437 [0] |2.575 [0] |2.713 [0] |2.851 [0] |2.990 [0] |3.128 [113] |■3.266 [844] |■■■■3.404 [43] |
30検証2実⾏後のENIの状況VPC Lambda⽤のENIは1つのまま変わらず
31さらにイジメてみる
Public subnet32検証3AWS CloudVPCmasterslave
33検証3• FargateでLocustのクラスタを作成し、API GW経由でVPC Lambdaに⼤量アクセス• Lambdaは3秒Sleep後にレスポンスを返却• Usersは1,100に設定• Hatch rateは100に設定• 同時実⾏数の上限に達するようなワークロード
34検証3スロットリングが頻発するような状況でも⼤きな待ちは発⽣せず
35検証3 実⾏時のLambda同時起動数
36検証3 実⾏時のスロットリング状況
37検証結果から....• Lambdaの同時実⾏数が増えてもENIの追加作成が⾛ることは無さそう• ⼤量のデータ転送を伴うLambdaだと懸念がある︖︖要検証• Lambdaのペイロードサイズ上限を考えると⼤丈夫︖︖• ⾮VPC Lambdaと同等レベルの耐久性がありそう
38• AWS Lambdaのアーキテクチャおさらい 5分• VPC Lambdaのアーキテクチャ(新)• VPC Lambdaのアーキテクチャ(旧)• 改善効果について6分4分6分• どのように考え⽅を変えるべきなのか• まとめ5分2分
39VPC Lambdaの課題(再掲)• ENIの枯渇問題• ENI作成のRate Limit• IPアドレス枯渇問題• ENI作成を伴うコールドスタート時の遅延• インターネットアクセスにNAT Gatewayが必要
40VPC LambdaからRDB(S)を利⽤する際の課題(再掲)• 同時接続数の問題• コネクションプーリングが使えない• RDBはスケールアウトではなくスケールアップ• コスト最適化の課題
41新アーキテクチャでの考え⽅• ENI周りの懸念事項は解消された• 新アーキテクチャでも課題は残る• 何でもかんでもVPC Lambdaを使っても⼤丈夫という訳ではない• あくまでリスク受容できる範囲が広がっただけ
42VPC Lambdaを使っても良さそうなユースケース• コールドスタートによる10秒~20秒数100ミリ秒~数秒程度の遅延が許容できるワークロード• 利⽤予定のVPCリソースが想定される最⼤アクセス数を問題なく処理可能なワークロード例えば、、、アクセス数が安定しており、数秒程度のレイテンシが許容できるB2Bサービスのバックエンドなど
43その他 考慮しておきたいこと• VPC Lambdaを使う ≒ 何かしらのサービスを利⽤するためのライブラリが必要• パッケージやLayerが肥⼤化しがち 当然コールドスタートは遅い• アプリケーションフレームワークは使う︖それとも使わない︖• モノリシックなアプリケーションをVPC Lamdbaに乗せ替えようとしていないか︖︖
44• AWS Lambdaのアーキテクチャおさらい 5分• VPC Lambdaのアーキテクチャ(新)• VPC Lambdaのアーキテクチャ(旧)• 改善効果について6分4分6分• どのように考え⽅を変えるべきなのか• まとめ5分2分
45まとめ• VPC Lambdaのアーキテクチャは様々な課題を抱えていた• そのうちいくつかの課題は改善された• いくつかの課題は継続して残り続けている• VPC Lambdaを採⽤しても問題ないケースは増えた
46適切なアーキテクチャを選定できるように常に知識のアップデートをまとめ
47ご清聴ありがとうございました