LoginSignup
3
2

More than 1 year has passed since last update.

[Rails]herokuで画像の保存場所にAmazonS3を使用してみる

Last updated at Posted at 2021-05-06

はじめに

本記事ではAWSの設定等は含まれておりません。あらかじめご了承ください

AmazonS3とは

S3とは、AWSが提供するサービスの一つで、インターネット上にデータを保存する箱を借りられるサービスというものです。
S3を利用することで、画像を保存したり、保存してある画像を取得したりすることができます。

実装方法

まずは画像投稿した際などに画像の保存先がS3となるように変更していきます。

はじめにS3が使用できるようにしましょう。

#一番下に記述
gem "aws-sdk-s3", require: false

※bundle installを忘れずに!!

続いて、画像の保存先を指定します。

config/environments/development.rb
# ~省略~

#config.active_storage.service = :local #コメントアウト!!!!!
config.active_storage.service = :amazon

# ~省略~

次に、S3で使用するバケット名とリージョン名を記述します。

config.storage.yml
test:
 service: Disk
 root: <%= Rails.root.join("tmp/storage") %>

local:
 service: Disk
 root: <%= Rails.root.join("storage") %>

#以下を追記
amazon:
 service: S3
 region: ap-northeast-1
 bucket: ご自身の「バケット名」を入力
#ここまで

# ~省略~

次に、S3にアクセスするための認証情報を設定します。
これは機密情報なので環境変数にいれます。

% vim ~/.zshrc

以下を記述してください

export AWS_ACCESS_KEY_ID="CSVファイルのAccess key IDの値を貼り付け"
export AWS_SECRET_ACCESS_KEY="CSVファイルのSecret access keyの値を貼り付け"

なお、ここにいれるものは、AWSでIAMユーザを作った際にダウンロードする「new_user_credentials.csv」に記載してあります。

入力したら保存して(esc+:wq)してパスを通します

% source ~/.zshrc

ここまでで、環境変数を設定することができました。
実際にソースコード内で環境変数を使用して、S3への認証情報を記述しましょう。

config/storage.yml
#省略
amazon:
 service: S3
 region: ap-northeast-1
 bucket:  (自身のバケット名が記載されている状態です)
 #追加
 access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %>
 secret_access_key:  <%= ENV['AWS_SECRET_ACCESS_KEY'] %>

# ~省略~

ここまででローカル環境では保存先がS3になっているかと思います。何かを投稿した時、AWS側で確認することができるかと思います。

さあ!後少し!!
ローカル同様に、heroku上でも環境変数を設定します。Herokuで環境変数を扱うには、「heroku config:setコマンド」を打つ必要があります。

% heroku config:set AWS_ACCESS_KEY_ID="CSVファイルのAccess key IDの値を貼り付け"
% heroku config:set AWS_SECRET_ACCESS_KEY="CSVファイルのSecret access keyの値を貼り付け"

反映されたかどうかは、以下のコマンドで確認できます

% heroku config

あ!!!忘れてた、、、
本番環境でも保存先を変更しておきましょう

config/environments/production.rb
# ~省略~

#config.active_storage.service = :local #コメントアウト
config.active_storage.service = :amazon

# ~省略~

あとは、これらの変更点をherokuに反映っと、、、

% git push heroku master

完成!!!!

補足(エラー発生した人向け)

画像の保存先の設定を変更することにより、画像の参照先がアプリケーション内からS3へ置き換わります。
当然、S3導入前に投稿した画像が表示できなくなります。
それが嫌だ!!という方や何かしらのエラーが出た方は以下のコマンドを実行し、一度データベースをリセットしてください。
この際、データベースに保存されていたデータは全て消えるため注意しましょう。

% heroku run DISABLE_DATABASE_ENVIRONMENT_CHECK=1 rails db:drop db:create db:migrate

おわりに

前回の記事と合わせれば、ひとまずherokuでのデプロイは完璧にできるかと思います。
次はCircleCIやDocker、AWSの導入に挑戦していきます!!!

前回の記事([Rails]ノーエラーでherokuへデプロイしていく)
https://qiita.com/tochisuke221/items/62d114989e872fa4e50a

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