【Rails】S3とcarrierwaveの連携メモ

以前書いたS3で簡単なWebページを作るメモから参照し、S3を作成しておく。

以下S3を作成した前提でのRails側でのメモ

IAMユーザー作成

S3を操作するIAMユーザーを追加する。

ユーザー名を適当に、アクセスの種類は「プログラムによるアクセス」

アクセス権限は、既存のポリシーをアタッチ→S3と検索し「AmazonS3FullAccess」を選択

タグなどは設定せず作成。

キーとシークレットキーをメモしておく。

これでS3の操作を全て可能なユーザーが完成。

Rails

Gemの追記

gem "carrierwave"
gem "fog-aws"

libxml2が必要なので使っている環境によってインストールしておく。

僕はDockerだったのでDockerfileのファーストステージにて以下を追記しておいた。

RUN apk --update add --virtual=buildings \
  libxml2-dev \ #追記

app/uploaders/image_uploader.rb

class ImageUploader < CarrierWave::Uploader::Base
  # Include RMagick or MiniMagick support:
  # include CarrierWave::RMagick
  # include CarrierWave::MiniMagick

  # Choose what kind of storage to use for this uploader:
  storage :fog

を書き換え。

画像データがカラムとしてあるモデルのRubyファイルに

mount_uploader :image, ImagesUploader

を追記

config/initializers/carrierwave.rbを新規作成

CarrierWave.configure do |config|
  config.fog_provider = 'fog/aws'
  config.fog_directory = 'S3のバケット名'
  config.fog_credentials = {
    provider:              'AWS',
    aws_access_key_id:     'IAMアクセスキー',
    aws_secret_access_key: 'IAMシークレットキー',
    region:                'S3のリージョン名',
  }
end

AWSのキーは環境変数やらcredentialとかで隠すこと。

以上で設定完了のはず。