AWS
architecture
AWSLambda
Severless

【随時更新】AWSによるサーバーレスアーキテクチャ - AWS Lambda概要

概要

AWS Lambda の勉強を始めようと「AWSによるサーバーレスアーキテクチャ」を購入
少し読んでみると非常に良い本なので書籍紹介と自身のLambda備忘録のために投稿
Lambdaについての概要、使い方、制限、注意事項などまとめていく予定

紹介書籍

AWSによるサーバーレスアーキテクチャ

サーバーレスアーキテクチャの原則

  • オンデマンドでコードを実行するために、(サーバーではなく)コンピューティングサービスを使う
  • 目的が1つでステートレスな関数を書く
  • プッシュベースのイベント駆動パイプラインを設計する
  • より厚く、より強力なフロントエンドを作る
  • サードパーティサービスを活用する

サーバーレスの長所と短所

長所

  • サーバー管理不用
  • 低コスト
  • 市場投入までの時間短縮
  • 実装がシンプル、コード量減る可能性がある
  • スケーラブルで柔軟、並列処理が得意

短所

  • レイテンシーに厳しい制約のあるAPには向かない
  • ベンダーロックイン
  • パブリッククラウドが提供できる水準よりも高いパフォーマンス、信頼性が求めらえるミッションクリティカルサービスに向かない
  • サービス分散化による、リモート呼び出し、ネットワーク越しのエラー処理、レイテンシーの増加
  • OSのカスタマイズやその下のインスタンスの調整はできない

Lambda呼び出し方法

  • イベント駆動型(非同期型)
    • プッシュモデル
    • プルモデル
  • 要求/応答型(同期型)

Lambda関数の状態

  • コールド状態:関数のコードがロードされておらず、初期化、セットアップコードがこれから実行される状態
  • ウォーム状態:一度以上関数が実行されており関数のコードがロードされている状態

(処理起動時間がかかる)コールド状態を減らすための施策

  • 関数をウォーム状態に保つためにスケジュールイベントを使って定期的に実行するようにする
  • 初期化、セットアップコードをイベントハンドラの外に出す。コンテナがウォーム状態なら、そのコードは実行されない
  • Lambda関数に割り当てられるメモリの容量を増やす。CPUのシェアは、関数に割り当てられたメモリ容量に応じて決まる
  • コードのサイズをできる限り小さくする。不要なモジュールを減らし、インポートのためのrequires()の呼び出しも減らす。インクルードおよび初期化するモジュールを減らせば、起動時のパフォーマンスを上げることができる
  • 別の言語も検討してみる。(将来変わるかもしれないが)コールドスタートが最も長いのはJava

Lambdaの制限

  • 一時ディスク:512MB
  • ファイルディスクリプタの数:1024
  • プロセスとスレッドの数:1024
  • リクエストあたりの処理時間:300秒
  • 呼び出し時のリクエスト本体のペイロードサイズ(要求/応答型):6MB
  • 呼び出し時のリクエスト本体のペイロードサイズ(イベント駆動型):128KB
  • 呼び出し時のレスポンス本体のペイロードサイズ(要求/応答型):6MB

AWS ドキュメント
AWS Lambda の制限