以下のようにすると、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以上?と共有できます)
[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
[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などに書いておいて、必要に応じて切り替えます。
export AWS_DEFAULT_PROFILE=dev