Skip to content
v2.275.0

AWS Region-Specific Information Directory ​

Usage ​

Some information used in CDK Applications differs from one AWS region to another, such as service principals used in IAM policies, S3 static website endpoints, ...

The RegionInfo class ​

The library offers a simple interface to obtain region specific information in the form of the RegionInfo class. This is the preferred way to interact with the regional information database:

ts
// Get the information for "eu-west-1":
const region = regionInfo.RegionInfo.get('eu-west-1');

// Access attributes:
region.s3StaticWebsiteEndpoint; // s3-website-eu-west-1.amazonaws.com
python
# Get the information for "eu-west-1":
region = region_info.RegionInfo.get("eu-west-1")

# Access attributes:
region.s3_static_website_endpoint
java
// Get the information for "eu-west-1":
RegionInfo region = RegionInfo.get("eu-west-1");

// Access attributes:
region.getS3StaticWebsiteEndpoint();
csharp
// Get the information for "eu-west-1":
var region = RegionInfo.Get("eu-west-1");

// Access attributes:
region.S3StaticWebsiteEndpoint;
go
// Get the information for "eu-west-1":
region := regionInfo.RegionInfo_Get(jsii.String("eu-west-1"))

// Access attributes:
region.s3StaticWebsiteEndpoint

The RegionInfo layer is built on top of the Low-Level API, which is described below and can be used to register additional data, including user-defined facts that are not available through the RegionInfo interface.

Low-Level API ​

This library offers a primitive database of such information so that CDK constructs can easily access regional information. The FactName class provides a list of known fact names, which can then be used with the RegionInfo to retrieve a particular value:

ts
const staticWebsite = regionInfo.Fact.find(
  'ap-northeast-1',
  regionInfo.FactName.S3_STATIC_WEBSITE_ENDPOINT
);
// => s3-website-ap-northeast-1.amazonaws.com
python
static_website = region_info.Fact.find("ap-northeast-1", region_info.FactName.S3_STATIC_WEBSITE_ENDPOINT)
java
String staticWebsite = Fact.find("ap-northeast-1", FactName.S3_STATIC_WEBSITE_ENDPOINT);
csharp
var staticWebsite = Fact.Find("ap-northeast-1", FactName.S3_STATIC_WEBSITE_ENDPOINT);
go
staticWebsite := regionInfo.Fact_Find(jsii.String("ap-northeast-1"), regionInfo.FactName_S3_STATIC_WEBSITE_ENDPOINT())

Supplying new or missing information ​

As new regions are released, it might happen that a particular fact you need is missing from the library. In such cases, the Fact.register method can be used to inject FactName into the database:

ts
class MyFact implements regionInfo.IFact {
  public readonly region = 'bermuda-triangle-1';
  public readonly name = regionInfo.FactName.S3_STATIC_WEBSITE_ENDPOINT;
  public readonly value = 's3-website.bermuda-triangle-1.nowhere.com';
}

regionInfo.Fact.register(new MyFact());
python
@jsii.implements(region_info.IFact)
class MyFact:

region_info.Fact.register(MyFact())
java
public class MyFact implements IFact {
    public final Object region;
    public final Object name;
    public final Object value;
}

Fact.register(new MyFact());
csharp
class MyFact : IFact
{
    public readonly void Region = "bermuda-triangle-1";
    public readonly void Name = FactName.S3_STATIC_WEBSITE_ENDPOINT;
    public readonly void Value = "s3-website.bermuda-triangle-1.nowhere.com";
}

Fact.Register(new MyFact());
go
type myFact struct {
	region
	name
	value
}

regionInfo.Fact_Register(newMyFact())

Overriding incorrect information ​

In the event information provided by the library is incorrect, it can be overridden using the same Fact.register method demonstrated above, simply adding an extra boolean argument:

ts
class MyFact implements regionInfo.IFact {
  public readonly region = 'us-east-1';
  public readonly name = regionInfo.FactName.S3_STATIC_WEBSITE_ENDPOINT;
  public readonly value = 'the-correct-endpoint.amazonaws.com';
}

regionInfo.Fact.register(new MyFact(), true /* Allow overriding information */);
python
@jsii.implements(region_info.IFact)
class MyFact:

region_info.Fact.register(MyFact(), True)
java
public class MyFact implements IFact {
    public final Object region;
    public final Object name;
    public final Object value;
}

Fact.register(new MyFact(), true);
csharp
class MyFact : IFact
{
    public readonly void Region = "us-east-1";
    public readonly void Name = FactName.S3_STATIC_WEBSITE_ENDPOINT;
    public readonly void Value = "the-correct-endpoint.amazonaws.com";
}

Fact.Register(new MyFact(), true);
go
type myFact struct {
	region
	name
	value
}

regionInfo.Fact_Register(newMyFact(), jsii.Boolean(true))

If you happen to have stumbled upon incorrect data built into this library, it is always a good idea to report your findings in a GitHub issue, so we can fix it for everyone else!


This module is part of the AWS Cloud Development Kit project.

Types ​

NameKindSummary
DefaultClassProvides default values for certain regional information points.
FactClassA database of regional information.
FactNameClassAll standardized fact names.
IFactInterfaceA fact that can be registered about a particular region.
RegionInfoClassInformation pertaining to an AWS region.