Skip to content

mikee531/amazon-cloudfront-client-routing-library

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation


[⚠ WARNING]
DONT PUSH ANYTHING TO THIS REPO. IT IS PUBLIC!!

Amazon CloudFront Client Routing Library

The Amazon CloudFront Client Routing Library is an open-source library designed for CloudFront's Client Routing feature, which is used direct client devices to CloudFront Points of Presence (POPs) with greater precision. Client Routing feature utilizes information present within a specially formatted DNS label, and this library provides functions to encode and decode such DNS labels.

What is Client Routing?

Client Routing is a new feature from CloudFront which utilizes client subnet information encoded in a DNS label to route traffic to CloudFront POPs. In addition to utilizing this library, this feature has associated prerequisites such as using Route53 and requiring certificate updates. Documentation for Client Routing will be released in the near future, but if you are interested in using this feature sooner, please reach out to AWS Support to know more.

How to Use the Amazon CloudFront Client Routing Library?

There are two main functions in the library: encode_request_data and decode_request_data.

Encoding

encode_request_data takes three parameters: client_ip, content_group_id, and fqdn. A Client Routing label is generated from this data and then that label is returned prepended as a subdomain to the fqdn.

The content_group_id is set aside for future use and must be set to an empty string for now.

let encoded_label = amazon_cloudfront_client_routing_lib::encode_request_data("1.2.3.4", "", "example.com"); // encoded_label is abacaqdaaaaaaaamaaaaaaaaaaaaa.example.com

Decoding

decode_request_data takes one parameter: domain. A result containing either a DecodedClientRoutingLabel struct or a DecodeLengthError is returned with each field set according to the domain. The domain can be either a FQDN or just the Client Routing label.

let decoded_label = amazon_cloudfront_client_routing_lib::decode_request_data("abacaqdaaaaaaaamaaaaaaaaaaaaa").unwrap();
// DecodedClientRoutingLabel {
//     client_sdk_version: 1,
//     is_ipv6: false,
//     client_subnet: [1, 2, 3, 0, 0, 0, 0, 0],
//     subnet_mask: 24,
//     cgid: 0,
// }
let decoded_label = amazon_cloudfront_client_routing_lib::decode_request_data("abacaqdaaaaaaaamaaaaaaaaaaaaa.example.com").unwrap();
// DecodedClientRoutingLabel {
//     client_sdk_version: 1,
//     is_ipv6: false,
//     client_subnet: [1, 2, 3, 4, 0, 0, 0, 0],
//     subnet_mask: 24,
//     cgid: 0,
// }

If the first dns label of the domain is an invalid Client Routing label (eg. improper length) then the result will contain an error.

let decoded_label = amazon_cloudfront_client_routing_lib::decode_request_data("abacaqdaaaaaaaamnjg3oubcyv").unwrap();
// DecodeLengthError {
//     num_chars: 26,
//     expected_num_chars: 29   
// }

License

This library is licensed under the Apache 2.0 License.

Releases

No releases published

Packages

No packages published

Languages

  • Rust 100.0%