質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.10%

Cloud9+S3+rails+herokuでのcarrierwaveを使った画像アップロード

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 333

hoshietoile

score 11

前提・実現したいこと

プログラミング初心者です。
Cloud9環境で、ruby on rails を使ったアプリケーション制作をしています。
carrierwaveを使ったherokuでの画像アップロードのストレージとしてS3を使いたいと考えています。

発生している問題・エラーメッセージ

本番環境でエラーが出ているので何度かアクセスキーの変更などを行うも一向に解決しなかったので開発環境からもS3を使って画像アップロードをするように試してみたところ、開発環境でも同様のエラーメッセージが発生しました。

「ArgumentError: Missing required arguments: aws_secret_access_key」

gemはfog-awsを使っています。

ネットの情報をいろいろ調べてみて実践しているのですが、一向に解決しなかったのでこちらに投稿させていただきました。
些細なことでもよいので、ご教示いただければと思います。

エラーメッセージ

/home/ec2-user/environment/original_app_2/config/initializers/carrierwave.rb:10: warning: key :aws_access_key_id is duplicated and overwritten on line 11
[fog][WARNING] Unable to fetch credentials: Expected(200) <=> Actual(404 Not Found)

rails aborted!
ArgumentError: Missing required arguments: aws_secret_access_key
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/fog-core-2.1.2/lib/fog/core/service.rb:244:in `validate_options'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/fog-core-2.1.2/lib/fog/core/service.rb:268:in `handle_settings'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/fog-core-2.1.2/lib/fog/core/service.rb:98:in `new'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/fog-core-2.1.2/lib/fog/core/services_mixin.rb:16:in `new'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/carrierwave-1.2.2/lib/carrierwave/uploader/configuration.rb:124:in `eager_load_fog'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/carrierwave-1.2.2/lib/carrierwave/uploader/configuration.rb:137:in `fog_credentials='
/home/ec2-user/environment/original_app_2/config/initializers/carrierwave.rb:8:in `block in <top (required)>'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/carrierwave-1.2.2/lib/carrierwave/uploader/configuration.rb:159:in `configure'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/carrierwave-1.2.2/lib/carrierwave.rb:14:in `configure'
/home/ec2-user/environment/original_app_2/config/initializers/carrierwave.rb:4:in `<top (required)>'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:286:in `load'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:286:in `block in load'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:258:in `load_dependency'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:286:in `load'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/railties-5.1.6/lib/rails/engine.rb:655:in `block in load_config_initializer'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/activesupport-5.1.6/lib/active_support/notifications.rb:168:in `instrument'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/railties-5.1.6/lib/rails/engine.rb:654:in `load_config_initializer'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/railties-5.1.6/lib/rails/engine.rb:612:in `block (2 levels) in <class:Engine>'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/railties-5.1.6/lib/rails/engine.rb:611:in `each'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/railties-5.1.6/lib/rails/engine.rb:611:in `block in <class:Engine>'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/railties-5.1.6/lib/rails/initializable.rb:30:in `instance_exec'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/railties-5.1.6/lib/rails/initializable.rb:30:in `run'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/railties-5.1.6/lib/rails/initializable.rb:59:in `block in run_initializers'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/railties-5.1.6/lib/rails/initializable.rb:48:in `each'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/railties-5.1.6/lib/rails/initializable.rb:48:in `tsort_each_child'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/railties-5.1.6/lib/rails/initializable.rb:58:in `run_initializers'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/railties-5.1.6/lib/rails/application.rb:353:in `initialize!'
/home/ec2-user/environment/original_app_2/config/environment.rb:5:in `<top (required)>'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:in `require'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:in `block in require'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:258:in `load_dependency'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:in `require'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/railties-5.1.6/lib/rails/application.rb:329:in `require_environment!'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/railties-5.1.6/lib/rails/application.rb:445:in `block in run_tasks_blocks'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/railties-5.1.6/lib/rails/commands/rake/rake_command.rb:21:in `block in perform'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/railties-5.1.6/lib/rails/commands/rake/rake_command.rb:18:in `perform'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/railties-5.1.6/lib/rails/command.rb:46:in `invoke'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/railties-5.1.6/lib/rails/commands.rb:16:in `<top (required)>'
/home/ec2-user/environment/original_app_2/bin/rails:9:in `require'
/home/ec2-user/environment/original_app_2/bin/rails:9:in `<top (required)>'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/spring-2.0.2/lib/spring/client/rails.rb:28:in `load'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/spring-2.0.2/lib/spring/client/rails.rb:28:in `call'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/spring-2.0.2/lib/spring/client/command.rb:7:in `call'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/spring-2.0.2/lib/spring/client.rb:30:in `run'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/spring-2.0.2/bin/spring:49:in `<top (required)>'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/spring-2.0.2/lib/spring/binstub.rb:31:in `load'
/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/spring-2.0.2/lib/spring/binstub.rb:31:in `<top (required)>'
/home/ec2-user/environment/original_app_2/bin/spring:15:in `require'
/home/ec2-user/environment/original_app_2/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
Tasks: TOP => db:migrate => environment
(See full trace by running task with --trace)
### 該当のソースコード
/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_credentials = {
            provider: 'AWS',
            aws_access_key_id: 'アクセスキーID',
            aws_access_key_id: 'シークレットアクセスキーID',
            use_iam_profile: true,
            region: 'リージョン名',
            path_style: true
        }
        config.fog_directory = 'バケット名'
