CloudFrontでURL振り分けをするときの注意点

最近仕事で担当しているサービスをオンプレからAWSに移行しました。

ビジネスの都合で短期間で移行しなければいけなかったり、
AWSに関しては、
個人的に趣味で少し触った程度だったり、
会社としてもこれからノウハウを溜めていこうという段階だったので手探り状態で
大変でしたが周りの方々にフォローしていただきながらなんとか完了することができました。

この記事では移行の際にハマったことを共有します。

CloudFront で URL振り分けをする

http://example.com/aaa のアクセスはサーバー(群)A
http://example.com/bbb のアクセスはサーバー(群)B
といったかたちで処理を分けたい場合、通常はL7ロードバランサの機能を利用しますが
ELB にはURLで振り分ける機能がありません。

そのため、代わりに CloudFront に オリジンやビヘイビアを複数設定することで
L7 スイッチとして使うのが手軽で運用も楽です。

設定についての詳細は参考URLをご参照ください。

参考URL

注意点

ですがこの方法だと フィーチャーフォン で HTTPS ページが閲覧できなくなります。
(全ての機種で閲覧できなくなるかはわかりませんが、10機種ほどで確認したら全滅でした)

  • フィーチャーフォンはサポートしていない
  • HTTPS は利用していない

といった場合は該当しません。

CloudFront はデフォルトではネームベース( SNI )の独自SSL機能を提供していて
これにはクライアント側も SNI に対応している必要がありますが
フィーチャーフォンは対応していないようです。
※ 実際にはフィーチャーフォン以外にも IE6 等の古いブラウザも対応していません。
 → Wikipedia に対応状況がまとまっています

SNI とは SSL/TLS の拡張仕様で、サーバー側が1つのグローバルIPアドレスで複数の証明書を扱えるようになるメリットがあります。

Server Name Indication - Wikipedia

回避方法

AWSドキュメントにいくつか紹介されています。

CloudFront で HTTPS リクエストを供給する方法の選択
 → SNI を使用した HTTPS リクエストの供給(ほとんどのクライアントで動作)

SNI ではなく専用 IPアドレス を利用する方法がありますが、月額で 600 USD(執筆時点) かかるので、フィーチャーフォン対応のために払うにはだいぶ高い金額なのかなと思います。

あとは、ユースケース次第ですが、フィーチャーフォン用のサブドメインを用意して
フィーチャーフォンでは CloudFront を使わない(URLで振り分けをしない)のも有りだと思います。

どうしたか

URLで振り分けるのをやめました。

もともと、オンプレ環境の限られたリソースで
“aaa にアクセスが集中した場合に bbb に影響を出さないように” という目的で振り分けしていました。
ですので サーバーA も サーバーB も同じアプリケーションが動いています。

クラウドならスケールアップ/スケールアウトが自由自在なので
“やばかったら増強すればいい” ということで振り分けるのをやめました。

書籍紹介

こちらの本で AWS の基礎を勉強しました。
各サービスの概要からバックアップ等の実際の運用について書かれていて、
知りたいところだけをピックアップして読める構成になっているので大変助かりました。

Amazon Web Services実践入門 (WEB+DB PRESS plus)

Amazon公式サイトでAmazon Web Services実践入門 (WEB+DB PRESS plus)を購入すると、Amazon配送商品なら、配送料無料でお届け。Amazonポイント還元本も多数。Amazon.co.jpをお探しなら豊富な品ぞろえのAmazon.co.jp