自作railsアプリをデプロイする 番外編 本番環境の画像投稿 S3を作成する
上の記事を通して、以下のようなインフラを作成しました。↓
EC2の中身はこんな感じです。↓
今回はRailsアプリケーションから画像を投稿するためのストレージをAWSの「S3」に設定していきます。
S3を軽く理解する
S3とは「Simple Storage Service」の略で、安価で耐久性に優れたクラウドストレージサービスです。
用語
オブジェクト
S3に保管するファイルのこと。
バケット
S3上に存在するフォルダのようなもの。
バケットポリシー
バケットへのアクセス制限等のセキュリティポリシーです。バケット毎に自由に設定することができます。
マルチパートアップロード
大きいファイルは複数に分割してアップロードできて、アップロード後に統合することができる機能の名称になります。
WEBサイト機能
WEBサーバとして公開することができます。
バージョニング
一度削除したものを復元できる機能の名称になります。
ユースケース
①コンテンツ保存&配信
画像等の静的コンテンツの保存先及び配信
②データ保存用のストレージ
ログ保存用やアプリケースションのストレージとして利用
③バックアップ
サーバのバックアップ、DR用にバックアップ
作成するものを図で理解する
EC2インスタンス内のRailsアプリから、作成したS3を利用して画像を保存し、インターネットから閲覧できるようにします。
ここでの「インターネットから閲覧」とは、例えば写真をS3に保存して、アプリの投稿コンテンツを表示する際に、HTMLの<img>でS3で保存した写真などをS3からとってくることです。
S3の利用方法、設定
まずバケットを作成します。
S3を操作するユーザーを作成
Rails側の設定
今回は画像投稿にCarrierwaveを使用している場合の設定を行っていきます。こちらの設定に関しては今回詳細には書きません。
railsでcarrierwaveを使って画像をアップロード、表示 - Qiita
必要なgemは以下の通り
gem 'carrierwave' gem 'fog'
uploaderファイルのstorageの部分を編集します
app/uploaders/image_uploader.rb ・ ・ storage :fog ・ ・
設定ファイルのcarrier_wave.rbに以下を追記していきます。
config/carrier_wave.rb if Rails.env.production? CarrierWave.configure do |config| config.fog_credentials = { # Amazon S3用の設定 :provider => 'AWS', :region => ENV['S3_REGION'], :aws_access_key_id => ENV['S3_ACCESS_KEY'], :aws_secret_access_key => ENV['S3_SECRET_KEY'] } config.fog_directory = ENV['S3_BUCKET'] end end
ENV['xxx']とあるのは、環境変数を読み込みます。
それぞれの変数に、AWS側で設定した時に取得した「アクセスキーID」や「シークレットキー」などを設定します。
環境変数設定の例↓
$ export S3_REGION="ap-northeast-1" $ export S3_ACCESS_KEY="ユーザー作成時に取得したアクセスキーID" $ export S3_SECRET_KEY ="ユーザー作成時に取得したシークレットキー" $ export S3_BUCKET="バケット作成時に設定したバケット名" $ source ~/.bashrc
あとはCarrirwaveの基本設定ができていていれば、S3に保存ができるはずです。