首页 > 解决方案 > Aws SDK Ruby - 配置 Faraday 时自动检索凭证

问题描述

我喜欢使用 AWS 开发工具包,而无需指定在哪里可以找到凭证,它可以更轻松地在不同类型的凭证可用的多个环境中进行配置。

AWS SDK for Ruby 搜索凭证 [...]

有什么方法可以检索执行此操作以使用 AWS 配置 Faraday 的代码吗?为了配置法拉第,我需要类似的东西

faraday.request(:aws_sigv4,
      service: 'es',
      credentials: credentials,
      region: ENV['AWS_REGION'],
    )

现在,我希望像在 aws sdk v3 中那样“自动”选择此凭据。我怎样才能做到这一点 ?

(即 AWS SDK v3 中执行类似操作的代码在哪里

credentials = Aws::Credentials.new(ENV['AWS_ACCESS_KEY_ID'], ENV['AWS_SECRET_ACCESS_KEY'])
unless credentials.set?
  credentials = Aws::InstanceProfileCredentials.new
end
...

标签: amazon-web-servicesfaradayaws-sdk-ruby

解决方案


该类Aws::CredentialProviderChain是负责解析凭据的类,但它被标记为@api private因此目前不能保证它在更新后仍然存在(我已经打开了一个讨论以将其公开)。

如果您可以使用它,您可以像这样解析凭据。我将在 CI(ENV 凭据)、开发(Aws 配置凭据)和暂存/生产环境(实例配置文件凭据)中对其进行测试。

Aws::CredentialProviderChain.new.resolve

您可以在这样的中间件中使用它(例如配置 Elasticsearch/Faraday)

faraday.request(:aws_sigv4,
  service: 'es',
  credentials: Aws::CredentialProviderChain.new.resolve,
  region: ENV['AWS_REGION'],
)
end

推荐阅读