「AWS Black Belt Online Seminar Let’s dive deep into AWS Lambda Part1」の自分向けメモ
Lambda使ったことない......レベルの人向け
サーバーレス概要
アプリケーション開発者の目的はなにか
- 価値を届けること(価値=差別化)
- 価値を生み出すところに集中したいが現実では……
アプリを動かすためにはサーバーが必要だった
以下、オンプレで必要な作業
- サーバーのセットアップ
- スペックの管理
- 冗長化
- セキュリティパッチの適用
- 差別化につながらない機能の実装
- スロットリング
- 認証認可の実装
- サーバーの見積もり、購入といった手続きで時間も必要
サーバーレスとは
差別化につながらない重労働を削減できる
- 物理マシン:ハード、ソフトともに管理が必要
- 仮想マシン:マシンスペックの制限内での管理が必要
- コンテナ:サーバーの設定周りの管理は必要
- サーバーレス:ビジネスロジックのみ管理すればよい!
特徴
- インフラの供給、管理が不要
- シームレスに上限なくオートスケール可能
- 実際の処理量に対する課金(価値に対する支払い)
- メンテナンスやダウンタイムなし
(参考)AWSのComputeサービス
AWSでアプリを動かす場合、よく比較されるサービスがEC2とLambda
まずはLambdaで検討し、厳しい場合は自由度の高いEC2を検討していく流れがよい
- EC2は自由度が高いが、管理の手間が多い
- Lambdaは自由度が低いが、管理の手間が少ない
サーバーレスなアプリケーションモデル
- イベントソース
- サービスの状態が変化する
- ファンクション
- 処理内容
- サービス
- 処理の実行先(AWSや他サービス)
Lambdaを中心に数多くのサービスと組み合わせが可能
イベントソース
- AWSサービスまたはアプリケーションを指定可能
ファンクション
- 実行されるアプリケーション
- 隔離されたコンテナ内で実行され、1つのコンテナで複数イベント処理はしない
Lambda関数基本設定
メモリ
- メモリ容量にCPUの能力も比例する
- マルチコアの利用可能
タイムアウト
- 最大15分まで秒単位で設定可能
実行ロール
- IAMロールで制御
- 最低限CloudWatchへのアクセス許可が必要
Lambda関数の制限
- サーバーのようにリクエストを待ち続けるような使い方はできない
- 利用できるアウトバウンドはTCP/IPとUDP/IPだけ
Lambdaの種類
3つに分類される
ポーリングベース | それ以外 | |
---|---|---|
ストリームベース | それ以外 | |
Kinesis、DynamoをイベントソースとしてLambda自身がポーリングする | SQSをイベントソースとしてLambda自身がポーリングする | 他AWSサービス(S3など)をイベントソースとして他AWSサービスがLambdaを呼び出す |
呼び出しタイプ
2つに分類される
- 非同期呼出し:リクエストが正常に受け付けられたかどうかのみレスポンスする
- 同期呼出し:レスポンス内容を実装し、Lambda実行完了時に返却される
ライフサイクル
- コールドスタート:1.から実行
- ホットスタート :1.~3.を再利用して4.を実行
- ENI作成
- コンテナ作成、パッケージのロード、展開
- ランライム起動。初期化
- 関数実行
- コンテナの破棄
Lambdaの実行環境
Lambdaの実行環境は、最新バージョンのOSやSDKが使われていて、開発者が意識する必要はない
ただし以下の場合は、Lambdaの実行環境のバージョンを気にする必要がある
- 任意のOSやSDKバージョンを利用したい
- DBドライバーを利用する
同時実行数
- 1000で制限されているが実績に応じて制限緩和申請することが可能
- 関数単位で任意の割合で割り振ることが可能
- 実行数の見積もりはイベントソースの種類によって異なる
- ポーリングベースでストリームベース:シャード数
- ポーリングベースでそれ以外:自動スケールアップ
- それ以外:秒間呼び出し×平均実行時間
リトライ
Lambdaの種類と呼び出しタイプによって挙動が異なる
ポーリングベース | それ以外 | ||
---|---|---|---|
ストリームベース | それ以外 | 非同期呼出し | 同期呼出し |
データの有効期限が切れるまでリトライを行う リトライ時はブロックされる |
一度イベントソースに処理がもどる リトライ時はブロックされない |
自動的に3回までリトライされる | エラー内容が返却される |
バックグラウンドプロセスの凍結と再開
- 再度実行されたときに再開する
サービス
EC2の場合
- アクセス権限にVPCサブネットおよびセキュリティグループの指定が可能
- AZごとに複数のサブネットを指定しておくとIPアドレス枯渇時やAZ障害時も耐えうる
- EC2はインターネットアクセスができなくなる
- EC2のリクエスト数でIP枯渇の可能性
Part1はここまで。