【Rails】AWSのS3を使ってHerokuで画像を投稿できるようにする方法
1. AWSアカウントの作成
AWS公式のアカウント作成の流れを参考に、アカウントを作る。
2. IAMユーザーを作成する
ログインできたら、ダッシュボードから「IAM」を選択。
左側のメニューから「ユーザー」を選択。
「ユーザーを追加」を選択。
ユーザー名を入力し、「プログラムによるアクセス」にチェックを入れる。
「既存のポリシーを直接アタッチ」を選択し、「AmazonS3FullAccess」にチェックを入れる。
タグの設定に関しては何もしないで次のページへ。
ここも何もしない。
後々使うため、CSVファイルをダウンロードしておく。これでIAMユーザーの作成は完了。
3. バケットを作成
TOP画面から「S3」をクリックする。
「バケットを作成する」をクリックする。
バケット名を入力しリージョン(地域)は「東京」を選択する。(既に使われているバケット名は使えない)
「プロパティ」の設定に関しては何もしないで次のページへ。
一番上の「パブリック…」のチェックを外し、下の2つの「新規の…」と「任意の…」にチェックを入れる。
確認画面が表示されるので「バケットを作成」をクリック。これでAWS上での作業は完了。
4. CA証明書を設置する
SSL接続で使用するCA証明書を設置するために、上のコマンドを叩く。
これをやっておかないと、ファイルをアップした時にエラーが起きる可能性があるらしい。
5. Gemをインストール
SDKのgemが必要なので、Gemfile
に追記。
コマンドを叩いてインストールする。
6. 資格情報を編集
先ほど得たアクセスキーを設定していく。
アクセスキーは先ほどダウンロードしたCSVファイルに記述されている。(左がアクセスキーID、右がシークレットアクセスキー)
秘密情報を管理するためのcredentials.yml
を編集していく。
先ほど得たアクセスキーたちを当てはめつつ、上の設定を追記する。(最初からコメントアウトされている場合もある)
7. 画像の保存先をS3に変更する
config/storage.yml
に、上のように追記する。(スペース1つの差でエラーになるため注意が必要)
8. development.rbに追記
config/environments/development.rb
に、上のように追記する。
9. マスターキーをセットする
config/master.key
を開き、そこにある文字列をコピーする。
そしてその文字列を当てはめつつ、上のコマンドを叩く。
そして上のコマンドを叩く。
10. デプロイ&マイグレーション
最後にデプロイとマイグレーションをすれば完了。
エラーの対処法
「Application error」と表示される場合
デプロイ後にそのURLにアクセスし、上のようにエラーとなった場合。
でログを見たり
でコンソールを起動してあげると、エラーの原因が分かることが多い。
images内の画像が表示されない場合
「Heroku下で投稿した画像ではなく、assets/images
内にある画像が表示されない」という場合。
config/environments/development.rb
をこのように修正すれば解決するかも。