Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS Lambdaのスロットリング緩和 / How to manage throttling for AWS Lambda

kensh
June 24, 2020

AWS Lambdaのスロットリング緩和 / How to manage throttling for AWS Lambda

AWS Lambdaのスロットリングについて、同時実行数のクオータの考え方や、緩和の方法をご紹介します。

kensh

June 24, 2020
Tweet

More Decks by kensh

Other Decks in Technology

Transcript

  1. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    24th Jun 2020
    Kensuke Shimokawa
    AWS Lambdaの
    スロットリング緩和
    - How to manage throttling
    @_kensh

    View Slide

  2. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Who am I?
    Name
    Kensuke Shimokawa
    Company
    Amazon Web Services Japan K.K.
    Role
    Serverless Specialist Solutions Architect
    @_kensh

    View Slide

  3. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Table of contents
    • Day1 24th June
    • How to manage throttling
    • Day2 1st July
    • Provisioned Concurrency Dive Deep & Practice

    View Slide

  4. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Scalabilityの基本
    Mostly, about AWS Lambda

    View Slide

  5. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Throttling is not Evil

    View Slide

  6. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Throttling is not Evil
    What is Throttling?
    スロットリングは、リソースとダウンストリームアプリケーションを保護するこ
    とを目的としています。Lambda は受信トラフィックに合わせて自動的にスケー
    リングしますが、さまざまな理由で関数がスロットリングされる可能性がありま
    す。
    https://aws.amazon.com/premiumsupport/knowledge-center/lambda-troubleshoot-throttling
    Lambdaを呼び
    出す
    Lambdaから
    呼び出される
    AWS Lambda
    アップストリーム ダウンストリーム

    View Slide

  7. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Throttling is not Evil

    View Slide

  8. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Throttling is not Evil
    アカウント、リージョン毎

    View Slide

  9. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Throttling is not Evil
    AWS では 160 種類を超えるクラウドサービス
    について従量制料金(Pay as You go)を適用しています。
    Year

    View Slide

  10. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Throttling is not Evil
    AWS では 160 種類を超えるクラウドサービス
    について従量制料金(Pay as You go)を適用しています。
    Imagine there's no Throttling
    It's easy if you try
    You go You pay
    Year

    View Slide

  11. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    関数のスケーリングと同時実行数

    View Slide

  12. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    関数のスケーリングと同時実行数
    Concurrency = 同時実行数

    View Slide

  13. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    関数のスケーリングと同時実行数
    バースト制限
    • 3000 – US West (Oregon), US East (N. Virginia), Europe (Ireland)
    • 1000 – Asia Pacific (Tokyo), Europe (Frankfurt)
    • 500 – Other Regions
    Concurrency = 同時実行数

    View Slide

  14. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    関数のスケーリングと同時実行数
    最初のバーストの後、関数の同時実行数は、
    1 分ごとにさらに 500 インスタンス増加します。
    Concurrency = 同時実行数

    View Slide

  15. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    関数のスケーリングと同時実行数
    バースト制限
    3000 – US West (Oregon), US East (N. Virginia), Europe (Ireland)
    1000 – Asia Pacific (Tokyo), Europe (Frankfurt)
    500 – Other Regions
    https://docs.aws.amazon.com/lambda/latest/dg/invocation-scaling.html
    最初のバーストの後、関数の同時実行数は、1 分ごと
    にさらに 500 インスタンス増加します。

    View Slide

  16. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Quotaについて

    View Slide

  17. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Quota は共有される

    View Slide

  18. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    同時実行数はアカウント、リージョン単位で共有
    • 各Lambda関数が、Quotaで設定された同時実
    行数を共有する
    • 各関数のConcurrencyの合計が 、同時実行数の
    制限に達した場合Throttleする。
    AWS Cloud
    Region
    Quota: 1000(default)
    Function A Function B Function C

    View Slide

  19. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    同時実行数はアカウント、リージョン単位で共有
    AWS Cloud AWS Cloud AWS Cloud
    Region
    Region
    Region
    Region
    Region
    Region
    Quota: 1000(default)

    View Slide

  20. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    [email protected] 関数について
    https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cloudfront-
    limits.html#limits-lambda-at-edge
    AWS Cloud
    Region X
    Quota: 1000
    Edge A
    Replicas
    Regional B Regional C
    us-east-1
    Edge A (artifact)
    [email protected]は、us-
    east-1のマスター関数を他
    のRegionに複製
    • CloudFrontへのアクセスに
    より、適切なRegionで
    Lambda関数の複製を実行
    • 複製先でのConcurrency
    QuotaはRegional Lambda
    と共有
    behaviour 設定時に複製
    https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-edge-how-it-
    works.html
    Amazon
    CloudFront
    Dev Viewers
    close to
    Region X
    behaviour
    viewer
    request
    Master create
    invoke
    AWS Lambda

    View Slide

  21. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Throttling

    View Slide

  22. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Throttlingの確認

    View Slide

  23. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Throttling ? になったら
    関数の Error メトリクスの増加を確認
    Duration メトリクスのスパイクを確認
    バーストスケーリングによっての制限か確認 (limit increased)
    リージョンのバースト同時実行クォータを超えているかどうかを確認
    Lambda Throttles Metricsがあるか?
    ない場合は、Code内APIを調査
    CloudWatch LogsにThrottoling が出力されているか確認
    https://aws.amazon.com/jp/premiumsupport/knowledge-center/lambda-troubleshoot-throttling

    View Slide

  24. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    どの関数がSpikeしているか確認(per Region)
    150 150 150
    130 140
    210
    180
    570
    300
    200
    300
    280 280
    300
    350
    660
    610
    1000
    730
    690
    1000 1000 1000 1000 1000
    0
    200
    400
    600
    800
    1000
    1200
    10:04 10:05 10:06 10:07 10:08
    Concurrency
    func1 func2 func3 sum Quota

    View Slide

  25. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    どの関数がSpikeしているか確認(per Region)
    150 150 150
    130 140
    210
    180
    570
    300
    200
    300
    280 280
    300
    350
    660
    610
    1000
    730
    690
    1000 1000 1000 1000 1000
    0
    200
    400
    600
    800
    1000
    1200
    10:04 10:05 10:06 10:07 10:08
    Concurrency
    func1 func2 func3 sum Quota
    Hit 1000

    View Slide

  26. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    どの関数がSpikeしているか確認(per Region)
    150 150 150
    130 140
    210
    180
    570
    300
    200
    300
    280 280
    300
    350
    660
    610
    1000
    730
    690
    1000 1000 1000 1000 1000
    0
    200
    400
    600
    800
    1000
    1200
    10:04 10:05 10:06 10:07 10:08
    Concurrency
    func1 func2 func3 sum Quota
    Hit 1000
    Spike?

    View Slide

  27. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Throttlingの対処

    View Slide

  28. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    • Duration Metricsに着目
    • 関数Errorの急増に着目
    • Recursive Callに注意
    • Synchronous Callでないといけないか
    • Throttlingしてはいけない関数か
    • Service Quota request
    • Provisioned Concurrency
    Throttlingの対処

    View Slide

  29. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    • Duration Metricsに着目
    • Durationが一時的に伸びている場合、同時実行数を消費することも
    • 外部リソースへのアクセスが正常かを確認
    • 外部リソースへのアクセスに対してExponential Backoffが実装されている場合
    • DynamoDBのキャパシティ枯渇時(On-Demandの検討も)
    • 関数内の呼び出し先On-prem HTTPサーバーのダウン時 (Cacheの検討も)
    • Lambda Concurrency Hunt
    • https://github.com/aws-samples/aws-lambda-concurrency-hunt
    • コードチューニング
    • AWS Lambda 関数を使用する際のベストプラクティス
    • https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/best-practices.html
    Throttlingの対処

    View Slide

  30. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Lambda Concurrency Hunt ( Tips )
    過去7日間のMetricsに対して
    同時実行数が最も高い期間を
    見つけ、そのSpikeの前の6
    分間の情報を出力する。
    • 関数の呼び出し回数
    • 平均処理時間
    • 同時実行数
    $ curl https://raw.githubusercontent.com/aws-samples/aws-lambda-concurrency-hunt/master/lambda-con-hunt.py -o lambda-con-hunt.py
    $ python3 lambda-con-hunt.py
    ※ Lambdaの1 分間隔Metricsにおいて、15 日間は
    1 分の分解能を持つ。以降も使用可能だが、5 分に
    集約された分解能となる
    https://aws.amazon.com/jp/cloudwatch/faqs/

    View Slide

  31. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    • Duration Metricsに着目
    • 関数Errorの急増に着目
    • Recursive Callに注意
    • Synchronous Callでないといけないか
    • Throttlingしてはいけない関数か
    • Service Quota request
    • Provisioned Concurrency
    Throttlingの対処

    View Slide

  32. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Throttlingの対処
    • 関数Errorの急増に着目
    • 関数の Error メトリクスの増加を確認
    • 同期呼び出しでErrorが増えると
    • 呼び出し元の再試行が発生(SDK Exponential の仕様を要確認)
    • 呼び出しが全体的に増加
    • 非同期呼び出しの場合
    • Lambda は失敗した呼び出しをさらに 最大2 回再試行(configurable)
    • On failure Destination でエラーハンドリングも検討(configurable)
    $ aws lambda put-function-event-invoke-config --function-name func \
    --maximum-event-age-in-seconds 3600 --maximum-retry-attempts 0
    $ aws lambda update-function-event-invoke-config --function-name error \
    --destination-config '{
    "OnFailure": {
    "Destination": "arn:aws:sqs:us-east-2:123456789012:destination"
    }
    }'

    View Slide

  33. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    • Duration Metricsに着目
    • 関数Errorの急増に着目
    • Recursive Callに注意
    • Synchronous Callでないといけないか
    • Throttlingしてはいけない関数か
    • Service Quota request
    • Provisioned Concurrency
    Throttlingの対処

    View Slide

  34. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    • Recursive Callに注意
    Amazon Simple Storage
    Service
    AWS Lambda
    invokes
    Put Object
    AWS CloudTrail
    Amazon EventBridge AWS Lambda
    invokes
    GetFunctionConfiguration
    Triggered by Rule
    captures
    Throttlingの対処

    View Slide

  35. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    • Duration Metricsに着目
    • 関数Errorの急増に着目
    • Recursive Callに注意
    • Synchronous Callでないといけないか
    • Throttlingしてはいけない関数か
    • Service Quota request
    • Provisioned Concurrency
    Throttlingの対処

    View Slide

  36. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Throttlingの対処
    • Synchronous Callでないといけないか?
    • Asynchronous にできないか検討
    • Latencyからの解放
    • 呼び出し元の待機が不要
    • 呼び出し元が別処理のために稼働できる
    • Asynchronous のResiliency
    • 多様なErrorハンドリングのサポート
    • Throttlingの緩和
    • 分散システムを疎結合に

    View Slide

  37. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Throttlingの対処
    • Synchronous Callでないといけないか?
    • Asynchronous にできないか検討
    • Latencyからの解放
    • 呼び出し元の待機が不要
    • 呼び出し元が別処理のために稼働できる
    • Asynchronous のResiliency
    • 多様なErrorハンドリングのサポート
    • Throttlingの緩和
    • 分散システムを疎結合に
    AWS LambdaでのAsync
    • Lambda Async Invoke
    • SQS Event Source
    • Kinesis Event Source

    View Slide

  38. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    SIDE LINE Pattern
    • メインの処理がThrottleするのを緩和する(健全性を担保したい)
    • メイン処理に同時実行数を割り大きく当て、メイン処理では異常デー
    タを検知しSide Line(副処理)に退避する。
    • Side Lineの同時実行数を比較的小さく抑えておく

    View Slide

  39. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Lambda Async Invoke :: Side Line Pattern
    • LambdaのAsync Invokeは、Lambdaサービス内にQueueを持つ
    • LambdaにDestinationを設定し、エラーデータを退避
    Side Line処理
    Retry2回を超えたメッセージは
    メイン処理
    同時実行数小
    Async Invoke
    (Internal Queue) retry=2
    設定値

    View Slide

  40. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Amazon SQS event sources :: Side Line Pattern
    • Lambdaの前段にSQSを配置
    • QueueにDLQを設定し、エラーデータを退避
    Side Line処理
    maxReceiveCount(= 3 )を超えた
    メッセージは
    メイン処理
    https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html
    Send Message maxReceiveCount(= 3 )
    同時実行数小
    設定値

    View Slide

  41. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Amazon Kinesis Data Streams :: Side Line Pattern
    Side Line処理
    メイン処理
    • Lambdaの前段にKinesis Data Streamsを配置
    • LambdaにDestinationを設定し、エラーデータを退避
    同時実行数小
    設定値

    View Slide

  42. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    • Duration Metricsに着目
    • 関数Errorの急増に着目
    • Recursive Callに注意
    • Synchronous Callでないといけないか
    • Throttlingしてはいけない関数か
    • Service Quota request
    • Provisioned Concurrency
    Throttlingの対処

    View Slide

  43. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Throttlingの対処
    • Throttlingしてはいけない関数か

    View Slide

  44. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Throttlingの対処
    • Throttlingしてもよい関数の場合
    • 予約された同時実行数を用いて、spikeを抑制
    • 同時実行数を予約割り当てすることで、指定の数だけ占有
    • 割り当てた同時実行数を超えるとThrottleする
    • 予約割り当てされた関数以外の関数
    • アカウント、リージョン単位の残りの同時実行数を共有
    • Spikyな関数による、他の関数への影響を緩和
    $ aws lambda put-function-concurrency \
    --function-name my-function \
    --reserved-concurrent-executions 100

    View Slide

  45. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    • Duration Metricsに着目
    • 関数Errorの急増に着目
    • Recursive Callに注意
    • Synchronous Callでないといけないか
    • Throttlingしてはいけない関数か
    • Service Quota request
    • Provisioned Concurrency
    Throttlingの対処

    View Slide

  46. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Throttlingの対処
    • Service Quota request

    View Slide

  47. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Throttlingの対処
    • Service Quota request

    View Slide

  48. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Throttlingの対処
    • Service Quota request

    View Slide

  49. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Throttlingの対処
    • Service Quota request

    View Slide

  50. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Throttling is not Evil :: A gentle reminder
    AWS では 160 種類を超えるクラウドサービス
    について従量制料金(Pay as You go)を適用しています。
    Imagine there's no Throttling
    It's easy if you try
    You go You pay

    View Slide

  51. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    • Duration Metricsに着目
    • 関数Errorの急増に着目
    • Recursive Callに注意
    • Synchronous Callでないといけないか
    • Throttlingしてはいけない関数か
    • Service Quota request
    • Provisioned Concurrency
    Throttlingの対処

    View Slide

  52. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Provisioned Concurrency
    To Be Continued … to Day2

    View Slide

  53. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Provisioned Concurrency
    1st JULY
    Provisioned Concurrency
    Dive Deep & Practice

    View Slide

  54. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    まとめ
    • Provisioned Concurrencyを設定する前に、関数チューニングや、リアーキテ
    クチャなど対応できることが多くあることをご紹介しました。
    • Throttlingは、サービスにとってなくてはならない機能です。
    • うまく、Throttlingをコントロールして、 Resilientなシステムにしましょう。

    View Slide

  55. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Thank you !
    @_kensh

    View Slide