8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】Refileでの保存先をS3にする

Last updated at Posted at 2020-05-11

開発環境

Ruby 2.5.7
Rails 5.2.3

※今回、デプロイについての説明は割愛します。
※AWSのアカウントを持っている前提で話を進めていきます。
※Refileは導入済み

IAMでユーザーの追加

サービスからIAMを選択し、ユーザーを選択するとユーザーを追加することができます。
プログラムによるアクセスにチェックをいれてください。
スクリーンショット 2020-05-12 2.48.19.png
既存のポリシーを直接アタッチからAmazonS3FullAcccessにチェックを入れます。
アクセスキーIDとシークレットアクセスキーは忘れないようにメモをするかcsvでダウンロードしておきましょう。

ユーザーの追加後、そのユーザー名を選択したら↓のような画面が出てきます。
そこの認証情報からコンソールのパスワードを設定しましょう。(デフォルトでは無効になってます)
※ここのユーザーのARNはコピーしておくと後の設定が少し楽になります。
スクリーンショット 2020-05-12 2.51.43.png

S3バケットの追加

ここから先は追加したIAMユーザーで作業を行います。
今使っているアカウントからログアウトし、作成したIAMユーザーでログインしてください。
リージョンは無難に東京を選択しておきましょう。
スクリーンショット 2020-05-12 3.08.29.png
この2つにチェックを入れ、バケットを作成してください。

バケットポリシーの設定

バケット単位でアクセス制御を設定するために、作成したS3バケットを選択してからアクセス制限>バケットポリシーを選択

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "statement1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::awsアカウントのid:user/IAMで追加したユーザー名"
            },
            "Action": "*",
            "Resource": "arn:aws:s3:::作ったS3バケット名"
        }
    ]
}

これを自分の設定に置き換えて保存してください。

gemの追加

gemfile
gem "refile-s3"
gem 'dotenv-rails'

refile-s3 : refileで簡単にS3にアップロードができるようになるgemです
dotenv-rails: envが使えるようになるgemです

記述後bundle installを実行。

refile.rbを作成

config/initializersrefile.rbを作成してください。

refile.rb
require "refile/s3"

aws = {
  access_key_id: ENV['AWS_ACCESS_KEY_ID'],
  secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
  region: "ap-northeast-1",
  bucket: "作成したS3バケット名",
}
Refile.cache = Refile::S3.new(prefix: "cache", **aws)
Refile.store = Refile::S3.new(prefix: "store", **aws)

作成したファイルに上記を記述
リージョンは東京以外で作られた場合は変更して下さい。

.envの作成

Gemfileなどがあるディレクトリに.envを作成

.env
AWS_ACCESS_KEY_ID="アクセスキー"
AWS_SECRET_ACCESS_KEY="シークレットキー"

設定後、githubなどに.envファイルを上げないように.gitignore/.envと追記しておきましょう。

最後に

あとはいつも通りデプロイをすることで、画像がS3に保存できるようになります。

8
9
0

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
8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?