Help us understand the problem. What is going on with this article?

[AWS]Amazon S3を使用した環境ごとの条件分岐について

はじめに

今回個人アプリにS3を導入する際扱っているのが動画の為、無駄に容量を使用したくなかったのでローカルの方ではS3を使用しないように条件分岐させました。今回はその方法を説明します。

Amazon S3とは

Amazon S3は(Amazon Simple Storage Service)の略で、インターネット経由で使用できるストレージサービスです。主に、画像や動画のファイルの保存に使用します。
特徴としては容量が無制限である事、東京リージョンを使用した場合容量1Gに対して0.025円と安価である事、99.9%の高可用性を持っており、データ消失の心配がほぼない事の主に3つです。

S3のストレージ以外の機能など、詳細に関しては以下の記事も参考にして下さい。
https://service.plan-b.co.jp/blog/creative/4981/
https://dev.classmethod.jp/cloud/aws/cm-advent-calendar-2015-aws-re-entering-s3/

条件分岐方法

S3の生成方法などの説明は省略します。先ずはGemの導入。fog-awsを使用します。動画保存はcarrierwaveを使用しております。

Gemfile
gem 'carrierwave'
gem 'fog-aws'
以下略

次にuploaderファイルにて条件分岐させる記述をします。
if文を使用し、development(ローカル環境)、test(テスト環境)をファイル形式で保存し、本番環境ではS3に保存するよう条件分岐させています。

video_uploader.rb
class VideoUploader < CarrierWave::Uploader::Base
  # Include RMagick or MiniMagick support:
  # include CarrierWave::RMagick
  # include CarrierWave::MiniMagick

  # Choose what kind of storage to use for this uploader:
  if Rails.env.development?
    storage :file
  elsif Rails.env.test?
    storage :file
  else
    storage :fog
  end
以下略

次にcarrierwaveを使用してる為config/initializers下にcarrierwave.rbを作成しif文を使用して保存先の条件分岐をします。

carrierwave.rb
CarrierWave.configure do |config|
  if Rails.env.production?
    config.storage = :fog
    config.fog_provider = 'fog/aws'
    config.fog_directory  = 'バケット名'
    config.fog_credentials = {
      provider: 'AWS',
      aws_access_key_id: Rails.application.credentials.aws_access_key_id,
      aws_secret_access_key: Rails.application.credentials.aws_secret_access_key,
      region: 'ap-northeast-1'
    }
  else
    config.storage :file
    config.enable_processing = false if Rails.env.test?
  end
end

if Rails.env.production?の中では本番環境でS3に動画を保存する記述、else文の中ではconfig.storage :fileでローカル環境の場合、public/uploades下に動画が保存されるようになります。
config.enable_processing = false if Rails.env.test?はテスト環境で動画のアップロード処理をスキップさせています。

その他の説明は今回省略します。

最後に

今回は条件分岐に関してこの方法で上手くいきました。S3を動画の保存に使用するのは今回はじめてでしたが、使い勝手は画像とほぼ同じでした。現在限定的な導入方法しか理解出来てないと思うので、もう少し今後も理解を深めていきたいと思います。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away