Herokuへのサービスへのアクセスを高速化しよう!
Herokuは遅い!なぜなら遠いからだ!
勝手な迷信かもしれない。誤っていたら申し訳ないしこの記事無駄。誰か教えて。
Herokuは基本USリージョンのEC2から配信されます。Assetsも同様。
テキストがアメリカから来るのは我慢出来る範囲かと思うけど、何枚もの画像がアメリカからやってくるのはどうだろうと思う。わけですよ。はい。
ではどうするか?
画像などだけ東京に置きましょう。
いつやるか?今でしょ!
使うRubyGems
- AssetSync: https://github.com/rumblelabs/asset_sync
以上
というか、この記事見てやったので、
この記事みてやって下さい。
Using a CDN Asset Host with Rails 3.1(Heroku)
https://devcenter.heroku.com/articles/cdn-asset-host-rails31
以上。
で、終わっちゃうと怒られそうなので、補足。
Amazon系の設定
IAMにてユーザアカウントを作ろう!
- Access to https://console.aws.amazon.com/iam/home
- Create new user -> Download Credentials
- Users -> (選択) -> Permissions -> AttachUserPolicy
該当のバケット専用のS3フルアクセスのみ許容するテンプレ
{
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::(作る予定のバケット名なアルファベット)/*"
]
}
]
}
S3にてバケットを作ろう!
- Access to https://console.aws.amazon.com/s3/home?region=ap-northeast-1
- Create Bucket(さっき入れた名前のバケット名で)
- バケットを選択 -> Permissions -> Edit bucket policy
Anonymous(みんな)にファイルの取得を許容するテンプレ
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "AddPerm",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::(作ったバケット名なアルファベット)/*"
}
]
}
以上、これだけすれば動きます。
動くけど、補足
デフォルトだとAssetSyncはUS-EASTのS3にアップロードしようとして失敗して自動的にap-northeast-1に転送されます。そうされないためには、オプションを設定するコマンドをたたきしましょう。
$ heroku config:add FOG_REGION=ap-northeast-1
他にも、GZIPしてアップする的な、
$ heroku config:add ASSET_SYNC_GZIP_COMPRESSION=true
なんかもあります。