開発環境
Ruby 2.5.7
Rails 5.2.3
※今回、デプロイについての説明は割愛します。
※AWSのアカウントを持っている前提で話を進めていきます。
※Refileは導入済み
IAMでユーザーの追加
サービスからIAMを選択し、ユーザーを選択するとユーザーを追加することができます。
プログラムによるアクセス
にチェックをいれてください。
既存のポリシーを直接アタッチからAmazonS3FullAcccess
にチェックを入れます。
アクセスキーIDとシークレットアクセスキーは忘れないようにメモをするかcsvでダウンロードしておきましょう。
ユーザーの追加後、そのユーザー名を選択したら↓のような画面が出てきます。
そこの認証情報からコンソールのパスワードを設定しましょう。(デフォルトでは無効になってます)
※ここのユーザーのARNはコピーしておくと後の設定が少し楽になります。
S3バケットの追加
ここから先は追加したIAMユーザーで作業を行います。
今使っているアカウントからログアウトし、作成したIAMユーザーでログインしてください。
リージョンは無難に東京を選択しておきましょう。
この2つにチェックを入れ、バケットを作成してください。
バケットポリシーの設定
バケット単位でアクセス制御を設定するために、作成したS3バケットを選択してからアクセス制限>バケットポリシー
を選択
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "statement1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::awsアカウントのid:user/IAMで追加したユーザー名"
},
"Action": "*",
"Resource": "arn:aws:s3:::作ったS3バケット名"
}
]
}
これを自分の設定に置き換えて保存してください。
gemの追加
gem "refile-s3"
gem 'dotenv-rails'
refile-s3 : refileで簡単にS3にアップロードができるようになるgemです
dotenv-rails: envが使えるようになるgemです
記述後bundle install
を実行。
refile.rbを作成
config/initializers
にrefile.rb
を作成してください。
require "refile/s3"
aws = {
access_key_id: ENV['AWS_ACCESS_KEY_ID'],
secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
region: "ap-northeast-1",
bucket: "作成したS3バケット名",
}
Refile.cache = Refile::S3.new(prefix: "cache", **aws)
Refile.store = Refile::S3.new(prefix: "store", **aws)
作成したファイルに上記を記述
リージョンは東京以外で作られた場合は変更して下さい。
.envの作成
Gemfileなどがあるディレクトリに.env
を作成
AWS_ACCESS_KEY_ID="アクセスキー"
AWS_SECRET_ACCESS_KEY="シークレットキー"
設定後、githubなどに.envファイルを上げないように.gitignore
に/.env
と追記しておきましょう。
最後に
あとはいつも通りデプロイをすることで、画像がS3に保存できるようになります。