カテゴリー:AWS静的コンテンツと動的な機能を持つサイトをCloudFrontを前面に配置する以下のような構成で構築した際のハマりどころををピックアップしてみる。Type(MT)を採用(EC2上で起動)サイトへのアクセスは全てSSLCloudFrontに独自証明書をアップロードし、適用。CloudFrontで静的コンテンツと動的コンテンツを切り分けCloudFrontのマルチオリジン機能を使って静的なコンテンツはS3のオリジンへ、動的な機能はEC2のカスタムオリジンへ向くようオリジンとBehaviorsの設定を行う。ハマりどころs3fsを使った公開バケットのマウントは避けるMTは登録されているコンテンツを静的コンテンツとして出力する機能があり、CDPなんかでも静的コンテンツの出力先をs3fsでマウントしたS3のバケットにする事例もある。s3fsといってもネットワークを経由してS3にコンテンツをプットしているのでローカルのファイルシステムに比べて出力に時間がかかる。MTの管理画面へのアクセスはCloudFrontを経由せず直接アクセスするCloudFront経由でMTの管理画面にアクセスすることも可能だが、MTからコンテンツを静的化する際に時間がかかるとCloudFrontがタイムアウトしてしまう。CloudFrontのタイムアウトは30秒でカスタマイズができないので、コンテンツが多いサイトでは管理用にCloudFrontを経由せずに直接EC2にアクセスしてサイトの構築ができるようにしておく。S3のコンテンツアクセスする際のメタ文字の影響WordPressのデフォルトパーマリンク設定をしてるとよく見かけるwww.hoge.net/?p=2583のように、コンテンツのファイル名に特殊文字(?とか)を含む場合、www.hoge.net/%3F=2583のようにURLエンコードする必要がある。この変換自体はS3のバケットに以下のようなリダイレクトルールを設定することでリダイレクトをかけることが可能になる。Objectで設定したファイルを取得してくれる。Objectであってwww.hoge.net/blog/のようなアクセスが来た場合は何もせず、403になる。documentを設定するしかない。Hostingを有効にすると、CloudFront→S3間のアクセス制限でオリジンアクセスアイデンティティの設定はできなくなる。Forbiddenになる。)EC2で公開するコンテンツのアクセス制限EC2で公開するコンテンツへのアクセスはCloudFrontからのみに制限したい。現状ではセキュリティーグループでCloudFrontのようなAWSリソースからのアクセスを制限するような設定を行う事はできないので、セキュリティーグループでCloudFrontのIPを全て登録しそこからのアクセスのみ許可するよう設定することになる。end'とか叩くと出てくる。Javaで作ってみた。書いたように差分チェックしておく。User-Agentの転送PCとスマホで出力するコンテンツをUser-Agentで判断して出し分けたい場合S3のコンテンツS3のバケットのリダイレクトルールではUser-Agentを判定したルールは記載できないので、JavaScriptのnavigator.userAgentで頑張る。Headersを「All」にするか「Whitelist」にしてUser-Agentを登録する。User-Agentがオリジンにフォワードされるとその多様さからCloudFrontがコンテンツをキャッシュすることはほぼ無くなるけど、動的コンテンツなので気にしない。CloudFront→EC2間のSSL通信CloudFrontとEC2間の通信をSSL化する場合、以下の条件によって必要な証明書の数が異なる。仮にCloudFrontでwww.hoge.netでサイト公開し、EC2へのec2.hoge.netで名前解決してアクセスできる状態とすると。Nameがwww.hoge.netの証明書になる。Nameがec2.hoge.netの証明書になる。Nameを確認しているため。進むAWSのについて↓な機能が実現されるとこういったサイト公開の際に助かるなーって思ってます。CloudFrontのタイムアウト期間を設定できるようになるとうれしい。Objectがパス以下のコンテンツに対しても適用できるようになるとうれしい。S3のバケットのリダイレクトルールにUser-Agentによるルール設定ができるようになるとうれしい。セキュリティーグループの設定で任意のAWSリソースからのアクセス制御が設定できるようになるとうれしい。コンサルティングパートナー」です。HAWS(HAW+AWS)は、HAWがご提供するクラウドシステム構築のトータルサービスです。その関連会社の商標です。