[レポート] SRV401 : サーバーレスアプリケーションの最適化 #reinvent

AWS re:Invent 2018 SRV401-R -- [REPEAT] Optimizing Your Serverless Applicationsのセッションレポートです。
2018.11.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWS re:Invent 2018 SRV401-R -- [REPEAT] Optimizing Your Serverless Applicationsのセッションレポートです。

以下、公式の概要です。

Are you an experienced serverless developer? Do you want a handy guide for unleashing the full power of serverless architectures for your production workloads? Are you wondering whether to choose a stream or an API as your event source, or whether to have one function or many? In this session, we discuss architectural best practices, optimizations, and handy cheat codes that you can use to build secure, high-scale, high-performance serverless applications. We use real customer scenarios to illustrate the benefits.

スピーカーは Principle Developer Advocate - Serverless の Chris Munns さんでした。

動画

※ SRV401-R2 - [REPEAT 2]の動画のためスピーカーは Senior Cloud Infrastructure Architect の Harrell Stiles さんです。

スライド

レポート

Lambdaの基本から始まり、Lambdaを利用する上での各種考慮事項について解説するセッションでした。

  • サーバーレスアプリケーションの構成
  • Handler関数、Eventオブジェクト、Contextオブジェクト
  • Lambdaは1つのイベントに対して実行環境を提供し、実行環境は再利用される場合がある
  • Lambdaの環境変数はFunction単位ならFunctionの環境変数、複数Function横断ならAWS Systems Manager Parameter Storeを利用できる
  • LambdaはTRANFORM(変換)に利用し、TRANSPORT(移動)には利用しない
  • LambdaでOrchestration(ステータス管理)しない、AWS Step Functionsを利用すること
  • リポジトリは分割する。単一リポジトリはFaaSにおいてアンチパターン
  • Functionのライフサイクル
  • AWS X-Rayの利用
  • Lambdaはメモリサイズの指定しかできない。CPUとネットワーク帯域はメモリサイズの応じて付与される
  • 賢くリソースを割り当てる。メモリサイズを増やすと処理時間が短くなる場合、トータルのコストは同じでも処理時間を早くできる場合がある
  • マルチスレッドも可能。メモリを1.8GB以上割り当てると複数コアを利用できる
  • Lambdaの実行モデルはSynchronous(同期)、Asynchronous(非同期)、Poll-baseの3つ
  • レスポンスが必要ない場合は非同期呼び出しにする
  • エントリーポイントはそれぞれ以下を利用する
    • 単一の自作アプリケーション : AWS SDK
    • リージョン内のパブリックAPI : API Gateway
    • VPC内のマイクロサービス : API Gatewayのプライベートエンドポイント
  • Lambda Function単位の同時実行数制御は関数単位でmax concurrencyを指定する。0を指定するとそのFunctionを止めることになる
  • Lambda、SNS、SQS、Kinesiss Streamsにおけるスケーリングと同時実行数制御、永続化、リトライおよび失敗した際のハンドリングについて
  • LambdaのDead Letter Queuesは有効化しましょう
  • Lambdaのネットワーク構成とVPCを利用する際のフローチャート
  • VPCで利用する際は必ず2つ以上のAvailability Zoneを利用し、Lambda用のSubnetを割り当てること
  • AWS SAMを利用しましょう。Templateも45以上あるよ

VPCを利用する際のフローチャート

最後に

概要にもある通り、Lambdaを利用する上でのベストプラクティスがまとまっているセッションだったと思います。すでにLambdaを利用している方も、これから利用する方にも参考になる内容だったと思います。