Hacker News new | ask | show | jobs
by willglynn 2248 days ago
The AWS SDKs I've dissected contain the information needed to talk to each (service, region) tuple as machine-readable data. They seem to converge at boto:

https://github.com/boto/botocore/blob/master/botocore/data/e...

Updates somehow land automatically, e.g. this commit adding the new region a few hours ago:

https://github.com/boto/botocore/commit/f7dc4730ad34c6c3322d...

1 comments

This is incredibly useful, thanks! Whist it has some region information and endpoints, boto's lacking other useful information - availability zone count, hosted zones IDs for services like S3, etc. This data publicly lives in a variety of tables across their documentation, and is painful to scrape.
Absolutely a fair criticism.

As a followup, I've found that the Terraform AWS provider needs information that boto doesn't – specifically, it needs region-specific details which can only be found in the documentation. They have a checklist for what to do when a new region gets announced:

https://github.com/terraform-providers/terraform-provider-aw...

Volunteers gather this information and push commits like:

https://github.com/terraform-providers/terraform-provider-aw...

I too am disappointed that AWS doesn't publish this information in a convenient way. On the other hand, well… source code _is_ a machine readable data format, and Go ASTs aren't that scary:

https://zupzup.org/go-ast-traversal/

Terraform follows AWS changes better than CloudFormation, so tracking Terraform might be a reasonable solution. One could even build a process to automatically retrieve the Terraform AWS provider source code, extract the necessary identifiers, and update the relevant data file living in an internal repository. Don't ask me how I know :-/

Terraform now has these identifiers:

https://github.com/terraform-providers/terraform-provider-aw...

Thanks to PatMyron at AWS, who apparently added this information to Terraform after seeing my mention above :-)