Help us understand the problem. What is going on with this article?

Rails で AWS SDK for Ruby の Aws.config を環境別に設定する

More than 3 years have passed since last update.

Rails から Amazon Web Services を利用するときは AWS SDK for Ruby を使用する。その場合、アクセスキーやシークレットアクセスキーなどは環境変数に設定することが多い。しかし、開発用やテスト用にローカルの DynamoDB を利用するときのエンドポイントは環境変数で設定できず Aws.config で設定する必要がある。そんなときいい感じに Aws.config を環境別に設定する方法をメモっとく。

AWS SDK for Ruby を Gemfile に追加する

AWS SDK を導入するために gem 'aws-sdk-rails' を Gemfile に追加する。

Gemfile
--- a/Gemfile
+++ b/Gemfile
@@ -26,6 +26,8 @@ gem 'jbuilder', '~> 2.5'
 # gem 'redis', '~> 3.0'
 # Use ActiveModel has_secure_password
 # gem 'bcrypt', '~> 3.1.7'
+# Use AWS SDK for Ruby
+gem 'aws-sdk-rails'

 # Use Capistrano for deployment
 # gem 'capistrano-rails', group: :development

環境別設定ファイルを作成する

database.yml のように環境別の設定を記述する。依存している AWS に関わる環境変数も明示的に記述するといいと思う。

config/aws.yml
default: &default
  access_key_id: <%= ENV["AWS_ACCESS_KEY_ID"] %>
  secret_access_key: <%= ENV["AWS_SECRET_ACCESS_KEY"] %>
  region: <%= ENV["AWS_REGION"] %>

development:
  <<: *default
  endpoint: http://localhost:8000

test:
  <<: *default
  endpoint: http://localhost:8000

production:
  <<: *default

イニシャライザファイルを作成する

あとはイニシャライザで Rails の起動時に設定を読み込む。Rails 4.2 から追加された Rails.application.config_for が便利だ。

config/initializers/aws.rb
# Be sure to restart your server when you modify this file.

# Configure AWS SDK for Ruby.
Aws.config.update(Rails.application.config_for(:aws).symbolize_keys)

設定を Rails コンソールで確認する

Rails コンソールで確認すると設定が反映されていることがわかる。なお、Spring プリローダーが環境変数をキャッシュしているようなので、Spring プリローダーを一度停止してから実行するといい。

$ export AWS_ACCESS_KEY_ID=TESTKEY
$ export AWS_SECRET_ACCESS_KEY=TESTSECRET
$ export AWS_REGION=ap-northeast-1
$ bin/spring stop
$ rails c
> Aws.config
=> {:logger=>#<ActiveSupport::Logger:0x007f81e2598088 @progname=nil, @level=0, @default_formatter=#<Logger::Formatter:0x007f81e2598010 @datetime_format=nil>, @formatter=#<ActiveSupport::Logger::SimpleFormatter:0x007f81e4c05108 @datetime_format=nil>, @logdev=#<Logger::LogDevice:0x007f81e2598ab0 @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#<File:/Users/takuya/Documents/Rails/bookshelf/log/development.log>, @mon_owner=nil, @mon_count=0, @mon_mutex=#<Thread::Mutex:0x007f81e259b620>>, @local_levels=#<Concurrent::Map:0x007f81e1c63f30 entries=0 default_proc=nil>>, :access_key_id=>"TESTKEY", :secret_access_key=>"TESTSECRET", :region=>"ap-northeast-1", :endpoint=>"http://localhost:8000"}
> exit
takuya0301
Mikatus 株式会社の VP Engineering 兼デザイングループグループリーダー。最近は Event Storming と Lagom に興味がある。
https://takuya0301.github.io
mikatus
税理士・会計事務所向けクラウドシステムの企画、開発、提供事業を行っております。
https://www.mikatus.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away