Cuando se implementan servicios utilizando Amazon API Gateway, configurar un dominio personalizado es fundamental para ofrecer una experiencia de usuario coherente. Esto permite que los clientes accedan a nuestra la API a través de un dominio que refleje y fortalezca la identidad de nuestra marca o empresa, en lugar de utilizar el dominio predeterminado que AWS proporciona, que además puede ser cambiante.
En este artículo, exploraremos cómo aprovechar esta funcionalidad para mejorar la experiencia de los usuarios y fortalecer la identidad de tu marca en tus API.
La configuración de un dominio personalizado en Amazon API Gateway presenta una serie de beneficios, incluyendo la mejora de la legibilidad de las URL de la API, el refuerzo de la identidad de tu marca y la facilitación del acceso de los usuarios a tus servicios.
Antes de configurar un dominio personalizado, asegúrate de tener una cuenta de AWS en funcionamiento, una API ya creada en Amazon API Gateway y un dominio personalizado registrado a tu nombre.
Para este caso particular se tiene registrado el dominio en "GoDaddy", en otros proveedores de dominio, la configuración será muy similar.
Route 53
Se debe registrar una zona hosteada en Route 53 para apuntar al dominio personalizado.
En la pantalla principal de zonas hosteadas de Route 53 debe aparecer un nuevo registro.
Accedemos al detalle y debemos observar la siguiente configuración.
Los valores deben ser registrados en los servidores de nombres en GoDaddy.
Dominio GoDaddy
Se configura los nombres de dominios de la siguiente manera en el panel de GoDaddy.
Solicitud de cerificado AWS Certificate Manager (ACM)
Se realiza una solicitud de certificado SSL/TLS para nuestro dominio.
Este proceso puede tardar un momento en verificarse correctamente para su uso.
Una vez realizado estas configuraciones estamos listos para crear un subdominio para nuestras apis desplegadas.
Creación de recursos
En este caso se muestra la configuración a nivel de plantillas CloudForamation y veremos que configuraciones o recursos son creados en la consola web de AWS.
Necesitamos localizar y estructurar los siguientes parámetros.
CustomDomainName: Será el subdominio que vamos a darle a nuestra api.
PublicCertificateArn: Es el ARN del certificado reclamado en ACM.
Hosted Zone Id: ID de la zona hosteada que acabamos de crear.
Si estamos usando plantillas de cfn podemos crear los siguientes recursos necesarios para la configuración del dominio:
AWS::ApiGatewayV2::DomainName
Verificar la creación de los recursos en la consola de AWS:
AWS::ApiGatewayV2::ApiMapping
Esta configuración es por cada api que tengamos:
Verificar la creación de los recursos en la consola de AWS:
Se mapean las diferentes apis de A. API Gateway al dominio:
Registro en Route 53
El valor de "API Gateway domain name" mostrado en la sección anterior es clave, ya que es la URL que usaremos para registrar en Route 53:
En "value" colocar el valor de domain name de API Gateway:
Notar que el "record-name" debe coincidir con el nombre de dominio que le estamos asignando en API Gateway.
Una vez creado estamos listos para usar el dominio personalizado para consumir nuestras APIS.
Script personalizado
Para que el registro del "record" en Route 53 sea un poco más automatizado se adjunta un script de ejemplo:
#!/bin/bash
#Register public record set in Route 53 in shared resources account for the api
pwd
ls -la
cd .stack/
CUSTOM_DOMAIN_NAME=<YOUR_CUSTOM_DOMAIN>
PUBLIC_CERTIFICATE_ARN=<YOUR_CERTIFICATE_AN>
ARN_API_DOMAIN_NAME=<YOUR_ARN_API_DOMAIN>
HOSTED_ZONE_ID=<YOUR_HOSTED_ZONE_ID>
echo "Showing variables..."
echo "CUSTOM_DOMAIN_NAME: $CUSTOM_DOMAIN_NAME"
echo "STACK_NAME: $STACK_NAME"
echo "ARN_API_DOMAIN_NAME: $ARN_API_DOMAIN_NAME"
echo "PUBLIC_CERTIFICATE_ARN: $PUBLIC_CERTIFICATE_ARN"
echo "HOSTED_ZONE_ID: $HOSTED_ZONE_ID"
if [ -n "$CUSTOM_DOMAIN_NAME" ] && [ -n "$PUBLIC_CERTIFICATE_ARN" ] && [ -n "$ARN_API_DOMAIN_NAME" ]; then
echo "Consulting the Record Set HZ $HOSTED_ZONE_ID Name $CUSTOM_DOMAIN_NAME"
EXISTING_RECORD=$(aws route53 list-resource-record-sets --hosted-zone-id $HOSTED_ZONE_ID --query "ResourceRecordSets[?Name=='$CUSTOM_DOMAIN_NAME.' && Type=='CNAME'].Name" --output text)
if [ -n "$EXISTING_RECORD" ]; then
echo "The register or CNAME already exists in Route 53."
echo "EXISTING_RECORD: $EXISTING_RECORD"
else
echo "The register or CNAME does not exist in Route 53. A new one will be created."
#Create the CNAME record set in Route 53
aws route53 change-resource-record-sets \
--hosted-zone-id $HOSTED_ZONE_ID \
--change-batch '{
"Changes": [
{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "'"$CUSTOM_DOMAIN_NAME"'",
"Type": "CNAME",
"TTL": 300,
"ResourceRecords": [
{
"Value": "'"$ARN_API_DOMAIN_NAME"'"
}
]
}
}
]
}'
echo "Register or CNAME created successfully"
fi
else
echo "It is omitted to create the public DNS record since a domain is not specified"
fi
El valor de ARN_API_DOMAIN_NAME es el valor de API Gateway domain name.
Pruebas
Podemos ejecutar cualquier prueba usando el dominio configurado:
EL path mapping se lo configura en el recurso AWS::ApiGatewayV2::ApiMapping, esta configuración es por cada api que tengamos.
Top comments (0)