Working With DNS in Stelvio
When you create resources with cloud providers (such as an Api Gateway), these resources needs to be accessible via HTTP.
For example, by default, you get a URL like https://<api-id>.execute-api.<region>.amazonaws.com/
for your Api Gateway.
In real world scenarios, you would want to use a custom domain name like api.example.com
instead of the default one provided by the cloud provider.
There is a lot of setup and configuration needed to map a custom domain name to your cloud resources: Besides the domain name itself, you need to manage DNS records, TLS certificates, and ensure that your application can respond to requests made to these custom domains.
Stelvio handles all of this for you automatically with a very simple setup.
Setting up DNS with Stelvio
Stelvio supports popular DNS providers:
stelvio.cloudflare.dns.CloudflareDns
for Cloudflarestelvio.aws.route53.Route53Dns
for AWS Route 53- more providers will be added in the future
Under the bonnet
All of these classes inherit from stelvio.dns.Dns
and implement the necessary methods to create and manage DNS records. When creating a record, using the create_record
method, a stelvio.dns.Record
object is returned, which contains the details of the created record.
Configuring DNS in Stelvio
To configure DNS in your Stelvio application, you need to create an instance of the DNS provider class and pass it to your StelvioApp
instance.
Here's an example of how to set up Cloudflare DNS in your Stelvio application:
from stelvio import StelvioApp
from stelvio.cloudflare.dns import CloudflareDns
dns = CloudflareDns(zone_id="your-cloudflare-zone-id")
app = StelvioApp(
"my-app",
dns=dns,
)
This example initializes a Stelvio application with Cloudflare DNS. You need to replace "your-cloudflare-zone-id"
with your actual Cloudflare zone ID.
Managing Certificates for Domains with Stelvio
When using custom domain names, you also need to manage TLS certificates.
Stelvio provides a way to manage custom domain names with TLS certificates through the stelvio.aws.acm.AcmValidatedDomain
class for custom domain names on AWS.
Here's an example of how to set up a custom domain with a TLS certificate in Stelvio:
from stelvio.aws.acm import AcmValidatedDomain
domain = AcmValidatedDomain(
domain_name="your-custom-domain.com"
)
This class will handle the creation and validation of the TLS certificate for your custom domain.
You can then use this domain in your Stelvio application.
However, Stelvio usually handles this step for you (e.g. when using custom domain with API Gateway)
AcmValidatedDomain
is a Stelvio component that automatically creates the following three Pulumi resources on AWS, and your DNS provider:
certificate
:pulumi_aws.acm.Certificate
validation_record
:stelvio.dns.Record
cert_validation
:pulumi_aws.acm.CertificateValidation