Lambda@Edgeとは?
AWS LambdaをCloudFrntのイベントを契機にエッジロケーションでNode.jsのソースを実行させることができます。
特徴
AWS Lambdaを動かすのでLambdaの以下のような特徴は流用できます。
- サーバー管理不要
- 自動管理、スケーリング
- グローバル分散
- 利用に応じた支払い
メリット
オリジン負荷低減/オリジンアーキテクチャをシンプル化できる。
例えば、電子書籍コンテンツを配信するサービスであればその電子書籍のアクセス認証などをLamda@Edge側に寄せてアプリケーションサーバー側の処理内容をシンプル化するなど。
実行可能ポイント(イベント)
以下4つのポイント(イベント)でLambda関数を実行が可能です。なお、Origin側のイベント(Origin RequestとOrigin Response)は実行結果をキャッシュ可能です。
具体的にできること
基本的にはデータストアを必要としない処理に関してはある程度なんでもできてバックエンドアプリケーションからこちらに寄せてしまってもよいです。(ただ、もしデータストアを使いたい場合はDynamoDB Global TableというLambda@Edgeと非常に親和性が高いサービスもあります。)
コンテンツ生成
- 特定のパターンのみ動的なレスポンスにする。(HTMLを少し変える)
- イメージのリサイズ
- A/Bテスト
セキュリティ
- ベーシック認証をかける。
- CDNのコンテンツの利用可否をトークンによる検証を実行する。
- コンテンツの有効期限チェック
キャッシュヒット率の向上
- どこのオリジンにアクセスを流すかのコントロール
- キャッシュコントロールヘッダをいじる。
- クエリ文字列やユーザーエージェントの正規化
意図的にCache-Controlの値をいじってキャッシュにあえてヒットさせないなどの手法などをとることも可能です。
Lambda@Edge用のLambda関数のデプロイフロー
仕組みとしては、バージニア北部のリージョンにマスタ関数を作成して各リージョンにレプリカを作るというようなデプロイの流れになります。
Lambda@Edgeの実行環境
リージョン
2023年現在だと、「米国東部 (バージニア北部) リージョン」しか対応していません。東京リージョンでは対応していないので必ず作成時はバージニア北部リージョンを選択しましょう。
ランタイム
Nodeはもともと実行できたが、2020年3月からPythonも実行可能になった。
実装
Lambda関数の作成
任意のコードを貼り付けて、デプロイします。その後バージョンを一つ作成します。
トリガーの追加
cloudfrontのデストリビューションと、event名を選択します。(下記の例で言えば「Origin request時」に実行している。)
この記事へのコメントはありません。