内容
Amazon EC2インスタンス上で関数を実行できる AWS Lambdaマネージドインスタンス。
従来のLambdaは、AWSが完全に管理するサーバーレス環境で動いていましたが、今回の新機能では自分のEC2インスタンス上でLambda関数を実行できるとのこと。
向いているユースケース
- 特殊なハードウェア構成が必要なワークロード
- 安定した負荷や予測可能なワークロードでコストを最適化したい場合(Compute Savings Plans やリザーブドインスタンスなどの EC2 料金モデルを活用することで、コストを削減する)
ただし、AWSドキュメントによると、Lambdaマネージドインスタンスは、EC2インスタンスのコストに加えて15%の管理手数料を加算したEC2ベースの料金体系を採用していますとの記載がありました。
従来のLambdaとの違いのイメージすると
| 観点 | 従来のLambda | Lambda Managed Instances |
|---|---|---|
| 実行環境 | AWSが完全管理(見えない) | 自分のEC2インスタンス上 |
| 料金モデル | リクエスト数+実行時間課金 | EC2料金(Savings Plans等適用可) |
| ハードウェア選択 | 限定的 | EC2カタログから自由に選択 |
| 並列処理 | 1実行環境1リクエスト | 1実行環境で複数リクエスト可能 |
使い方の流れ
自分の環境ではまだ東京リージョンで使えなかったので、バージニア北部リージョンで試してみます。
IAM ロールの作成
Lambdaマネージドインスタンスを使用する場合、アカウント内のキャパシティプロバイダーを管理するための権限が Lambdaに必要です。
次のドキュメントを参考に、lambda.amazonaws.com にAWSLambdaManagedEC2ResourceOperator 管理ポリシーを付与したIAMロールを付与しておきます。
キャパシティプロバイダーの作成
「キャパシティプロバイダー」から「キャパシティプロバイダーを作成」をクリック。

必要なネットワークの設定と「インフストラクチャ管理用のロール」に一つ前の手順で作成したIAMロールを指定します


最大インスタンス数は「オプション」とありますが、自分の場合は指定しないと次へ進めませんでした。なお、AWSマネージメントコンソール上では、「最大インスタンス数」となっていますが、AWSドキュメントによるとvCPUsぽいです。
Under Auto scaling, specify the maximum number of EC2 vCPUs for your capacity provider. You can also choose Manual instance scaling mode to set your own scaling value for precise control.

関数の作成
基本的な設定は今までのLambdaと同じですので、AWS Lambdaマネージドインスタンスに関連する部分だけ確認していきます。
「Lambdaマネージドインスタンス」を選択し、一つ前の手順で作成した「キャパシティプロバイダーARN」を指定します。今回メモリサイズは2GBとし、メモリとvCPUの比率を指定します。

関数を作成後、EC2 の画面を確認してみると、各AZにEC2が作成されていることを確認しました。

動作確認
AWSマネージメントコンソールのLamndaからテストを実行します。なお、ログの確認にはCW Logs Endpoinntsが必要なことに注意です。

ログを確認してみます。全体の処理が0.002435秒程度のようですので、コールドスタートの問題も解決しそうです。

削除
キャパシティプロバイダーを削除すると、EC2も削除されます。EC2から削除しようとしても削除されないのでご注意ください。

最後に
取り急ぎ触ってみたので、今後触れる機会があれば随時追記していこうかと思います。
