6
3

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アプリで画像の保存先をS3に変更する。その1

Last updated at Posted at 2020-06-15

はじめに

画像を保存する機能を持つアプリでは、アプリのディレクトリ内に画像が保存されていました。
今回の記事では画像の保存先をS3に変更してみます。

バケットを作る

バケットとは、S3で画像が保管される場所のことです、まずはバケットというものを作りましょう。
まずはAWSにアクセスし、サービスからS3を選択します。
スクリーンショット 2020-06-10 12.37.31.png
遷移先でバケットを作成します。
スクリーンショット 2020-06-10 12.40.02.png
バケットの名前を入力しましょう。この名前は一意になる必要があるため、アプリ名+数字といった名前がおすすめです。
スクリーンショット 2020-06-10 12.41.33.png
この画面は編集不要なので「次へ」を押下しましょう。
スクリーンショット 2020-06-10 12.44.11.png
次の画面で赤枠ないのチェックボックスにチェックを入れます。
スクリーンショット 2020-06-10 12.45.27.png
バケットを作成をクリックして完成です!
スクリーンショット 2020-06-15 20.39.39.png

IAMユーザー

「AmazonS3FullAccess」の権限を与えたIAMユーザーのARNを取得しておきましょう。
下記画像の赤枠をクリックすれば取得できます。
スクリーンショット 2020-06-15 20.44.59.png

バケットポリシーの設定

続いてバケットポリシーの設定です。
先ほど作ったバケットをクリックしてポリシーの設定画面に進みましょう。
o0SkLpNOwiBNPLV1592221945_1592222053.png

赤枠内にバケットポリシーを入力します。内容は下記のコードを参考にしてください。
pDpz7KOQdkFx2kI1592222824_1592222868.png

{
    "Version": "2012-10-17",
    "Id": "Policy1544152951996",
    "Statement": [
        {
            "Sid": "Stmt1544152948221",
            "Effect": "Allow",
            "Principal": {
                "AWS": "ユーザーのARN"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::バケット名"
        }
    ]
}

これでバケット関連の設定は完了です。

各種設定ファイルの修正

fog-awsをインストールするので、Gemfileに「gem 'fog-aws'」を追記してインストールしましょう。
開発・テスト・本番環境いずれでも使えるようにするため、group ~ end で囲まれていない部分に追記します。

~中略〜
gem 'fog-aws' 

image_uploader.rbでファイルのアップロードにfogを指定します。
下記のように書くことで、本番環境とローカル環境でアップロード方法を分けることができます。

  if Rails.env.production?
    storage :fog
  else
    storage :file
  end

次はcarrierwave.rbというファイルを作り、fogのアップロード先の設定を行います。
carrierwave.rbはconfig/initializersの直下に作成してください。
ここでもif文で本番環境の場合とローカル環境の場合で処理を分けています。

require 'carrierwave/storage/abstract'
require 'carrierwave/storage/file'
require 'carrierwave/storage/fog'

CarrierWave.configure do |config|
  if Rails.env.production?
    config.storage = :fog
    config.fog_provider = 'fog/aws'
    config.fog_credentials = {
      provider: 'AWS',
      aws_access_key_id: Rails.application.credentials.aws[:access_key_id],
      aws_secret_access_key: Rails.application.credentials.aws[:secret_access_key],
      region: 'ap-northeast-1'
    }

    config.fog_directory  = 'バケット名'
    config.asset_host = 'https://s3-ap-northeast-1.amazonaws.com/バケット名'
  else
    config.storage :file
    config.enable_processing = false if Rails.env.test?
  end
end

一旦ここまで

近いうちに続きを書きます。

7/27更新
続きを書きました!
Railsアプリで画像の保存先をS3に変更する。その2

6
3
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
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?