やーまんぶろぐ

気が向いた時にだけ書くブログ

AWS Well-Architected Lens – Serverless Applications まとめ コスト編

アーキテクチャを検討する上で、とても役に立つフレームワークであるAWS Well Archtected Framework。
サーバーレス版が公開されたのでベストプラクティスについてまとめておきます。
https://d1.awsstatic.com/whitepapers/architecture/AWS-Serverless-Applications-Lens.pdf

運用編セキュリティ編信頼性編パフォーマンス編コスト編の5回に分けてメモしていきます。

解釈が間違っているかもしれないので、ご注意ください。

SERVCOST 1:最適なラムダメモリ割り当てを決定するための戦略は何ですか?

  • 最良のコスト/パフォーマンスを確保するには、テスト・シナリオに基づく最適なメモリー割り振りが必要
  • メモリのチューニングとタイムアウトの微調整は、パフォーマンスや運用だけでなく、コスト削減にもつながる。
  • メモリを少なくすると、各Lambda関数の実行に時間がかかり、100ミリ秒の請求単位で増分されるため、料金が高くなる可能性がある。
  • AWSは新しいサービスや機能をリリースするため、引き続きコスト効果を確認し最適化を繰り返す必要がある。

SERVCOST 2:ラムダ関数のコードロギングの戦略は何ですか?

  • LambdaはCloud Watch Logsを使用してログを取得できる。ログの取り込みとストレージ量にコストが発生する。
    • 環境変数によって必要なときはいつでも正しいログレベルを設定する。特別にアクティブ化されない限り、ログイングされたログはDEBUGではなくINFOにしておく。
  • ログのコストを削減する方法。
    • AWS LambdaのAmazon CloudWatch Logsグループのログ保持期間を使用する。
    • Amazon S3Amazon ESなどのより費用対効果の高いプラットフォームにログをエクスポートする。

SERVCOST 3:複雑さを軽減するために必要なLambda関数を実行するコード・アーキテクチャーはありますか?

  • 不要なLambdaの実行を避ける。
  • API GatewayやIoTと他のAWSサービスを直接統合すると、Lambdaのコスト増加と、これらのリソース管理を回避できる。
  • Lambdaのコードを最適化する。
  • 不要な呼び出しを避けるケースを検討する。下にいくほどコストやレイテンシを削減することができるが、一番下はRESTful APIの恩恵を受けることはできない。

SERVCOST 4:できるだけ短い時間で実行するようにコードをどのように最適化していますか?

  • 長時間Lambdaを実行する必要がある場合は、Lambda関数で実装する代わりにStep Functionsを使用して待機状態を実装する。
  • データストアやその他のサービス/リソースへの接続を維持するためにグローバル変数を使用してコードを最適化すると、パフォーマンスが向上し、実行時間が短縮され、コストも削減される。