AWS Lambdaとは?
「サーバーのプロビジョニングや管理の必要なしにコードを実行できるコンピューティングサービス」
サーバーレスの特徴
①インフラのプロビジョニング、管理が不要
②自動でスケール
・リクエスト数に応じて自動的に起動数がコントロールされる
③価値に対する支払い
・事前に必要なコストが存在しない
・リクエスト数並びに処理実行時間に対しての課金
・コスト効率がよく、コストゼロからのスタート可能
④高可用かつ安全
Lambda関数(ファンクション)
・Lambaで実行するアプリケーション
・それぞれが隔離されたコンテナ内で実行される
・利用する言語の関数もしくはメソッドをハンドラーとして指定し、実際の際に呼び出す
・コードは依存関係も含めてビルド、パッケージングした上でアップロード
ZIP形式
アップロードしたものはS3に保存され実行時以外は暗号化される
Lambdaファンクション-基本設定-
・メモリ:128MBから3008MBの間で設定可能
容量に応じてCPU能力なども比例
・タイムアウト:最大900秒まで
・実行ロール:必要なAWSリソースへのアクセスを許可するIAMロール
指定されたIAMロールにそってLambdaファンクションからAWSリソースへのアクセス許可される。
Lambdaファンクションの制限
・インバウンドネットワーク接続はブロックされる
・アウトバウンドはTCP/IPとUDP/IPソケットのみ
・TCP25番ポートのトラフィックはブロックされる
イベントソース
イベントの発生元となるAWSサービスまたはユーザが開発したアプリケーション
・Lambda関数の実行をトリガーする
イベントソースにはタイプがある
・ポーリングベース
さらにストリームベースとそれ以外がある
ポーリングをして処理するデータがある場合にLambda関数を実行
・その他
Lambda関数はイベントソースから呼び出される
ポーリングとは
複数のプログラミング通信に対し、一定のタイミングの問合せがあった場合に送受信処理を行う通信方式。一旦中継点に通信内容をためておいて、受信側のタイミングが良い時は通信を行う。
ストリーム
通信ネットワークの分野では、データを送受信する際にデータ全体の受信完了を待たずに受信したデータから順番に処理を行う送受信方式(ストリーミング)や、そのように送受信される連続的なデータの流れをストリームという
AWSサービスの場合、呼び出すLambdaファンクションの設定情報を保持する(イベントソースマッピング)
呼び出しタイプ
非同期呼び出し
・InvocationTypeはEvent
・レスポンス内容はリクエストが正常に受け付けられたかどうかのみ
同期呼び出し
・InvocationTypeはRequestResponse
・実行完了時にレスポンスが返ってくる。レスポンス内容はLambdaファンクション内でセット
Lambda関数のリトライ
エラーの種類、イベントソース、呼び出しタプによって異なる
ストリームベースではないイベントソース
・同期呼び出し
エラー発生時にはレスポンスのヘッダにFunctionErrorが含まれる
・非同期呼び出し
自動的に2回間でリトライされ、その後イベントは破棄される
リトライには遅延がある
ポーリングベースでストリーミングベースのイベントソース
・データの有効期限が切れるまでリトライ
・失敗したレコードの有効期限が切れるか処理が成功するまで、新しいコードは読み込みは行われない
ポーリングベースでストリームベースでないイベントソース
・バッチのメッセージは全てキューに返り、処理が成功すれば、キューから削除される
・新しいメッセージの処理はブロックされない
VPCアクセス
・VPC内のリソースへインターネットを経由せずにアクセス可能
・VPC内リソースにアクセスさせたいLambdaファンクションに対してVPCサブネットおよびセキュリティグループを設定
・Elastic Network Interface(ENI)利用
VPCアクセスの注意点
設定した時点でインターナットアクセスは不可となる
・パブリックIPアドレスは割り当てられない
・必要な場合NATインスタンスを用意する、もしくはAmazon VPC NATゲートウェイを利用すること
充分な数のENIまたはサブネットIPがない場合、リクエスト数が増えた場合失敗する
アクセス許可、実行ロール
LambdaファンクションがAWSのサービスやリソースにアクセスするためのアクセス許可
・最低でもログ出力用にAmazon CloudWatch Logsへのアクセス許可が必要
・Lambdaファンクション作成時に指定することで呼び出された時にLambdaによってロールが引き受けられる
・IAMを利用して作成
信頼されたエンティティとしてAWS Lambdaを利用
アクセス許可-リソースポリシー
Lambdaファンクションおよびレイヤー用にリソースベースのアクセス許可ポリシーをサポート
・リソースごとに他のアカウントに使用許可を付与することが可能
・AWSのサービスによる関数の呼び出しを許可することも可能
同時実行数
・ある時点における実行中のLambda関数の数
・アカウントに対してデフォルトで1000で制限されている
・制限緩和することが可能
・同時実行数を超えてリクエストされた場合、スロットリングエラーが返却される
同時実行数の見積もり
ボーリングベースかつストリームベース
・シャード数と同じ
シャード
「インデックスを分割したもの」
-なぜシャードがいるのか?-
レプリケーションを行うため
インデックスのコピーを別サーバに保持していた場合、サーバ障害時でも可用性が維持できる。
こういった利用の場合、元のインデックスをプライマリーシャード、複製しているものをレプリカシャードと呼ぶ。
ポーリングだがストリームベースではない
・同時実行数までポーリングを自動的にスケールアップ
自動スケーリング
・トラフィックの増加に応じて許可された同時実行数まで動的にスケール
・負荷が増加した時は、負荷が落ち着くもしくは同時実行の制限に到達するまで1分ごとに500ずつ同時に実行していく
・初期値はリージョンごとに異なるが、東京リージョンの場合1000
・この値は制限緩和不可