Lambda@Edgeの挙動を確認する実験用プロジェクトです。
Lambda@EdgeのすべてのイベントにLambda関数を用意し、どのような条件で呼び出され、どのような引数が渡されるかを記録したものです。
- Node.js
- Serverless
- Lambda@Edge
次のコマンドを実行すると新しいCloudFrontディストリビューションまでセットアップできます。デプロイには20分くらいかかります。
yarn install
yarn deploy
run-all.sh
を実行すると、下記の実験リクエストを10秒間隔で実行します。
作成されたCloudFrontディストリビューションに実際にリクエストを行った結果の出力とログを一例を紹介します。
- クエリ文字列の挙動も確認するため、すべてのリクエストには
?name1=value1&name2=value2
を付与しています。 - 各イベントではカスタムヘッダを追加しています。ヘッダ情報の伝播を確認するためです。
- イベントの値は
ClientIp
以外、実値です。CloudFrontのディストリビューションは削除済みなので応答しません。
オリジンとしたExample Domainのルートドキュメントindex.html
へのリクエストです。
curl -X GET -I 'http://CloudFrontドメイン/index.html?name1=value1&name2=value2'
すべてのLambda@Edge関数が呼び出されます。
- HTTPレスポンスヘッダ
- viewer-request event
- origin-request event
- origin-response event
- viewer-response event
CloudFrontがすでにキャッシュを保持しているので、オリジンへのリクエストが発生しません。そのためorigin-request
とorigin-response
は呼び出されません。
- HTTPレスポンスヘッダ
- viewer-request event
- origin-request 呼び出されない
- origin-response 呼び出されない
- viewer-response event
URIパス/dump-viewer-request-event
にリクエストすると、viewer-request
の段階でレスポンス(イベント引数のダンプしたJSON)を返却します。
curl -X GET -I 'http://CloudFrontドメイン/dump-viewer-request-event?name1=value1&name2=value2'
viewer-request
でレスポンスを返却すると、それ以外のイベントは呼び出されません。
- HTTPレスポンスヘッダ
- viewer-request event
- origin-request 呼び出されない
- origin-response 呼び出されない
- viewer-response 呼び出されない
viewer-request
で返却したレスポンスはキャッシュされることがないので、毎回動的な結果が出力されます。
- HTTPレスポンスヘッダ
- viewer-request event
- origin-request 呼び出されない
- origin-response 呼び出されない
- viewer-response 呼び出されない
URIパス/dump-origin-request-event
にリクエストすると、origin-request
の段階でレスポンス(イベント引数のダンプしたJSON)を返却します。
curl -X GET -I 'http://CloudFrontドメイン/dump-origin-request-event?name1=value1&name2=value2'
origin-response
は呼び出されませんが、viewer-response
は呼び出されます。
origin-request
で返却したレスポンスはキャッシュされます。そのためorigin-request
とorigin-response
は呼び出されません。