Traffine I/O

日本語

2022-10-10

Lambda@Edge

Lambda@Edgeとは

Lambda@EdgeはAmazon CloudFrontのユニークな機能であり、ユーザーに効率的なサーバーレスコンピューティング環境を提供するために設計されています。この機能により、開発者はカスタムコードを世界中のエッジロケーションで実行し、エンドユーザーに近づけることができます。このサーバーレスコンピュートサービスにより、サーバーのプロビジョニングや管理なしでコードを実行できるため、ワークフローが効率化され、アプリケーションを立ち上げる時間が短縮されます。

Lambda@Edgeの動作原理

Lambda@Edgeの動作原理は比較的シンプルかつ巧妙です。CloudFrontリクエスト(例:HTTPリクエスト)がイベントをトリガーとすると、そのリクエストはユーザーに地理的にもっとも近いエッジロケーションにルーティングされます。そして、対応するLambda@Edge関数が実行され、リクエストを処理してユーザーのアプリケーションに応答を送信します。

このプロセスはリアルタイムで行われるため、開発者はエッジロケーションでHTTPリクエストとレスポンスを操作し、デバイスの種類、場所、またはクッキーなどのユーザー固有の要素に基づいて判断を行うことができます。

Lambda@Edgeの主要コンポーネント

Lambda@Edgeは、いくつかの主要なコンポーネントから成るシステムです。

  • AWS Lambda関数
    開発者が記述するカスタムコードのことです。AWS Lambdaがサポートする言語(Node.js、Python、Javaなど)で記述できます。

  • Event Source(イベントソース)
    イベントソースはLambda関数の実行をトリガーする要素です。Lambda@Edgeの場合、イベントソースはCloudFrontイベントとなります。

  • Edge Location(エッジロケーション)
    エンドユーザーにもっとも近いAWSのサイトです。ここでLambda関数が実行されます。

  • Amazon CloudFront
    これは低遅延と高速なデータ、アプリケーション、APIを世界中の顧客に提供するコンテンツデリバリーネットワーク(CDN)サービスです。CloudFrontはAWS Shieldと統合されており、DDoS対策が行われています。

割り当て可能なCloudFrontイベント

CloudFrontイベントは、Lambda関数を挿入できるリクエスト処理のフロー上のポイントを表します。これらのイベントはリクエストのライフサイクルにフックし、さまざまなステージでカスタムロジックを挿入することができます。

Using AWS Lambda with CloudFront Lambda@Edge
Using AWS Lambda with CloudFront Lambda@Edge

Viewer Request(ビューアーリクエスト)

ビューアーリクエストイベントは、CloudFrontがビューアーからのリクエストを受信する際に発生します。キャッシュ内にリクエストされたコンテンツがあるかどうかをチェックする前に、このイベントに割り当てられたLambda関数はリクエストを検査して変更することができます。これは、A/Bテストの実装にクッキーを検査したり、SEO最適化のためにURLを書き換えるなどのタスクに特に役立ちます。

Origin Request(オリジンリクエスト)

オリジンリクエストイベントは、CloudFrontがキャッシュ内でリクエストされたコンテンツを見つけられなかった場合に、オリジンサーバーにリクエストを転送する際にトリガーされます。このイベントにアタッチされたLambda@Edge関数は、オリジンに送信されるリクエストを変更する機会を持ちます。用途には、プライベートコンテンツに対してHTTPリクエストを生成したり、オリジンサーバーに送信する前にリクエストヘッダーを変更するなどがあります。

Origin Response(オリジンレスポンス)

オリジンレスポンスイベントは、CloudFrontがオリジンサーバーからのレスポンスを受信した直後にトリガーされますが、レスポンスをキャッシュに格納する前です。このイベントは、オリジンからのレスポンスを変更する機会を提供します。ヘッダーの変更、コンテンツの圧縮、またはキャッシュの目的でカスタムヘッダーの追加などが可能です。

Viewer Response(ビューアーレスポンス)

ビューアーレスポンスイベントは、リクエスト処理フローの最後のイベントです。CloudFrontがビューアーにレスポンスを送信する直前に発生します。このイベントに割り当てられたLambda関数は、レスポンスを操作し、ヘッダーの追加や変更、またはレスポンスのボディの変更などを行うことができます。セキュリティ対策としてセキュリティヘッダーの追加や機密データの曖昧化などを行うのに適したポイントです。

Lambda@Edgeの制限事項

Lambda@Edgeをアプリケーションで使用することで多くの利点が得られますが、開発者が把握しておくべきいくつかの制限事項が存在します。

https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/edge-functions-restrictions.html

デプロイリージョンの要件

現時点では、全てのLambda@Edge関数はAWSの北バージニア(us-east-1)リージョンで作成する必要があります。関数は世界中のロケーションで実行されますが、作成される関数自体は北バージニアに存在する必要があります。

Lambda関数のバージョニング

Lambda関数をCloudFrontディストリビューションに関連付ける場合、バージョン管理されたAWS Lambda関数のARN(Amazon Resource Name)を提供する必要があります。

$LATESTバージョンを使用することはできません。代わりに、関数の数値バージョンまたはエイリアスを指定する必要があります。これは、CloudFrontとエッジロケーションが実行すべき関数の正確なバージョンを知るための重要な要件です。

参考

https://aws.amazon.com/lambda/edge/
https://docs.aws.amazon.com/lambda/latest/dg/lambda-edge.html
https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/edge-functions-restrictions.html

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!