こんにちは!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 <= 追加
本番環境用のバケットを作成
新規のバケット作成画面へ移動し、
東京リージョンを選択します。
バケット名は自由ですが、
アプリ名-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の設定をして高額請求をされても、
筆者は責任を負い兼ねますのであしからず。