0
1

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に変更する

Posted at

開発環境

Mac OS Catalina 10.15.7
ruby 2.6系
rails 6.0系

本番環境

nginx 1.18.0
AWS(EC2, S3, ALB, Route53)

前提

  • capistranoのによる自動デプロイを導入しています
  • 無料枠の関係で、本番環境にのみS3を導入します
  • AWSには登録済みとします

バケット作成

まずはAWSにログインして、ヘッダーの「サービス」 をクリックします。
一覧表示されるサービス名の中から、S3を選択しましょう。

スクリーンショット 2021-02-22 20.52.40.png

S3を選択したら、バケットを作成をクリックしてバケットを作成します。スクリーンショット 2021-02-22 20.54.33.png

任意のバケット名を入力し、リージョンを「アジアパシフィック(東京)」にしましょう。

スクリーンショット 2021-02-22 20.57.13.png

その後、ブロックパブリックアクセスのバケット設定をします。
以下のようにチェックをつけてください。
一番上の「ブロックパブリックアクセスのバケット設定」のチェックを外すと、以下のチェックボックスが選択可能になります。

スクリーンショット 2021-02-22 20.59.43.png

チェックできたら他は特に変更せず、バケットを作成しましょう

バケットポリシー設定

作成したバケットをクリックして、「アクセス許可」からバケットポリシーの編集をします。

スクリーンショット 2021-02-22 21.13.25.png

バケットポリシーに以下を貼り付けましょう。

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

できたら変更を保存をクリックします。

aws-sdk-s3を導入

ここからはrails側です。
まず、S3を使用するために必要なGemfileを導入します。

Gemfileに以下を追記

gem "aws-sdk-s3", require: false
#gemfile記述後
bundle install

production.rbを編集

production.rbの画像保存先をamazonの変更します。

config/environments/production.rb
config.active_storage.service = :amazon

storage.yml編集

strage.ymlを編集します。access_key_idとsecret_access_keyはこの後、環境変数に設定します。

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

## 以下を追記
amazon:
  service: S3
  region: ap-northeast-1
  bucket: 作成した自身の「バケット名」を入力
  access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %>
  secret_access_key:  <%= ENV['AWS_SECRET_ACCESS_KEY'] %>

環境変数を設定する

ターミナルで環境変数を設定します。
既に設定してある場合は飛ばしてもらって大丈夫です。

vim ~/.zshrc

iを押してインサートモードに移行した後、以下を追記

export AWS_ACCESS_KEY_ID="ご自身のCSVファイルのAccess key ID"
export AWS_SECRET_ACCESS_KEY="ご自身のCSVファイルのSecret access key"

追記後はescキーでインサートモードを終了した後、:wqで保存しましょう。

その後、ターミナルで以下のコマンドを打ちましょう。

source ~/.zshrc

Heroku上に環境変数を設定する(Herokuを使っている場合)

Herokuにあげている場合は環境変数を追加する必要があります。(EC2にデプロイしている人はおそらく既に設定してあると思います)

# ターミナル
% heroku config:set AWS_ACCESS_KEY_ID="自身のCSVファイルのAccess key ID"
# ターミナル
% heroku config:set AWS_SECRET_ACCESS_KEY="自身のCSVファイルのSecret access key"
#ターミナル
% git push heroku master

EC2であれば再びデプロイし直せば、S3に画像が保存されます。
以上です。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?