【AWSオンラインセミナーメモ】AWS Lambda@Edge

 聴講から1週間以上経ってしまいましたが、メモになります。(後半はざっと書いたものをそのまま貼っちゃってます🙏)

個人的サマリ

  • サーバレスなエッジコンピューティングサービス
  • 将来的にグローバル展開しうるサービスであれば利用を検討する
    • ローケーションに最適化したコンテンツ配信をする場合(ニュース、広告など)
    • パーソナライズ
  • ユーザーエージェントによるコンテンツ振り分け
    • 日本語?英語?
    • PCから?SPから?
  • オリジンの動的変更
    • A/Bテスト
    • B/Gデプロイ
  • 新機能系
    • Edge でコンテンツを生成(2017/11に追加された)
      • 画像のリサイズなど
      • リクエストがオリジンに到達しない
    • DynamoDB Global Table との相性◎

オンラインセミナーメモ

 下記のようなニュースの配信サイトを作ろうとしていたとする。

  • 画像などの静的コンテンツ
  • ニュースフィードなどの動的コンテンツ
  • ロケーション、パーソナライズによるカスタマイズ
  • 認証

構築・運用を経て、サイトがヒットして成長フェーズに移行し、世界中のユーザからアクセスされたときに、

  • 増加するリクエストに対応し、
  • 優れたUXを提供し続ける

というチャレンジをしていくとする。こんなときに Lambda @ Edge の適用を考える。

Lambda@Edge

 CloudFront と Lambda を組み合わせたレイテンシ&インフラの複雑性を排除したのが、 Lambda@Edge

  • Viewer Request: 最初に呼ばれる
  • Origin Request: Edge キャッシュにコンテンツがない場合に呼ばれる
  • Origin Response: Edge キャッシュにキャッシュする前に呼ばれる
  • Viewer Response: Edge キャッシュにコンテンツがあろうがなかろうが、Viewer にレスポンスを返す前に呼ばれる

Lambda@Edge のプログラミングモデル

  • イベント・ドリブン
    • 関数はイベントに関連付けられる
    • 関数はイベント発生時に実行される
    • 関数は入力イベントの中身を受け取って実行される
      • 中身をみて振る舞いを変えることができる
      • event
    • 関数は呼び出し元に変更した結果を返す必要がある

ユースケース

ロケーションによるカスタマイズ

 リクエスト属性の * 地域性 * デバイスタイプ * User Agent * Referer によって、レスポンスを変更する。

  • どのキャッシュを返すかを変えることもできる。ヘッダの追加(変更/削除)ができるので、
    • /jp/index.html or /us/index.html
    • /mobile/index.html or /pc/index.html などのようにURIを変えることができる。
  • オリジンを動的に選択する。
    • レイテンシにより近いオリジンを選択
    • 新機能の A/B テスト
      • Cookie を見てアクティブセッションであれば、そのオリジンを見てAorBに継続して振り分ける
      • 新しいセッションであれば、AorBを選択して振り分ける
    • B/G デプロイ
    • 検索エンジンの最適化(実ユーザとクローラのトラフィックを変更する)
  • Edge でコンテンツを生成する(2017/11に追加された)
    • 画像のリサイズなど
    • リクエストがオリジンに到達しない
    • Viewer Request イベントか Origin Request で実行可能

パーソナライズ・認証

 認証 -> 情報(設定・閲覧履歴など)取得 -> パーソナライズ

  • 認証

    • 署名付き URL/Cookie を使った認証(CloudFront の機能)
    • Edge の関数を用いた認証
    • リモートサーバを用いた認証
  • データをコードに含めてしまう

    • 読み取り専用
    • デプロイパッケージの最大サイズに制限がある
    • デプロイが必要
  • CloudFront のキャッシュ
    • 関数に近い
    • TTL によって定期的にリフレッシュ
    • 読み取り専用
  • DynamoDB
    • 読み書き可能
    • 関数から離れた単一リージョンにデータが存在
  • DynamoDB Global Table
    • DynamoDB の弱点?がなくなった!

まとめ

  • コンピュート処理をどのように Edge に移行するかをコードを交えて紹介
  • イベントごとに機能がたくさんある
    • カスタムオリジン <-> S3 オリジンの変更が可能に
      • 特定のユーザには S3 から返却 ができるようになった
    • Network 呼び出しが可能になった
      • コンテンツダウンロードの前に認証をかけることができるようになった
    • バイナリを含む Response の生成
      • 画像のリサイズ
      • ウォーターマーク
  • JSオンリー?
  • SAM ローカルと連携する
  • VPC 内 Lambda は不可