LoginSignup
4

More than 5 years have passed since last update.

Heroku x Rails3.2 x assets delivery from AmazonS3(東京/ap-northeast-1) use AutoSync Gem

Posted at

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にてユーザアカウントを作ろう!

  1. Access to https://console.aws.amazon.com/iam/home
  2. Create new user -> Download Credentials
  3. Users -> (選択) -> Permissions -> AttachUserPolicy

該当のバケット専用のS3フルアクセスのみ許容するテンプレ

{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::(作る予定のバケット名なアルファベット)/*"
      ]
    }
  ]
}

S3にてバケットを作ろう!

  1. Access to https://console.aws.amazon.com/s3/home?region=ap-northeast-1
  2. Create Bucket(さっき入れた名前のバケット名で)
  3. バケットを選択 -> 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

なんかもあります。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4