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 # アプリのあるディレクトリで行います