#目標
s3に画像をアップロードする
#前提
- 画像投稿機能実装済
- AWSアカウント作成済
- CarrierWave使用
やりた方
####AWSでIAMユーザを作成していきます
①IAMにアクセス→ユーザー追加するを選択
②ユーザー名をきめる
③AWS認証情報タイプの選択で、アクセスキー−プログラムによるアクセスにチェックを入れる→次へ
④既存のポリシーにアッタチを選択
⑤ポリシー検索でS3を入力→ AmazonS3FullAccessを選択
⑥キーとタグは作成せず→次のスッテプ:確認
⑦管理ポリシーがAmazonS3FullAccessになっていることを確認して→ユーザーの作成
⑧アクセスキーIDとシークレットアクセスキーが出てくるので必ずメモするか、csvのダウンロードをしておく→閉じる
これでIAMユーザーが作成できたので、次にS3を作成
####S3バケットの作成
①S3にアクセス S3を選択→バッケット作成選択
②バケット名を選択→他と被らない名前を記入してください
③リージョンはそのままの(東京)ap-northeast-1で
④パブリックアクセスの全てをブロックのチェックを外します
⑤下の2つにチェックを入れて→作成
⑥バケットが作成されたら作成したバケットを選択してアクセス許可を選択
⑦先程のブロックパブリックアクセスを確認して→バケットポリシーの編集を選択
⑧先ほど作成したIAMユーザーのARNをコピーして⑨に貼り付ける→(ARNはIAMにアクセスして→ユーザー→先程作ったものを選択すれば表示されます)
⑩にバケット名を入力
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt000001",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::⑨ARNをここに貼り付ける"
},
"Action": "s3*",
"Resource": "arn:aws:s3:::⑩バケット名"
}
]
}
⑪入力できたら保存しましょう
できたらS3バッケととIAMユーザーができたのでOKです。
###Gemfileにfog-awsを追加していきます
awsをつけなくても普通に起動できる環境もあるようですが自分の場合awsがないと他の場面でエラーが発生しました。
gem 'fog-aws'
bundle install
します。
###アップローダーにfogを記述していきます
class ImageUploader < CarrierWave::Uploader::Base
if Rails.env.production?
storage :fog # 本番環境のみ
else
storage :file # 本番環境以外
end
###carrierwave.rbのファイルを作成
$ touch config/initializers/carrierwave.rb
またはvimで直接入力。
$ vi config/initializers/carrierwave.rb
バケット名だけ記述してください。
漏洩すると悪用される危険性があるので、直接記述せず環境変数を使います。
require 'carrierwave/storage/abstract'
require 'carrierwave/storage/file'
require 'carrierwave/storage/fog'
CarrierWave.configure do |config|
config.storage :fog
config.fog_provider = 'fog/aws'
config.fog_directory = 'バケット名' # 作成したバケット名を記述
config.fog_public = false
config.fog_credentials = {
provider: 'AWS',
aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'], # 環境変数
aws_secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'], # 環境変数
region: 'ap-northeast-1', # アジアパシフィック(東京)を選択した場合
path_style: true
}
end
###環境変数の設定
ここでIAMユーザーを作成したときのアクセスキーIDとシークレットアクセスキーを入力します。
環境変数の定義の仕方がいくつかあるようです、自分の場合はsudo vi /etc/environment
vimで設定しました。
他にも方法あるので、環境変数について参考にさせて頂いた記事を貼っておきます。
https://qiita.com/yuichir43705457/items/7cfcae6546876086b849
AWS_ACCESS_KEY_ID = 'IAMユーザー作成時のアクセスキーIDをここに記述'
AWS_SECRET_ACCESS_KEY = 'IAMユーザー作成時のシークレットアクセスキーをここに記述'
記述したら一度exitして再起動し反映されているか確認します。
$ env | grep AWS_ACCESS_KEY_ID
$ env | grep AWS_SECRET_ACCESS_KEY
読み込まれていたら先程入力したIDとシークレットアクセスキーが表示されるはずです。
これでブラウザを確認したら、アップロードされているはずです。
AWSのS3バッケットを確認したらにアップロードに画像が追加されています。
####※エラーが出たりしたら、まず、IDとシークレットアクセスキーが逆になってないか確認してみてください。
##【エラー対処】
エラーの対処で参考にさせて頂いた記事。
https://qiita.com/siruku6/items/a3a9021913749247d92b
https://qiita.com/aocattleya/items/f655ceb71922edc90a0b