22
17

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 5 years have passed since last update.

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

Posted at

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
22
17
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
22
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?