⚰️

Lambda@Edgeについての覚え書き

2023/05/22に公開

作っているプロダクトのアーキテクチャに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つ。

  1. us-east-1リージョンで作成する
  2. Versioningを有効にする

CloudFrontのディストリビューションでLambda@Edgeを有効にする

先程作成したLambdaを指定して、Lambda@Edgeを有効にする。バージョンも含めて指定する必要がある。

Discussion