Lambda@Edgeのハマりポイント
どのパスでも常に同じHTMLを返しているためOGPが変えられないというSPAの弊害をLambda@Edgeで解消しようとして、各種ドキュメントを隅々まで読んで慎重にやれば大丈夫なんだけど、随所にハマりポイントがあって捗らなかったので個人的に危うかったところをメモ。
- Edgeに撒く関数はバージニア北部に作らないといけない。
- 関数のロールの信頼関係にedgelambda.amazonaws.comを追加しないといけない。
- オリジンレスポンス、ビューアーレスポンスでbodyを書き換えることはできないので、OGP書き換えるならリクエスト側で傍受した上でS3からhtmlファイルを取ってきて書き換えて返すとかしないといけない。
- Lambda@Edgeでは環境変数が使えないので、CloudFrontのOrigin Custom Headersで代用する。そのへんも含めて、OGP書き換えはオリジンリクエストでやるべき。
- Edgeに撒かれるのは特定のバージョンの関数なので、更新したらデプロイし直さないと反映されない。このとき新規でデプロイすると勝手にDefault(*)のBehaviorに追加されてしまうので注意。「この関数で既存のCloudFrontトリガーを使用」を選べば設定済みのものだけが新しいバージョンで置き換えられる。
- Lambda@Edgeのログは通常のLambdaのログとは別でリージョン毎に残る。
- 関数を更新した場合もCloudFrontのinvalidationを忘れずに。