RailsのアプリケーションからS3にファイルをアップロードする
もともとCarrierWaveを使用してファイルをサーバーに保存していたものを、S3(Amazon Simple Storage Service)に変更する場合の手続きを記事にしてみました。
AWS側での設定
S3でバケットの作成
s3でのバケットの作成を行う。
IAM(Identity and Access Management)にてユーザーの作成
AWSのIAMにてユーザーの作成を行う。
ユーザー作成を行った際に、Access Key Id、Secret Access Keyが発行されるので保存しておく(csvダウンロードできる)。
また、アクセス許可からポリシーのアタッチができるので、AmazonS3FullAccessの付与を行っておく。
Rails側での設定
Gemfileにfogの追加
Gemfileに下記を追加。
1 | gem 'fog' |
CarrierWaveのUploadクラスの修正
storage先の変更
1 2 3 | # Choose what kind of storage to use for this uploader: # storage :file storage :fog |
fogを使用する前は、storageがfileになっていると思うので、そちらをコメントアウトし、storage先をfogに変更します。
CarrierWaveの設定ファイルの修正
config/initializers/carrierwave.rb
に追記を行う。もし、今までに作成していなければここで作成する(railsでCarrierWave導入時に自動作成はされない)。
1 2 3 4 5 6 7 8 9 10 11 | CarrierWave.configure do |config| config.fog_credentials = { provider: 'AWS', aws_access_key_id: '{{ Access Key Id }}', aws_secret_access_key: '{{ Secret Access Key }}', region: '{{ region }}' } config.fog_directory = '{{ bucket name }}' config.asset_host = 'https://s3-{{ region }}.amazonaws.com/{{ bucket name }}' end |
上記の設定を行う。
{{ Access Key Id }}、{{ Secret Access Key }} : IAM(Identity and Access Management)にてユーザーの作成にて、取得できる。
{{ region }} : 東京リージョンであれば、ap-northeast-1などとなる。
{{ bucket name }} : s3で作成したバケット名。
開発環境によって、バケット名を変える場合はここで行うこともできる。
以上で設定はおわりで、アプリケーションから画像をアップロードすれば、S3にファイルがアップロードされる。
おわりに
carrierwaveやfogを使用しない場合は、aws-sdkを使用することになる。
Module: AWS – http://docs.aws.amazon.com/AWSRubySDK/latest/AWS.html
Author Profile
スターフィールド編集部
SHARE