「AWS Lambda performance tuning: Best practices and guidance」のチョークトークに参加しました #AWSreInvent #SVS312
SBJソリューション部のserinaです。
AWS re:Invent 2024に参加してきました。
「AWS Lambda performance tuning: Best practices and guidance」のレポートをします。
スライドの枚数は少ないですが、資料はこちらで公開されています。
セッション概要
In this chalk talk, you learn about opportunities to optimize your serverless applications built with AWS Lambda, including optimizations in the function configuration and within your function code. This talk also covers how you can best measure and tune your function’s performance by configuring memory to get the right application performance. You also hear best practices for initialization logic and reuse to enable fast startup and fast function processing times.
セッションタイプ
Chalk talk
スピーカー
- Matt Diamond
- Vamsi Vikash Ankam
レベル
300 – Advanced
内容
3つの内容について、各15分間ずつ議論しました。
- AWS Lambda 機能の最適化
- サーバーレスマイクロサービスの構造化
- Lambda 開発ツール
AWS Lambda 機能の最適化
Lambda の性能を最適化するためには、メモリ設定が重要な役割を果たすことを話されていました。
メモリを増やすことで、CPU とネットワーク容量も同時に向上し、より効率的な処理が可能になります。
コールドスタートの時間を短縮するためには、パッケージサイズの削減、依存関係の最小化、スナップスタート機能の活用が推奨されます。
また、Power Tuningツールを使用することで、最適なメモリ設定を見つけ、パフォーマンスとコストのバランスを取ることができます。
Gravitonプロセッサの検討やキャッシング戦略の実装も、Lambda 関数の性能向上に貢献します。
質問内容
Q: メモリを増やすとネットワーク容量は直線的に増加しますか?
A: 直線的にではなく、内部設定によって増加します。ネットワーク性能は段階的に向上します。
Q: メモリ変更はコールドスタートに影響しますか?
A: コールドスタートに直接的な影響はありませんが、実行環境の初期化プロセスに関連します。
Q: Gravitonプロセッサの性能は?
A: アーキテクチャ互換性によって性能が大きく変わるため、個別に検証が必要です。
Q: スナップスタートの対応言語は?
A: 現在、Javaの他、Pythonと.NET向けに提供されています。
サーバーレスマイクロサービスの構造化
マイクロサービスアーキテクチャの設計では、Lambda 関数を適切に分割し、マルチテナントアプリケーションの要件を考慮することが重要だそうです。
非同期呼び出しを推奨し、EventBridge やステップファンクションを活用することで、サービス間の効率的な通信を実現できます。
異なるデータベース(DynamoDB, RDS)を利用することで、データ分離とセキュリティを確保しながら、柔軟なアーキテクチャを構築できます。
開発チームとDevOpsチームの連携も、効果的なマイクロサービス設計において重要な要素となります。
質問内容
Q: 1つのLambda関数から別のLambda関数を呼び出す際の注意点は?
A: 非同期呼び出しを推奨します。同期呼び出しは課金対象時間が増加してしまいます。キュー(SQSやSNSなど)やEventBridgeの利用を提案します。
Lambda 開発ツール
Lambda 開発を支援するツールとして、AWS X-Ray や Lambda Power Tools などの観測性ツールが重要な役割を果たす、との話がありました。
これらのツールにより、アプリケーションのパフォーマンスを詳細に分析し、ボトルネックを特定できます。
AWS SAM、AWS CDK、Serverless Framework などの開発支援ツールを使用することで、インフラストラクチャ as コード(IaC)の実装や、デプロイメントプロセスを効率化できます。
AWS Compute Optimizer や Lambda Power Tuning などのツールを活用することで、コールドスタートの分析や最適なリソース設定を見つけることができ、Lambda 関数の全体的なパフォーマンスを向上させることができます。
質問内容
Q: Lambdaの誕生日は?
A: 10周年を迎えました。
Q: Lambdaが1か月に処理するリクエスト数は?
A: 約3兆回のリクエストを処理しています。
Q: Lambdaが「ウォーム」状態を維持する時間は?
A: 数分間維持されますが、Lambdaサービスが環境を再利用または解放する正確な時間は保証されていません。
サーバレス学習コース
最後にサーバーレスについて学習できるコースの紹介がありました。
2つあり、10時間半、13時間のコースでした。
-
Events and Workflows - Knowledge Badge Readiness Path
-
Serverless - Knowledge Badge Readiness Path
用語について
知らなかった用語があったため調べました。
コールドスタート
コールドスタート
とは、Lambda関数の初期化プロセスによる遅延のことです。
コールドスタートの影響を軽減するためには以下のような方法が利用可能です。
- Warm Start
- 特定の関数の起動時に、既に初期化された環境を利用することで、コールドスタートを回避
- Provisioned Concurrency
- 特定のLambda関数に対して、一定数のインスタンスを事前にプロビジョニングして、常に起動準備が整っている状態に保つ
- コールドスタートを完全に回避できるが、コストが増加
- Snapstart(後述でも説明を記載)
- 関数の依存関係を事前にキャッシュすることで、関数の起動時間を大幅に短縮
- 最小限のパッケージサイズに抑える
- および関数の起動頻度を高める
- コールドスタートが頻繁に発生しない状態を維持
- 関数の起動コストを増加させる可能性がある
Lambda SnapStart
SnapStartは、AWS Lambdaの特定の関数の初期化時間を大幅に短縮するための機能です。
従来のLambda関数は、実行前に毎回初期化プロセス(コードの読み込み、依存関係の解決など)を必要とされていました。これが初期化時間として現れ、特に長い初期化時間を持つ関数では、その影響が顕著でした。
SnapStartは、この初期化プロセスの一部を事前にキャッシュすることで、関数の起動時間を大幅に短縮します。具体的には、Lambda関数の依存関係を含む静的なコンポーネントを事前にコンパイルし、メモリにキャッシュします。これにより、関数が初めて実行される際に、これらのコンポーネントを再度読み込む必要がなくなり、起動時間が大幅に短縮されます。
参考
- New – Lambda SnapStart で Lambda 関数を高速化
- Python および .NET 関数向けの AWS Lambda SnapStart の一般提供を開始 - Amazon Web Services ブログ
感想
スピーカーの方が、わかりましたか?て都度聞いてくれたりジョークを挟んでいて、終始和やかな雰囲気で進んで良かったです。
チョークトークは毎回たくさん質問が飛び交っていてすごいなぁ、と思いました。
事前に用意しておけば、私でも質問できそうな雰囲気だったので、もう少し英語のリスニングを強化して次回は質問したいです!!
最後に
知らないオプションもあり、Lambdaについての理解を深められたセッションでした。
Lambdaは使用する機会の多いサービスなので、知識を深められて良かったです。