AWS Declarative Endpoint Traits#
This document defines AWS declarative endpoint traits.
AWS Endpoints Overview#
An endpoint is used to connect programmatically to an AWS service. An endpoint is the URL of the entry point for an AWS web service.
Most AWS services are regional: they offer regional endpoints and the service's resources are independent of similar resources in other regions.
- Region
- Each region consists of multiple availability zones within a single geographic area. Regions themselves are isolated and independent from other regions.
- Partition
- AWS groups regions into
partitions.
Every region is in exactly one partition and each partition has one or more regions.
AWS commercial Regions are in the
aws
partition, Regions in China are in theaws-cn
partition, and AWS GovCloud Regions are in theaws-us-gov
partition.
- FIPS Endpoints
- Some AWS services have endpoints that support Federal Information Processing Standard (FIPS) 140-2. For a list of FIPS endpoints, see FIPS endpoints by Service.
- Dual stack Endpoints
- Some AWS services offer dual stack endpoints, so that you can access them using either IPv4 or IPv6 requests. For a list of services that support dual stack endpoints, see AWS services that support IPv6.
aws.endpoints#endpointsModifier
trait#
- Summary
- A meta-trait that marks a trait as an endpoint modifier. Traits that are marked with this trait are applied to service shapes or operation shapes to indicate how a client can resolve endpoints for that service or operation.
- Trait selector
[trait|trait]
- Value type
- Annotation trait
The following example defines a service with standardRegionalEndpoints
modified by
the hypothetical fooExample
endpoint modifier.
$version: "2"
namespace smithy.example
use aws.endpoints#endpointsModifier
use aws.endpoints#standardRegionalEndpoints
@endpointsModifier
@trait(selector: "service")
structure fooExample {}
@standardRegionalEndpoints
@fooExample
service MyService {
version: "2020-04-02"
}
Because endpoint modification definitions are just specialized shapes, they can also support configuration settings.
$version: "2"
namespace smithy.example
use aws.endpoints#endpointsModifier
use aws.endpoints#standardRegionalEndpoints
@endpointsModifier
@trait(selector: "service")
structure endpointSuffix {
suffix: String
}
@standardRegionalEndpoints
@endpointSuffix(suffix="-suffix")
service MyService {
version: "2020-04-02"
}
aws.endpoints#standardRegionalEndpoints
trait#
- Summary
An endpoints modifier trait that indicates that a service's endpoints should be resolved using the standard AWS regional patterns:
- Default:
https://{service}.{region}.{dnsSuffix}
- Fips:
https://{service}-fips.{region}.{dnsSuffix}
- Dualstack:
https://{service}.{region}.{dualStackDnsSuffix}
- Fips/Dualstack:
https://{service}-fips.{region}.{dualStackDnsSuffix}
- Default:
- Trait selector
service
- Trait value
- A
structure
with the following properties:
Property | Type | Description |
---|---|---|
partitionSpecialCases | map of partition to PartitionSpecialCase object |
A map of partition to partition special cases - endpoints for a partition that do not follow the standard patterns. |
regionSpecialCases | map of region to RegionSpecialCase object |
A map of region to regional special cases - endpoints for a region that do not follow the standard patterns. |
- Conflicts with
- aws.endpoints#standardPartitionalEndpoints trait
Most AWS services are regionalized and are strongly encouraged to follow the standard endpoint patterns defined above for consistency, and to ensure that endpoints are forwards compatible, and that SDK updates are not required when the service launches in a new region or partition.
The following example defines a service that uses the standard regional endpoints:
$version: "2"
namespace smithy.example
use aws.endpoints#standardRegionalEndpoints
@standardRegionalEndpoints
service MyService {
version: "2020-04-02"
}
While services are strongly encouraged to follow standard endpoint patterns, there are occasional exceptions and special cases. The following example defines a service that uses standard regional endpoints, but uses a non-standard pattern for FIPS endpoints in US GovCloud:
@standardRegionalEndpoints(
partitionSpecialCases: {
aws-us-gov: [
{
endpoint: "https://myservice.{region}.{dnsSuffix}",
fips: true
}
]
}
)
service MyService {
version: "2020-04-02"
}
PartitionSpecialCase
object#
A PartitionSpecialCase
defines the endpoint pattern to apply for all regional endpoints
in the given partition. A PartitionSpecialCase object contains the following properties:
Property name | Type | Description |
---|---|---|
endpoint | string |
Required. The special-cased endpoint pattern. |
dualStack | boolean |
When true , the special case will apply to dualstack endpoint variants. |
fips | boolean |
When true , the special case will apply to fips endpoint variants. |
RegionSpecialCase
object#
A RegionSpecialCase
object contains the following properties:
Property name | Type | Description |
---|---|---|
endpoint | string |
Required. The special-cased endpoint pattern. |
dualStack | boolean |
When true , the special case will apply to dualstack endpoint variants. |
fips | boolean |
When true , the special case will apply to fips endpoint variants. |
signingRegion | string |
Overrides the signingRegion used for this region. |
aws.endpoints#standardPartitionalEndpoints
trait#
- Summary
- An endpoints modifier trait that indicates that a service is partitional and a single endpoint should be resolved per partition.
- Trait selector
service
- Trait value
- A
structure
with the following properties:
Property | Type | Description |
---|---|---|
endpointPatternType | string |
Required The pattern type to use for the partition endpoint. This value can be set to service_dnsSuffix to
use the https://{service}.{dnsSuffix} pattern or service_region_dnsSuffix to use
https://{service}.{region}.{dnsSuffix} . |
partitionEndpointSpecialCases | map of partition to PartitionEndpointSpecialCase object |
A map of partition to partition endpoint special cases - partitions that do not follow the
service's standard patterns or are located in a region other than the partition's
defaultGlobalRegion . |
- Conflicts with
- aws.endpoints#standardRegionalEndpoints trait
Partitional services (also known as "global" services) resolve a single endpoint per partition.
That single endpoint is located in the partition's defaultGlobalRegion
. Partitional
services should follow one of two standard patterns:
service_dnsSuffix
:https://{service}.{dnsSuffix}
service_region_dnsSuffix
:https://{service}.{region}.{dnsSuffix}
The following example defines a partitional service that uses {service}.{dnsSuffix}
:
$version: "2"
namespace smithy.example
use aws.endpoints#standardPartitionalEndpoints
@standardPartitionalEndpoints(endpointPatternType: "service_dnsSuffix")
service MyService {
version: "2020-04-02"
}
Services should follow the standard patterns; however, occasionally there are special cases.
The following example defines a partitional service that uses a special case pattern in
the aws
partition and uses a non-standard global region in the aws-cn
partition:
@standardPartitionalEndpoints(
endpointPatternType: "service_dnsSuffix",
partitionEndpointSpecialCases: {
aws: [{endpoint: "https://myservice.global.amazonaws.com"}],
aws-cn: [{region: "cn-north-1"}]
}
)
service MyService {
version: "2020-04-02"
}
PartitionEndpointSpecialCase
object#
A PartitionEndpointSpecialCase
object contains the following properties:
Property name | Type | Description |
---|---|---|
endpoint | string |
The special-cased endpoint pattern. |
region | string |
Override the defaultGlobalRegion used in this partition. |
dualStack | boolean |
When true , the special case will apply to dualstack endpoint variants. |
fips | boolean |
When true , the special case will apply to fips endpoint variants. |
aws.endpoints#dualStackOnlyEndpoints
trait#
- Summary
- An endpoints modifier trait
that indicates that a service has only
dual stack endpoints,
does not support IPV4 only endpoints, and should not have the
useDualStackEndpoint
endpoint parameter. Dual stack endpoints support IPV4 and IPV6. - Trait selector
service
- Trait value
- Annotation trait
Adding the dualStackOnlyEndpoints
trait to a service modifies the generation of endpoints from
aws.endpoints#standardRegionalEndpoints trait or aws.endpoints#standardPartitionalEndpoints trait,
removes the useDualStackEndpoint
parameter, and defaults the behavior to dual stack for
all partitions that support it.
The following example specifies a service that uses standard regional endpoint patterns and is dual stack only:
@standardRegionalEndpoints
@dualStackOnlyEndpoints
service MyService {
version: "2020-04-02"
}
aws.endpoints#rulesBasedEndpoints
trait#
- Summary
- An endpoints modifier trait that indicates that a service has hand written endpoint rules.
- Trait selector
service
- Trait value
- Annotation trait
Services marked with the rulesBasedEndpoints
trait have hand written endpoint rules that
extend or replace their standard generated endpoint rules through an external mechanism.
This trait marks the presence of hand written rules, which are added to the model by a transformer,
but does not specify their behavior.
A service with rulesBasedEndpoints
may extend the functionality of
endpoint behavior described in the model through other
endpoints modifier traits
by modifying the generated EndpointRuleSet.
The following example specifies a service that has standard regional endpoints extended with hand written rules:
@standardRegionalEndpoints
@rulesBasedEndpoints
service MyService {
version: "2020-04-02"
}
Endpoint Pattern#
Endpoint Patterns SHOULD begin with a scheme of either http or https. When specifying special case endpoints in
StandardRegionalEndpoints or
StandardPartitionalEndpoints you may use
an endpoint pattern such as https://{service}.{region}.{dnsSuffix}
with the following pattern substitutions:
Pattern | Description |
---|---|
{region} |
The region from the AWS::Region built-in. |
{service} |
The endpoint prefix from the service's endpointPrefix. |
{dnsSuffix} |
The dns suffix from the resolved partition's properties. |
{dualStackDnsSuffix} |
The dualStack dns suffix from the resolved partition's properties. |