Lambda@Edgeについての覚え書き
作っているプロダクトのアーキテクチャにLambda@Edgeを組み込んだのだが、検討の末Lambda@Edgeは使わないことになったので、供養の覚え書きを残す。
Lambda@Edgeの概要
CloudFrontで実行されるLambda。CloudFrontにはCloudFunctionという似た機能もあるのだが、Lambda@Edgeは実行可能時間が長かったり、CloudFunctionよりもリッチな操作をしたいときに有用。
料金
料金は通常のLambdaの3倍になっている。具体的には、
- 100万リクエストあたり $0.6
- GB/秒あたり $0.00005001
- 128MB(最小)のLambdaの場合、1秒あたり $0.00000625125
- 128MBのLambdaで1リクエストの処理に1秒かかる場合、100万リクエストあたり $6.25125
Lambda@Edgeの制限
ランタイム
ランタイムはNodeかPythonしか選択できない。また、コンテナイメージを使用したデプロイも利用できないため、NodeやPythonのコードをzipにまとめて直接アップロードするかS3経由でアップロードするかの選択肢しかない。
環境変数
環境変数を設定することはできない。そのため、Nodeのオプション( NODE_OPTIONS
)などを設定することもできない。個人的には NODE_OPTIONS
経由で source map を有効化できないのが辛かった。
質問
有識者に答えてもらえたら嬉しい質問。
Lambda@Edgeのクオータ
Lambd@Edgeの同時実行数に関するクオータは、通常のLambdaのものと同じく、同一リージョン内で1000となっている。また、後述するようにLambda@Edgeで使用するLambdaはus-east-1リージョンにデプロイする必要がある。ここで疑問なのは、 Lambda@Edgeのリージョンとは、us-east-1のことを指すのか、それとも実際に実行されたエッジサーバーが属するリージョンを指すのか。
Lambda@Edgeをデプロイしてみる
S3バケットを用意する
Lambdaのソースコードを格納するS3バケットを用意する。このバケットはus-east-1リージョンにある必要はない。
作成したS3バケットにソースコードをアップロードする
ソースコードはzip化してアップロードする。このへんは通常のLambdaと同じ。
Lambdaを作成する
先程のzipファイルをもとに、Lambdaを作成する。このときの注意点は2つ。
- us-east-1リージョンで作成する
- Versioningを有効にする
CloudFrontのディストリビューションでLambda@Edgeを有効にする
先程作成したLambdaを指定して、Lambda@Edgeを有効にする。バージョンも含めて指定する必要がある。
Discussion
自分も全く同じところが気になったので AWS サポートに聞いてみました。
結論、「実行されたエッジサーバーが属するリージョン」とのことでした!