将 AWS SDK ruby 与自定义 AWS endpoints.json 结合使用

Use AWS sdk ruby with custom AWS endpoints.json

我正在与 AWS 云不同的云上部署一些服务,但这暴露了与 AWS 兼容的端点。

我得到了一个 endpoints.json 文件,看起来像这样

{
  "partitions": [
    {
      "defaults": {
        "hostname": "{service}.{region}.{dnsSuffix}",
        "protocols": [
          "https"
        ],
        "signatureVersions": [
          "v4"
        ]
      },
      "dnsSuffix": "outscale.com",
      "partition": "osc",
      "partitionName": "Outscale",
      "regionRegex": "^(cloudgouv|us|eu|ap)\-\w+\-\d+$",
      "regions": {
        "eu-west-2": {
          "description": "EU (Paris)"
        },
        [...]
      },
      "services": {
        "ec2": {
          "endpoints": {
            "eu-west-2": {"hostname": "fcu.eu-west-2.outscale.com"},
            [...]
          }
        },

我怎样才能轻松地将它导入到我的 AWS sdk v3 中?在查看文档时,似乎有一些非常相似的东西可用,但我不确定我是否理解如何从我的 ruby 代码

加载此配置

我知道我可以做这样的事情

Aws.config.update(
  region: 'cloudgouv-eu-west-1'
)

但我不确定如何导入整个配置(尤其是端点名称等),以便底层 sdk 自动使用它们而无需更改太多代码

我最终使用 AWS 内部 API 添加分区

# config/initializers/aws.rb
# Monkeypatch the list of AWS endpoints
new_partitions = JSON.parse(
  File.read(
    Rails.root.join('config', 'aws_endpoints_outscale.json')
  )
)
Aws::Partitions.add(new_partitions)

Aws.config.update(
  region: ENV['AWS_REGION'],
  endpoint: 'outscale.com',
)