18
20

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】ArgumentError: Missing required arguments: aws_access_key_id, aws_secret_access_key

Last updated at Posted at 2019-10-12

こんばんは!
Capistranoを使って自動デプロイの設定まで順調にいきましたが、s3設定後の自動デプロイでエラーにハマったので備忘録

自動デプロイエラー文

ローカル
$ bundle exec cap production deploy
・
・
・
00:22 deploy:assets:precompile
      01 $HOME/.rbenv/bin/rbenv exec bundle exec rake assets:precompile
      01 rake aborted!
      01 ArgumentError: Missing required arguments: aws_access_key_id, aws_secret_access_key

aws_access_key_id, aws_secret_access_keyが見当たらないよって怒られる

Rails5.2からの変更点

【Rails5.2】credentials.yml.encとmaster.keyでのデプロイによる今までとの変更点
https://qiita.com/katsu105/items/88675da5119762d73d92

この記事参考にcredentials.yml.enc変更。

carrierwave.rb修正

carrierwave.rb
require 'carrierwave/storage/abstract'
require 'carrierwave/storage/file'
require 'carrierwave/storage/fog'

CarrierWave.configure do |config|
  if Rails.env.development? || Rails.env.test? #開発とテストは今まで通りに
    config.storage = :file
  elsif Rails.env.production? #本番はS3に保存する
    config.storage = :fog
    config.fog_provider = 'fog/aws'
    config.fog_credentials = {
      provider: 'AWS',
      aws_access_key_id: Rails.application.credentials.aws[:access_key_id],
      aws_secret_access_key: Rails.application.credentials.aws[:secret_access_key],
# credentials下にaws_access_key_idとaws_secret_access_keyはあるよ
      region: 'ap-northeast-1'
    }
    config.fog_directory  = 's3バケット名'
    config.asset_host = 'https://s3-ap-northeast-1.amazonaws.com/s3バケット名'
  end
end

deploy.rb修正

deploy.rb
# config valid for current version and patch releases of Capistrano
lock "~> 3.11.1"

set :application, "appname"
# どのリポジトリからアプリをpullするかを指定する
set :repo_url, "git@github.com:ユーザー名/appname.git"

# バージョンが変わっても共通で参照するディレクトリを指定
set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', 'public/system', 'public/uploads')

set :linked_files, fetch(:linked_files, []).push("config/master.key")#ここ注意

set :rbenv_type, :user
set :rbenv_ruby, '2.5.1'

# どの公開鍵を利用してデプロイするか
set :ssh_options, auth_methods: ['publickey'],
                  keys: ['~/.ssh/ここは自分の.pem']

# プロセス番号を記載したファイルの場所
set :unicorn_pid, -> { "#{shared_path}/tmp/pids/unicorn.pid" }

# Unicornの設定ファイルの場所
set :unicorn_config_path, -> { "#{current_path}/config/unicorn.rb" }
set :keep_releases, 5

# デプロイ処理が終わった後、Unicornを再起動するための記述
after 'deploy:publishing', 'deploy:restart'
namespace :deploy do
  task :restart do
    invoke 'unicorn:restart'
  end

  desc 'upload master.key'#ここ注意
  task :upload do
    on roles(:app) do |host|
      if test "[ ! -d #{shared_path}/config ]"
        execute "mkdir -p #{shared_path}/config"
      end
      upload!('config/master.key', "#{shared_path}/config/master.key")#ここ注意
    end
  end
  before :starting, 'deploy:upload'
  after :finishing, 'deploy:cleanup'
end

set :default_env, {
  rbenv_root: "/usr/local/rbenv",
  path: "/usr/local/rbenv/shims:/usr/local/rbenv/bin:$PATH",
  AWS_ACCESS_KEY_ID: ENV["AWS_ACCESS_KEY_ID"],
  AWS_SECRET_ACCESS_KEY: ENV["AWS_SECRET_ACCESS_KEY"]
}

ローカル・本番両方にAWS_SECRET_ACCESS_KEYとAWS_ACCESS_KEY_IDを設定されているか確認

ローカル
$ vim ~/.bash_profile

export AWS_SECRET_ACCESS_KEY='ここにCSVファイルに乗っている値をコピー'
export AWS_ACCESS_KEY_ID='ここにCSVファイルに乗っている値をコピー'
esc+ :wqで抜ける
$ source ~/.bash_profile
本番
[ec2-user@ip-123-45-67-899 ~]$ sudo vim /etc/environment

AWS_SECRET_ACCESS_KEY='ここにCSVファイルに乗っている値をコピー'
AWS_ACCESS_KEY_ID='ここにCSVファイルに乗っている値をコピー'
esc+ :wqで抜ける
$ exit
sshに再ログイン
$ env | grep AWS_SECRET_ACCESS_KEY
$ env | grep AWS_ACCESS_KEY_ID
反映されているか確認

credentials.yml.encはgitignoreされているので、本番環境がcredentials.yml.encを読み込む為には本番環境の/var/www/appname/shared/config/配下にmaster.keyファイルが作られて、ローカルのcredentials.yml.enc内の値を呼び出せるようにすればいけるはず。

まとめ

以前にmaster.key書き換えて痛い目みた時の経験が少し役に立った。

エラーで手こずった場面もあったがデプロイまで漕ぎ着けて一安心。インフラももっと勉強しなければ。

18
20
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
18
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?