heroku+rails+mysql+S3のデプロイについて
Awsは手動で設定しデプロイをするが、herokuはよしなにデプロイをしてくれる。
どちらとも投稿機能をつけるときは外部に保存するストレージを用意しないといけない。
herokuのデプロイは基本的には以下の記事の通りなので割愛。
https://qiita.com/kazukimatsumoto/items/a0daa7281a3948701c39
Awsのサービスを使うときは要注意。
Rootユーザー(最初にawsを登録した時のユーザー)での作業はあまりしないほうが良い。(権限が一番強力なためアカウントを不正利用されたら、高額な請求が来てしまうこともある。)
RootユーザーのログインはAuthyなどを利用して2段階認証をつけとくといい。と、スクールのカリキュラムに記載あり。
なのでS3を使用するときはrootユーザーとは別に、S3を利用することのみの権限を持ったユーザーアカウントを設定する。
IAMからユーザーを作成(名前はなんでもいいが、作業がわかる名前)し、そしてS3を使用するための設定をする。
S3の使用方法としてはIAMユーザーを作成した際に作られるaws_access_key_idとaws_secret_access_keyを通じてS3に画像をアップロードする。
万が一これらの認証情報が流出してしまうと、悪意のある第三者に不正利用をされ、AWSから身に覚えのない高額請求が来てしまう可能性があるため、AWSの認証情報を含んだコードをコミットできないように設定をする。
ターミナルで
$ cd ~/
$ brew install git-secrets
とし、git-secretsをインストールしたら
$ cd [アプリ名]
でアプリの中に移動し、
$ git secrets --install
上記で有効化する。そして
$ git secrets --register-aws --global
このコマンドを実行することで、secret_key, access_keyなど、アップロードしたくないAWS関連の秘密情報を一括で設定することができる。
これでユーザーに関する設定は終わり。
次にS3の設定へ。
S3を利用してバケットを作成する。
その際の名前とリージョンは自分で設定。オプションはそのまま。
アクセス許可の設定は下の2つのみチェック(ここでちゃんとしとかないと画像投稿できなくてエラーになる)
次に画像のアップロード先をS3に変更するための設定をする。
gem ’fog’をインストールする。
image_uploader.rbにfogを使用する記載を書く。
次に/config/initializersの下にcarrierwave.rbというファイルを作成。
ここら辺は以下の記事を参考に記載。
https://qiita.com/junara/items/1899f23c091bcee3b058#aws
https://qiita.com/_ayk_study/items/f3c84050e94135e84014
先ほど取得したaws_access_keyなどは直接carrierwave.rbには書かず、環境変数に入れて設定するため、
heroku config:set AWS_ACCESS_KEY_ID=”awsのアクセスキー”
heroku config:set AWS_SECRET_ACCESS_KEY=”awsのシークレットアクセスキー”
などのコマンドもしくはherokuのアプリの中のsettingにあるReveal Config Varsから直接打ち込んで設定する。
詰まったところ。
S3のアクセス許可がデフォルトのままだと画像投稿できなくてエラーになってしまう。
Heroku logsで見ると下記のエラー。何かの権限がないとは出ているが何の権限かよくわからず…
Excon::Error::Forbidden (Expected(200) <=> Actual(403 Forbidden)
アクセスキー等は間違ってなかったので、とりあえずスクールのカリキュラムの通りにアクセス許可を設定するといけた。
参考にしたQiitaの記事には書いてなかったため忘れないようメモ。