目的
AWSのサーバレス型関数実行サービスのLambdaを理解する(AWSSAP対策も兼ねて)
LambdaのSLA
LambdaのSLAは下記ドキュメント参照
https://d1.awsstatic.com/legal/lambda-sla/AWS%20Lambda%20SLA_2022-05-05_JP.pdf
Lambdaのクォータ制限
⚫︎Lambdaのクォータ制限は下記ドキュメントに記載
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/gettingstarted-limits.html
・同時実行数
・最大実行時間
・最大使用メモリ
それぞれを見ていく。
Lambdaの同時実行数上限
重要度⭐️⭐️⭐️⭐️⭐️⭐️⭐️
・Lambdaの同時実行数はAWSアカウント全体で1リージョンで1000が上限
Lambdaのスロットリング
スロットリング
システムやサービスが過負荷になるのを防ぐために、意図的にリクエストの処理量を制限する仕組みのこと。
⚫︎Lambdaのメトリクスに関するドキュメント
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/monitoring-metrics-types.html
Throttles - スロットリングされた呼び出しリクエストの数。すべての関数インスタンスがリクエストを処理していて、スケールアップできる同時実行がない場合、Lambda は TooManyRequestsException エラーを出して追加のリクエストを拒否します。スロットリングされたリクエストやその他の呼び出しエラーは、Invocations または Errors のいずれかとしてカウントされません。
Lambdaの同時実行数に達すると
429 (TooManyRequestsException エラー)
が返却される
同時実行数の監視
CloudWatchの「ConcurrentExecutions」で同時実行数のメトリクス取得可能
⚫︎Lambdaの同時実行数に関するドキュメント
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/monitoring-concurrency.html
Lambda 関数の同時実行のモニタリングには、以下のメトリクスを使用します。各メトリクスの詳細度は 1 分です。
ConcurrentExecutions - 特定時点のアクティブな同時実行呼び出し数。Lambda は、このメトリクスをすべての関数、バージョン、エイリアスに対して出力します。Lambda コンソールのどの関数であっても、Lambda は [モニタリング] タブの [メトリクス] に ConcurrentExecutions のグラフをネイティブに表示します。MAX を使用してこのメトリクスを表示します。
上のスロットリングのメトリクスでアラート設定しても既に手遅れなので、アラート設定はこっちのメトリクスの方が良い。
Lambdaの同時実行時間
900秒(15分)
Lambdaのメモリ上限
128 MB から 10,240 MB(10GB)まで1MB単位で設定。
使ってないメモリも課金対象になるので適切に指定する。
Lambda Insight
重要度⭐️⭐️⭐️⭐️⭐️
LambdaをCloudWatchで監視する時に注意すべきなのが、Lambda Insightを有効化しないと取得できないメトリクスが結構ある
⚫︎Lambda Insightに関するドキュメント
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/Lambda-Insights-metrics.html
特にメモリ、CPUに関するメトリクスはこの機能をオンにしないと取得できない。
Lambdaのカナリアリリース
カナリア(Canary)リリースとは?
新しいシステムやコードの変更を段階的に本番環境へ導入するリリース方針
Lambdaにはデプロイごとにバージョンを付与することができますが、それぞれのバージョンにweightを付与できる。
version2 : 90%
version3 : 10%
のようにすると呼び出しもこの割合で行われる。
段階的に本番環境に移行することができるので既存環境への影響などを小さくでk。
リザーブド同時実行数
重要度⭐️⭐️
特定のLambda関数に最大同時実行数を割り当ててその実行数を保証する
⚫︎リザーブド同時実行に関するドキュメント
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-concurrency.html
プロビジョンドコンカレンシー
重要度⭐️⭐️
Lambda関数のコールドスタートを回避するため、「常に稼働するインスタンス数」を指定