LoginSignup
3
1

More than 5 years have passed since last update.

AWS SDK for Ruby v1とAWS CLIとで複数プロファイルの切り替えを共用

Last updated at Posted at 2015-01-05

以下のようにすると、AWS CLIと同じ、AWS_DEFAULT_PROFILEを見て複数のcredentialを切り替えて使うことができます。

AWS SDK for Ruby v1とAWS CLIとで複数プロファイルの切り替えを共用

require 'aws-sdk-v1'

ENV['AWS_PROFILE'] ||= ENV['AWS_DEFAULT_PROFILE']

AWS.config() # 他にグローバル設定があれば

# クレデンシャルの確認
puts YAML.dump AWS.config.credentials

AWS SDK for Ruby v1は、デフォルトでも~/.aws/credentialsも読んでcredentialを見つけようとしてくれてるのですが、
切り替えに使う環境変数が、なぜかAWS_PROFILEだけ見てて、AWS_DEFAULT_PROFILEの方は見てくれないので、そこを橋渡ししています。
https://github.com/aws/aws-sdk-ruby/blob/aws-sdk-v1/lib/aws/core/credential_providers.rb#L294

(AWS CLIでは、AWS_DEFAULT_PROFILEが使われます)
http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html

リージョンも~/.aws/configとAWS_DEFAULT_PROFILEから取得

同様に、~/.aws/configのリージョンも見てくれてるといいのですが、全く見ておらず…
要望もあるのですが、v1では見送られたみたいです…
https://github.com/aws/aws-sdk-ruby/issues/477

ので、SharedCredentialFileProviderを参考に、書いてみました。

def get_region options = {}
  region = options[:region] || ENV['AWS_REGION'] || ENV['AMAZON_REGION'] || ENV['AWS_DEFAULT_REGION']
  return region if region
  default_region = 'us-east-1'
  path = File.join(Dir.home, '.aws', 'config')
  return default_region unless File.exist?(path) && File.readable?(path)
  require 'aws/core/ini_parser'
  ini = AWS::Core::IniParser.parse(File.read(path))
  profile_name = options[:profile_name]
  profile_name ||= ENV['AWS_PROFILE'] || ENV['AWS_DEFAULT_PROFILE']
  profile_name = "profile " + profile_name if profile_name != "default"
  profile = ini[profile_name] || {}
  profile['region'] || default_region
end

優先順位はここと同じにしてあります。
https://github.com/aws/aws-sdk-ruby/blob/aws-sdk-v1/lib/aws/core/configuration.rb#L471

参考: AWS CLIでのプロファイルの作成と切り替え方法

aws configure --profile dev
aws configure --profile stg
aws configure --profile prod

~/.aws/credentials の例: (AWS CLI 1.5.0以上?と共有できます)

~/.aws/credentials
[dev]
aws_access_key_id = AKFORDEV
aws_secret_access_key = secretaccesskeyfordev

[stg]
aws_access_key_id = AKFORSTG
aws_secret_access_key = secretaccesskeyforstg

[prod]
aws_access_key_id = AKFORPROD
aws_secret_access_key = secretaccesskeyforprod
~/.aws/config
[profile dev]
output = json
region = us-west-2

[profile stg]
output = json
region = us-west-2

[profile prod]
output = json
region = us-west-2

~/.bashrcなどに書いておいて、必要に応じて切り替えます。

~/.bashrc
export AWS_DEFAULT_PROFILE=dev

参考

3
1
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
3
1