1日1%成長する ~Aws Lambda Part1~

AWSの学習メモ

Aws Lambda Part1

サーバレスとは?
    - インフラのプロビジョニング不要
    - 自動でスケール
        - Lambdaはリクエスト数に応じて自動的に起動数がコントロールされる
        - 
    - 価値に対する支払い
    - 高可用かつ安全

Lambda
    - ランタイム
    - 必要なときにコードを実行を行いたい
    - インフラの構成・管理が面倒

アプリケーションモデル
    イベントソース -> Lambda -> サービスなど
        イベントソース
            - S3にオブジェクトが作成される
            - Kinesisにストリームデータが保存される
            - HTTPSのリクエスト

        Lambda
            - PythonやNodejsなど

        サービス
            - S3やdynamodbなど

Lambda関数
    - AWS Lambdaで実行するアプリケーション
    - それぞれが隔離されたコンテナ内で実行される
    - 利用する言語の関数もしくはメソッドをハンドラーとして指定して関数を実行
    - コードは依存関係も含めてビルド、パッケージングした上でアップロード

設定
    - メモリ
        - 64MBごとに128MB~3008MB
        - 容量に応じてCPU能力も上がる
        - メモリ容量が一定数を超えるとコア数も増える

    - タイムアウト
        - 最大900秒(15分)

    - 実行ロール
        - 必要なAWSリソースへのアクセスを許可するIAMロールが必要
制限
    - インバウンドネットワークはブロックされる
        - Listenとかはできない
    - アウトバウンドはTCP/IPUDP/IP
    - ptraceシステムコールはブロックされる
    - TCP25番ポートはブロックされる

イベントソース
    - ポーリングベース
        - ストリームベースとそれ以外
        - Lambdaがポーリングをして処理するデータがある場合にLambda関数を実行
    - それ以外
        - Lambda関数はイベントソースから呼び出される
    - イベントソース
        - AWSのサービスorユーザが開発したアプリケーション

呼び出しタイプ
    非同期
        InvocationType:Event
        レスポンス:リクエストが受け付けられたかどうか
    同期
        InvocationType:RequestResponse
        レスポンス:返却される。レスポンス内容はLambda関数で用意

リトライ
    ストリームベースではないイベントソース
    同期
        - エラー発生時にレスポンスにFunctionErrorが含まれる
        - パーミッション、Limit、関数コードや設定による問題など特定のステータスコードが返却
        - AWSサービスからの呼び出しの場合、その設定に従う
    非同期
        - 自動的に2回までリトライされ、その後イベントは破棄
        - リトライ遅延有り
        - DLQ(Dead Letter Queue)を設定することでSQS or SNSトピックに移動させて確認可能

    ポーリングベースでストリームベースのイベントソース
        - データの有効期限が切れるまでリトライ
        - 失敗したレコードの有効期限が切れるもしくは処理が成功するまで、そのシャードからの読み込みはブロックされ、
         新しいレコードの読み込みは行われない
            - このLambdaの処理が完了(失敗含む)までブロックされてしまう

    ポーリングベースでストリームベースではないイベントソース
        - バッチのメッセージはすべてキューに返り、Visibility Timeoutがすぎればまた処理が行われる
         その後成功すればキューから削除される
        - 新しいメッセージの処理はブロックされない

VPCアクセスの注意
    - 設定するとインターネット不可
        - グローバルIPは振られない
    - 十分なENIまたはサブネットIPがないとリクエスト数が増えたときに失敗する

同時実行数
    - セーフガードとしてアカウントに対してデフォルトで1000で制限されている
        - 実績に応じて制限緩和申請

    - 同時実行数を超えたリクエストはスロットリングエラー(429)が返却される
        - 非同期呼び出しの場合は15~30分程度はバーストとして許容されるがそれ移行はスロットリング対象

自動スケーリング
    - 初期値はリージョンごと異なる東京リージョンは1000(オレゴンとかは3000
    - この値は制限緩和不可