Slide 1

Slide 1 text

Cloudfront with Rails クラウドフロントとRails の ツンデレ な関係 2016.07.26 「AWSのおJAWSな使い方」JAWS-UG大阪&JAWS-UG関西女子会合同企画

Slide 2

Slide 2 text

自己紹介 TiNm’S( ティムズ )と読みます。 プログラマーです。 Ruby On RailsとAWSが主戦場です。 好きなAWS サービスは、OpsWorks。 花澤香菜ちゃん好き。 JAWS-UG-KOBE 所属。 ポケモンGOはまだやってません。

Slide 3

Slide 3 text

はじめに...

Slide 4

Slide 4 text

に をかぶせたら、 Webサービスが動かなくなった 体験談をお話します。 今回は... ※Railsはやったことあるけど、 AWSには構築したことないなあ。な人向けの内容です。

Slide 5

Slide 5 text

なぜ話したいと思ったか。

Slide 6

Slide 6 text

Cloudfrontはデプロイに20分くらいかかる。 「ちょっとかえて、デプロイ、20分待つ。」 を繰り返すと、時間だけが取られていく。 もう、Prime Video見るしかなくなる。

Slide 7

Slide 7 text

Agenda ● RailsでCloudfrontを導入する理由 ● 転送するhttpメソッドではまる。 ● 転送するhttpヘッダではまる。 ● Cookieの転送ではまる。 ● クエリストリングの転送ではまる。

Slide 8

Slide 8 text

RailsでCloudfrontを導入する理由

Slide 9

Slide 9 text

アセット※のキャッシング Cloudfrontにアセットを設置することで、 js、css、 imageファイルをキャッシュできる。 その昔、アセットは、 asset_sync などのgemを利 用してS3に配置していた。 この方法は現在推奨されていない。 (Heroku も assets は、CDNに設置することを推 奨) 参考:  http://guides.rubyonrails.org/asset_pipeline.html ※ Railsで言うところの静的なファイル群のことで、おもに js、css、画像ファイルがそれに当たる。

Slide 10

Slide 10 text

HTTPS化 Cloudfrontに証明書を設置して、 HTTPS化する。 サーバーやELBに証明書を入れ込む必要がないので、 Railsの設定を単純化できる。 また、バックエンドを httpにすることで、暗号化、複合化を Rails側で実施する必要がなくなり、パフォーマン ス的にも効果が見込める。 (証明書もACM(AWS Certificate Manager)を利用すれば、証明書の管理もできて効率的。 )

Slide 11

Slide 11 text

WAFの導入 悪い人をCloudfrontで弾いてしまう。 SQLインジェクションなどの脆弱性対策も Cloudfrontでやってしまう。

Slide 12

Slide 12 text

1: 転送するhttpメソッドではまる。

Slide 13

Slide 13 text

POST, PUTできない (>m<)0 Cloudfrontが受信するHTTPメソッドの デフォルト設定はGET,HEADのみ。 (つまり静的サイト向け ) Rails(に限らずほとんどの Webアプリ)では、 PUT、POST、PATCH、DELETEの許可が必 須。 すべてのHTTPメソッドを許可する。

Slide 14

Slide 14 text

2: 転送するhttpヘッダではまる。

Slide 15

Slide 15 text

いつもoriginが返る。

Slide 16

Slide 16 text

Hostヘッダを転送しておく。 RailsはHostヘッダでResponse先を判断している。 Hostヘッダが転送されない場合、 Railsは、Responseとして”//”(ルート)返却する。 つまり、ELBやEC2インスタンスのアドレス (origin)が返ることになる。

Slide 17

Slide 17 text

3: cookieの転送ではまる。

Slide 18

Slide 18 text

ログインできん。 Cloudfrontをかぶせたとたんにログイ ンできない。

Slide 19

Slide 19 text

Cookieを転送する。 RailsのセッションはデフォルトでCookieを利用する。 Cookieが転送されないとログインもできない。

Slide 20

Slide 20 text

4: クエリストリングではまる。

Slide 21

Slide 21 text

検索できん。 検索機能でよくあるURL。 http://example.com/search?q=XXXXXXX originでは効くのに、Cloudfrontをかぶせると 効かなくなる。

Slide 22

Slide 22 text

クエリストリングを転送する。 Cloudfrontはデフォルトでquerystringを転送しない。 検索機能を提供するransack を利用するならこの設定が必須。

Slide 23

Slide 23 text

まとめると

Slide 24

Slide 24 text

● すべてのHTTPメソッドを許可する。 ● Hostヘッダを転送する。 ● (セッションデフォルトなら)Cookieを転送する。 ● (gemによっては)クエリストリングを転送する。

Slide 25

Slide 25 text

明日は、 Alexa !!!!!!!!!!!!!! そして....

Slide 26

Slide 26 text

https://www.youtube.com/watch?v=vizNdRTXK90&feature=youtu.be