LoginSignup
1
1

More than 3 years have passed since last update.

Railsアプリの画像ファイルをS3へアップロード

Last updated at Posted at 2020-10-03

1. バケット作成

image.png

image.png

image.png

image.png
IAMユーザーのARNをコピー

image.png

バケットポリシー
{
    "Version": "2012-10-17",
    "Id": "Policy1544152951996",
    "Statement": [
        {
            "Sid": "Stmt1544152948221",
            "Effect": "Allow",
            "Principal": {
                "AWS": "************①****************"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::************②**********"
        }
    ]
}

上記の①に先ほどメモしておいた「ユーザーのARN」を、②に作成した「バケット名」を記述

2. fogの設定

gemfile
gem 'fog-aws'

bundle install

app/uploaders/image_uploader.rb
if Rails.env.development? || Rails.env.test?
  storage :file
else
  storage :fog
end

アプリケーションのルートからconfig/initializers直下に、carrierwave.rbというファイルを作成してください。

config/initializers/carrierwave.rb
require 'carrierwave/storage/abstract'
require 'carrierwave/storage/file'
require 'carrierwave/storage/fog'

CarrierWave.configure do |config|
  if Rails.env.development? || Rails.env.test?
    config.storage = :file
  else
    config.storage = :fog
    config.fog_provider = 'fog/aws'
    config.fog_credentials = {
      provider: 'AWS',
      aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'],
      aws_secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
      region: 'ap-northeast-1'
    }
    config.fog_directory  = 'バケット名'
    config.asset_host = 'https://s3-ap-northeast-1.amazonaws.com/バケット名'
  end
end

3. 環境変数の設定

ec2サーバ
# 本番環境
$ ssh -i [pem鍵の名前].pem ec2-user@[作成したEC2インスタンスと紐付けたElastic IP]
(ダウンロードした鍵を用いて、ec2-userとしてログイン)
$ sudo vim /etc/environment
# iを押してインサートモードに移行し、下記を追記する。既存の記述は消去しない。
AWS_ACCESS_KEY_ID='ここにCSVファイルのAccess key IDの値をコピー'
AWS_SECRET_ACCESS_KEY='ここにCSVファイルのにSecret access keyの値をコピー'
# 編集が終わったらescapeキーを押してから:wqと入力して保存して終了

AWS_ACCESS_KEY_IDとAWS_SECRET_ACCESS_KEYは、IAMユーザー作成した際に、DownloadしたCSVファイルにそれぞれ記載があります。

ec2サーバ
# 本番環境
# 編集した環境変数を適用するために一旦ログアウトします。
$ exit
$ ssh -i [pem鍵の名前].pem ec2-user@[作成したEC2インスタンスと紐付けたElastic IP]
# 環境変数が適用されているか確認しましょう。
$ env | grep AWS_SECRET_ACCESS_KEY
$ env | grep AWS_ACCESS_KEY_ID

4. 自動デプロイ

① GitHubへのpush
②「bundle exec cap production deploy」の実行

1
1
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
1
1