こんにちは。beaglesoftの真鍋です。
前回まででCarrierWaveを利用したファイルのアップロードが簡単に行えることを確認しました。今回は、アップロード先をAmazonS3に変更して保存できることを確認したいと思います。
前提条件
今回はAmazonS3を利用します。あらかじめAmazonS3が利用できる環境を用意してください。
fogを追加する
今回はAmazonS3へファイルをアップロードするためにfog - The Ruby cloud services libraryを利用します。Gemfileに依存関係を追加します。
source 'https://rubygems.org' ... gem 'fog' ...
また、bundle install
を実行します。
$ bundle install --path=vendor/bundle Fetching gem metadata from https://rubygems.org/........... Fetching version metadata from https://rubygems.org/... Fetching dependency metadata from https://rubygems.org/.. Resolving dependencies.... ... Installing fog 1.38.0 ... Bundle complete! 14 Gemfile dependencies, 93 gems now installed. Bundled gems are installed into ./vendor/bundle. Process finished with exit code 0
AmazonS3の設定を行う
AmazonS3ではあらかじめbucketを作成した状態で利用したいと思います。Bucketの作成手順は以下のとおりです。
- IAMでAWSのマネジメントコンソールにログインする。
サービスからS3を選択する。
[バケットを作成]ボタンをクリックしてバケットを作成する。
バケット名は今回は
carrier-wave
としました。ログの出力については予め設定しました。
- 作成されたBucketは一覧に表示されます。
認証情報の確認
AmazonS3へアクセスするためには認証情報として以下の情報が必要となります。
- AWSのアクセスキーID
- AWSのシークレットアクセスキー
これらはIAM作成時に取得できますが、詳細は下記を確認してください。
IAM ユーザーのアクセスキーの管理 - AWS Identity and Access Management
S3をCarrierWaveに設定する
最後にS3の設定をCarrierWaveに設定します。設定するファイルはconfig/initializers/carrierwave.rb
となります。
CarrierWave::SanitizedFile.sanitize_regexp = /[^[:word:]\.\-\+]/ CarrierWave.configure do |config| config.fog_credentials = { :provider => 'AWS', :aws_access_key_id => ENV['AWS_ACCESS_KEY_ID'], :aws_secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'], :region => 'ap-northeast-1' } config.fog_directory = 'carrier-wave' if Rails.env.production? config.fog_directory = 'carrier-wave' if Rails.env.development? end
また、aws_access_key_id
とaws_secret_access_key
はgitなどにあげてしまうと怖いので環境変数に設定することにします。
$ export AWS_ACCESS_KEY_ID=XXXXXXXX $ export AWS_SECRET_ACCESS_KEY=XXXXXXXXXX
※もしくは、.zshrc
なり.bashrc
にexport ...を追記してください。
S3へアップロードの動作確認
実際にアプリケーションを起動してS3へアップロードできることを確認します。(AWS CLIを利用できる前提です。画面で確認することも可能です。)
╭─ymanabe@Yoichiro-no-MacBook-Pro ~ ‹2.2.4› ╰─$ aws s3 ls s3://carrier-wave/tmp/picture_store/picture/9/ 2016-04-04 11:34:08 20734 ビーグルソフト.png
ソースコード
ソースコードはGithubにあります。参考に利用してください。
beaglesoftjp/CarrierWaveExample: CarrierWaveを利用したファイルのアップロードを行うサンプルです。