如何通过非默认的aws配置文件与aws sdk进行交互?

时间:2017-03-18 14:53:04

标签: ruby amazon-web-services aws-sdk

我的组织使用联合访问[在此处输入链接描述] [1],这意味着我需要经常重新生成我的aws凭证,以便对它们进行硬编码,甚至将它们设置为环境变量不是一种选择。

我找到了http://docs.aws.amazon.com/sdkforruby/api/Aws/SharedCredentials.html#profile_name-instance_method来记录课程,但我真的无法将其转换成实际的代码(请原谅我的无知,我不是计算机科学家)。

我尝试过各种各样的方法,但我不知所措。

rds = Aws::RDS::Resource.new(
  profile_name: 'foo'
)

不起作用。

1 个答案:

答案 0 :(得分:2)

查看Aws :: RDS :: Resource initialize方法,这应该有效。但是,您可能在ENV ['AWS_PROFILE']或shared_config.profile_name中具有profile_name,它覆盖了@profile_name = options [:profile_name]。您可以调试此方法的一种方法是使用pry gem,它允许您在initialize方法中查看这些变量的设置。

# bundle open 'aws-sdk-core' 
# Find File 'aws-sdk-core/lib/aws-sdk-core/shared_credentials.rb', line 24
# add require pry; binding.pry under the last @profile_name variable in aws-sdk-core/lib/aws-sdk-core/shared_credentials.rb'

def initialize(options = {})
  shared_config = Aws.shared_config
  @path = options[:path]
  @path ||= shared_config.credentials_path
  @profile_name = options[:profile_name]
  @profile_name ||= ENV['AWS_PROFILE']
  @profile_name ||= shared_config.profile_name
  require pry; binding.pry 
  if @path && @path == shared_config.credentials_path
    @credentials = shared_config.credentials(profile: @profile_name)
  else
    config = SharedConfig.new(
      credentials_path: @path,
      profile_name: @profile_name
    )
    @credentials = config.credentials(profile: @profile_name)
  end
end

运行您创建的rds变量后,它将触发pry控制台在该方法内部打开。您现在可以访问shared_config.profile_name,ENV ['AWS_PROFILE'以及选项。

pry(main)> options
         => {:profile_name=>"foo"}
           @profile_name 
         => 'foo' or whatever its set to.
           ENV['AWS_PROFILE']
         => see if it returns some value 
           shared_config.profile_name
         => see if it returns some value