end

/config/secrets.yml

development:
  secret_key_base: ~~~
  aws_access_key_id: 'アクセスキーID'
  aws_secret_access_key: 'シークレットアクセスキーID'
test:
  secret_key_base: ~~~
  aws_access_key_id: 'アクセスキーID'
  aws_secret_access_key: 'シークレットアクセスキーID'
production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
  aws_access_key_id: 'アクセスキーID'
  aws_secret_access_key: 'シークレットアクセスキーID'

ここに言語名を入力
ソースコード
```

試したこと

アクセスキーやIAMユーザー、S3バケットの再作成・登録
carrierwave.rbやsecrets.ymlファイルの変更

補足情報(FW/ツールのバージョンなど)

とりあえず、開発環境では 保存先を storage :file にしていれば機能します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

ArgumentError: Missing required arguments: aws_secret_access_key

ということなので、シークレットアクセスキーが必要なところに渡されていないということですかね。

ここに記載している
'アクセスキーID'
'シークレットアクセスキーID'
は、実際にはご自分で取得したIAMユーザのアクセスキー及びシークレットアクセスキーでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/09/11 17:47

    恐ろしいほどに初歩的なミスでしたね、、、何時間も悩んでいたのが恥ずかしいです笑

    何べんもソースコードを見直したつもりだったのですが、うかつでした、、、こうしたミスは無くさなきゃいけないですね。
    大変助かりました!ありがとうございます! instance profile についても調べてみますね!

    キャンセル

  • 2019/09/11 18:02

    こういう調べても出てこないエラーって案外単純な見落としとかだったりするんですよね…。

    ここからは余談ですが
    AWSのSDKを使って作ったパッケージとかは、EC2インスタンス上で動かす場合だとインスタンスのIAMロールに紐付いたinstance profileから権限を取得してその権限でAWSのリソース操作をしてくれるように基本的にはなっています。
    たまに鍵を使わないと動いてくれない実装になってるパッケージがあったりするんですが、そういうのはできれば避けるようにしたいですね。
    鍵は鍵の文字列が漏れてしまうとインターネットに繋がってさえいればどこからでもリソースが操作できてしまうので、なるべく発行しないで済むならしない、する場合は最小権限で、が望ましいです。
    余裕があればぜひこちらもご参照ください(ちょっとわかりにくいかもしれませんが…)
    https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/IAMBestPracticesAndUseCases.html

    キャンセル

  • 2019/09/11 18:11

    とても丁寧にご回答くださってとても助けになりますし、勉強の励みになります!
    おかげさまで、herokuへのデプロイおよびcarrierwaveの動作も確認できました~

    追加の情報までいただいてありがとうございます!
    参考にさせていただきますね。
    今後もいろいろこのサイトで質問を投げさせていただくことも多いと思うので、今後ともよろしくお願いします。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.10%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる