聴講から1週間以上経ってしまいましたが、メモになります。(後半はざっと書いたものをそのまま貼っちゃってます🙏)
個人的サマリ
- サーバレスなエッジコンピューティングサービス
- 将来的にグローバル展開しうるサービスであれば利用を検討する
- ローケーションに最適化したコンテンツ配信をする場合(ニュース、広告など)
- パーソナライズ
- ユーザーエージェントによるコンテンツ振り分け
- 日本語?英語?
- PCから?SPから?
- オリジンの動的変更
- A/Bテスト
- B/Gデプロイ
- 新機能系
- Edge でコンテンツを生成(2017/11に追加された)
- 画像のリサイズなど
- リクエストがオリジンに到達しない
- DynamoDB Global Table との相性◎
- Edge でコンテンツを生成(2017/11に追加された)
オンラインセミナーメモ
下記のようなニュースの配信サイトを作ろうとしていたとする。
- 画像などの静的コンテンツ
- ニュースフィードなどの動的コンテンツ
- ロケーション、パーソナライズによるカスタマイズ
- 認証
構築・運用を経て、サイトがヒットして成長フェーズに移行し、世界中のユーザからアクセスされたときに、
- 増加するリクエストに対応し、
- 優れた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 の生成
- 画像のリサイズ
- ウォーターマーク
- カスタムオリジン <-> S3 オリジンの変更が可能に
- JSオンリー?
- SAM ローカルと連携する
- VPC 内 Lambda は不可