Herokuで本番環境のファイルの保存先をS3に設定する手順

こんにちは!kossyです!





良さげなテック系記事を見つけました。
techracho.bpsinc.jp

結構中〜上級者向けな内容だと思います。何を言っているかわからない部分が5割くらい占めてますので笑
私の勉強不足もあるかと思いますが、、、

週間単位で最新情報を配信してくれているので、
Railsユーザーは毎週チェックした方が良さそうです。





さて、今回はHerokuで本番環境のファイルの保存先をS3に設定する手順を
ブログに残してみたいと思います。




環境
Rails 5.2.0
Ruby 2.5.1
PostgreSQL
gem 'fog' 2.0.0
gem 'carrierwave'
MacOS Mojave



尚、AWSアカウントは既に作成済みとし、
S3がどんなツールなのかは理解しているものとします。

アカウント作成はこちらのページが詳しいかと。
aws.amazon.com






.envファイルの作成

dotenv-railsと言うgemを導入します。

gem 'dotenv-rails'


$ bundle install


AWSのアクセスキー等を記載する.envファイルを作成します。
このファイルはGithub等にプッシュしてしまうと、アクセスキー流出につながり、
不正利用の温床となりかねませんので、
.gitignoreファイルに.envを必ず追加しましょう。

/.bundle

/log/*
/tmp/*

!/log/.keep
!/tmp/.keep

/storage/*

/node_modules
/yarn-error.log

/public/assets

.byebug_history

/config/master.key

.env <= 追加




本番環境用のバケットを作成

新規のバケット作成画面へ移動し、
東京リージョンを選択します。
f:id:kossy-web-engineer:20181109152416p:plain

バケット名は自由ですが、
アプリ名-productionとしておきましょう。

次にバケット内にimagesというフォルダを作成し、
images内で右クリックをし、公開するを選択します。

次に、認証情報のキーを取得します。

メニューバーの自分のアカウント名を選択し、「セキュリティ認証情報」を選択します。
ポップアップが出てきた場合は、「セキュリティ認証情報へ進む」を選択します。
アクセスキーを選択し、「新しいアクセスキーの作成」を選択します。
「キーファイルのダウンロード」を選択します。
ダウンロードしたキーを.envファイルに記載します。

.env

AWS_ACCESS_KEY_ID=自分のID
AWS_SECRET_ACCESS_KEY=自分のSECRET_KEY

こちらのキーは仮に流出した場合、不正利用され高額請求されることもありますので、
取り扱いには十分お気をつけください。

不正利用の事例
初心者がAWSでミスって不正利用されて$6,000請求、泣きそうになったお話。 - Qiita
AWSが不正利用され300万円の請求が届いてから免除までの一部始終 - Qiita




carrierwaveの設定

app/uploaders/image_uploader.rb

storage :fog
config/initializers/carrierwave.rb

CarrierWave.configure do |config|
  config.fog_credentials = {
    provider: 'AWS',
    aws_access_key_id: ENV['ACCESS_KEY_ID'],
    aws_secret_access_key: ENV['SECRET_ACCESS_KEY'],
    region: 'us-east-1' # リージョンの位置によって記述が異なります
  }

    case Rails.env
    when 'production'
        config.fog_directory  = 'バケット名'
        config.asset_host = 'https://s3.amazonaws.com/バケット名'
    end
end

Heroku内での設定

$ heroku config:set AWS_ACCESS_KEY_ID=[自分のID]
$ heroku config:set AWS_SECRET_ACCESS_KEY=[自分のシークレットキー]

ターミナルで上記のコマンドを実行すればOKです。



このブログを見てS3の設定をして高額請求をされても、
筆者は責任を負い兼ねますのであしからず。