Cyril Duchon-Doris
Cyril Duchon-Doris

Reputation: 13939

Use AWS sdk ruby with custom AWS endpoints.json

I am deploying some services on a different cloud than the AWS cloud, but that exposes AWS compatible endpoints.

I was given an endpoints.json file that looks like this

{
  "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"},
            [...]
          }
        },

How can I easily import this in my AWS sdk v3 ? When looking at the doc there seems to be something quite similar available, but I'm not sure I understand how to load this config from my ruby code

I know I can do something like this

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

But I'm not sure how to import the whole config (and especially the endpoints name, etc.) so they will automatically be used by underlying sdks without changing too much code

Upvotes: 0

Views: 200

Answers (1)

Cyril Duchon-Doris
Cyril Duchon-Doris

Reputation: 13939

I ended up using AWS internal API to add partitions

# 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',
)

Upvotes: 0

Related Questions