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_idaws_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.rbfogを使用する記載を書く。

次に/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の記事には書いてなかったため忘れないようメモ。