1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【AWS】 S3アップロード Rails CarrierWave

Posted at

#目標
s3に画像をアップロードする

#前提

  • 画像投稿機能実装済
  • AWSアカウント作成済
  • CarrierWave使用

やりた方

####AWSでIAMユーザを作成していきます
①IAMにアクセス→ユーザー追加するを選択
②ユーザー名をきめる
③AWS認証情報タイプの選択で、アクセスキー−プログラムによるアクセスにチェックを入れる→次へ
④既存のポリシーにアッタチを選択
⑤ポリシー検索でS3を入力→ AmazonS3FullAccessを選択
⑥キーとタグは作成せず→次のスッテプ:確認
⑦管理ポリシーがAmazonS3FullAccessになっていることを確認して→ユーザーの作成
⑧アクセスキーIDとシークレットアクセスキーが出てくるので必ずメモするか、csvのダウンロードをしておく→閉じる
これでIAMユーザーが作成できたので、次にS3を作成

####S3バケットの作成

①S3にアクセス S3を選択→バッケット作成選択
②バケット名を選択→他と被らない名前を記入してください
③リージョンはそのままの(東京)ap-northeast-1で
④パブリックアクセスの全てをブロックのチェックを外します
⑤下の2つにチェックを入れて→作成
スクリーンショット 2021-09-19 22.43.45.png
⑥バケットが作成されたら作成したバケットを選択してアクセス許可を選択
⑦先程のブロックパブリックアクセスを確認して→バケットポリシーの編集を選択
⑧先ほど作成した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がないと他の場面でエラーが発生しました。

Gemfile
gem 'fog-aws'

bundle installします。

###アップローダーにfogを記述していきます

app/uploaders/image_uploader.rb
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

バケット名だけ記述してください。
漏洩すると悪用される危険性があるので、直接記述せず環境変数を使います。

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/environmentvimで設定しました。
他にも方法あるので、環境変数について参考にさせて頂いた記事を貼っておきます。
https://qiita.com/yuichir43705457/items/7cfcae6546876086b849

/etc/environment
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

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?