はじめに
CloudFrontを使ったリダイレクト処理を実装するにあたり、CloudFront Functions,Lambda@Edgeの2つの選択肢があったので違いをまとめました。
目次
- CloudFront Functionsとは
- Lambda@Edgeとは
- CloudFront FunctionsとLambda@Edgeの違い
- ビューワリクエストとは
- ビューワレスポンスとは
- オリジンリクエストとは
- オリジンレスポンスとは
CloudFront Functionsとは
実行時間が1ミリ秒未満と非常に短いですが、毎秒数百万のリクエストを処理することができます。
実装はCloudFrontの画面で行い、JavaScriptで記載します。
作成したコードはCloudFrontにデプロイする前にテストが可能で、デプロイもワンクリックで完了します。
作成したFunctionsはCloudFrontのパスパターンを定義する際に紐づけることができます。
注意点として、ビューワーリクエスト、ビューワーレスポンスにのみ紐づけが可能です。
Lambda@Edgeとは
CloudFront内で実行できるLambdaです。
CloudFrontと組み合わせることでエッジロケ-ションごとにコンテンツを切り替えたり、接続元IPによってレスポンスを指定することが可能です。
CloudFront FunctionsとLambda@Edgeの違い
この2つを使い分けを考えた場合は『実行時間』が特に大きな違いになるかと思います。
少しでも時間がかかる処理の場合はLambda@Edgeになります。
よく使いそうな項目を表にしましたが、さらに詳しい情報はこちらをご参照ください
CloudFront Function | Lambda@Edge | |
---|---|---|
実行場所 | エッジロケーション | エッジキャッシュ |
リクエスト/レスポンス | ビューワリクエスト ビューワレスポンス |
ビューワリクエスト ビューワレスポンス オリジンリクエスト オリジンレスポンス |
ランタイム | JavaScript (ECMAScript5.1準拠) |
Python Node.js |
最大実行時間 | 1ミリ秒未満 | ビューワトリガー:5秒 オリジントリガー:30秒 |
スケール量 | 毎秒1000万リクエスト | 毎秒1万リクエスト |
処理可能データ | リクエスト レスポンスヘッダ |
リクエスト レスポンスヘッダ 本文 |
ビューワリクエストとは
キャッシュ内にリクエストされたオブジェクトがあるか確認する前に関数を実行します。
ビューワレスポンスとは
リクエストされたファイルがビューワーに返される前に関数を実行します。
キャッシュ内にリクエストされたオブジェクトが既に存在したかどうかに関係なく、関数が実行されます。
以下の場合はビューワーレスポンスの関数が実行されないので注意が必要です。
- オリジンが HTTP ステータスコードとして 400 以上を返した場合。
- カスタムエラーページが返された場合。
- ビューワーリクエストイベントによってトリガーされた関数からレスポンスが生成された場合。
- CloudFront で HTTP リクエストが自動的に HTTPS にリダイレクトされる場合 ([ビューワープロトコルポリシー] の値が [Redirect HTTP to HTTPS] の場合)
オリジンリクエストとは
現時点ではLambda@Edgeのみ使用可能です。
CloudFrontが受け付けたリクエストをオリジンに転送するタイミングで関数を実行します。
※リクエストをオリジンに転送する場合にのみ実行されます。そのため、キャッシュ内にデータがある場合はオリジンへの転送が行われないため関数も実行されません。
オリジンレスポンスとは
現時点ではLambda@Edgeのみ使用可能です。
オリジンからのレスポンスをキャッシュする前に関数を実行します。
リダイレクト方法
さいごに
CloudFrontを使ったリダイレクトや構築については社内ブログの方で取り上げようと思っていますので気になる方は覗いていただけると嬉しいです。
今回はメモっぽい感じになりましたが以上になります。