hiroki-saoyun’s blog

40歳でも夢くらい持つよね!!プログラミング勉強中!

S3を使ってアップロード⑤

画像のアップロード先をS3に変更

CarrierWaveによる画像のアップロード先がアプリ内のpublicフォルダでした。これをS3に変更します。

fog-awsをインストール

fog-awsをインストールします。

fogとは

画像をアップロードする際、外部のストレージを選択しアップロードするのを補助してくれるGemです。

Gemfile

gem 'fog-aws'

ターミナル

$bundle install

fogを使用するための設定

app/uploaders/image_uploader.rb

storage :file
↓
storage :fog

fogのアップロード先の設定

config/initializers直下に、carrierwave.rbというファイルを作成します。

config/initializers/carrierwave.rb

require 'carrierwave/storage/abstract'
require 'carrierwave/storage/file'
require 'carrierwave/storage/fog'

CarrierWave.configure do |config|
  config.storage = :fog
  config.fog_provider = 'fog/aws'
  config.fog_credentials = {
    provider: 'AWS',
    aws_access_key_id: Rails.application.secrets.aws_access_key_id,
    aws_secret_access_key: Rails.application.secrets.aws_secret_access_key,
    region: 'ap-northeast-1'
  }

  config.fog_directory  = 'ここにバケット名を入れます'
  config.asset_host = 'https://s3-ap-northeast-1.amazonaws.com/ここにバケット名を入れます'
end

「ap-northeast-1」は、アジアパシフィック(東京)です。

安全にAWSのキーを扱えるよう設定

AWSのidやパスワードそのものは「環境変数」だけに設定します。

IAMユーザー設定時にダウンロードしたCSVファイル(2つ目のダウンロードファイル)を開きましょう。その中に、Access_key_IDとSecret_access_keyというカラムがあるので、こちらに書かれた値を設定していきます。

MacOSがCatalina以降の場合

ターミナル

# ローカル環境
$ vim ~/.zshrc

# iを押してインサートモードに移行し、下記を追記する。既存の記述は消去しない。
export AWS_ACCESS_KEY_ID='ここにCSVファイルのAccess key IDの値をコピー'
export AWS_SECRET_ACCESS_KEY='ここにCSVファイルのにSecret access keyの値をコピー'

# 編集が終わったらescapeキーを押してから:wqと入力して保存して終了

※ファイル編集時の注意

上記の設定は、現在の設定に「追加」してください。

ターミナル

# ローカル環境
# 編集した.zshrcを読み込み直して、追加した環境変数を使えるようにする
$ source ~/.zshrc
MacOSがMojave以前の方のローカル環境変数の設定

ターミナル

# ローカル環境
$ vim ~/.bash_profile

# iを押してインサートモードに移行し、下記を追記する。既存の記述は消去しない。
export AWS_ACCESS_KEY_ID='ここにCSVファイルのAccess key IDの値をコピー'
export AWS_SECRET_ACCESS_KEY='ここにCSVファイルのにSecret access keyの値をコピー'

# 編集が終わったらescapeキーを押してから:wqと入力して保存して終了

ターミナル

# ローカル環境
# 編集した.bash_profileを読み込み直して、追加した環境変数を使えるようにする
$ source ~/.bash_profile

secrets.ymlの設定

config/secrets.yml

# Be sure to restart your server when you modify this file.

# Your secret key is used for verifying the integrity of signed cookies.
# If you change this key, all old signed cookies will become invalid!

# Make sure the secret is at least 30 characters and all random,
# no regular words or you'll be exposed to dictionary attacks.
# You can use `rails secret` to generate a secure secret key.

# Make sure the secrets in this file are kept private
# if you're sharing your code publicly.

development:
  secret_key_base: cb2965bfebd75267542611a74ab612b9754f98・・・・・
  aws_access_key_id: <%= ENV["AWS_ACCESS_KEY_ID"] %>
  aws_secret_access_key: <%= ENV["AWS_SECRET_ACCESS_KEY"] %>

test:
  secret_key_base: 7362cb8e960adf75f110e17bb4cd1f2d4edc3d・・・・・

# Do not keep production secrets in the repository,
# instead read values from the environment.
production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
  aws_access_key_id: <%= ENV["AWS_ACCESS_KEY_ID"] %>
  aws_secret_access_key: <%= ENV["AWS_SECRET_ACCESS_KEY"] %>

この2行を追記します。

.gitignoreを編集

「.gitignore」というファイルに設定を行うことで、Gitの管理下から除外することができます。

.gitignore

# ファイルの最下部に下記を追記
config/secrets.yml

ターミナル

$ git rm --cached config/secrets.yml
# アプリのあるディレクトリで行います