概要
データを分析するにあたってエッジロケーションからのリクエスト単位で集計をしたく、CloudFrontのログに出力されているx-edge-request-idを使用するという事になった
x-edge-request-idはレスポンスヘッダではx-amz-cf-idとして出力されるのでてっきりOriginにもx-amz-cf-idに同じ値が格納されていると思っていた
しかし検証した結果、OriginでCloudFrontからのリクエストを受け取った際にx-amz-cf-idはあるにはあるが
ヘッダに格納されているx-amz-cf-idの値がx-edge-request-idとは異なる値になっていた
これを解消するために調査した結果を記しておく
結論
Lambda@EdgeをOrigin Requestに設置し、リクエストを中継する
Originに渡されるx-amz-cf-idがx-edge-request-idと同じになる
Lambda@Edgeのサンプルコード
import json
def lambda_handler(event, context):
# TODO implement
print('####lambda edge start###')
print('####event###')
print(event)
print('####lambda edge end###')
print('####context###')
print(context)
cf_request = event['Records'][0]['cf']['request']
return cf_request
その他
他の方法としてはOrigin RequestのLambda@Edgeで別のヘッダにrequestId(x-edge-request-idのLambda@Edgeのkey)をコピーする方法がある
なんでこんな挙動なのかは諸事情によりAWSの技術サポートに聞くことができず、知ってる人いたら教えてください