DEV Community

Kevin Catucuamba
Kevin Catucuamba

Posted on

Dominio personalizado en Amazon API Gateway. Dominio desde GoDaddy.

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.

Image description

En la pantalla principal de zonas hosteadas de Route 53 debe aparecer un nuevo registro.

Image description

Accedemos al detalle y debemos observar la siguiente configuración.

Image description

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.

Image description

Solicitud de cerificado AWS Certificate Manager (ACM)

Se realiza una solicitud de certificado SSL/TLS para nuestro dominio.

Image description
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

Image description

Verificar la creación de los recursos en la consola de AWS:

Image description

Image description

AWS::ApiGatewayV2::ApiMapping

Esta configuración es por cada api que tengamos:

Image description

Verificar la creación de los recursos en la consola de AWS:

Se mapean las diferentes apis de A. API Gateway al dominio:

Image description

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:

Image description

En "value" colocar el valor de domain name de API Gateway:

Image description

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
Enter fullscreen mode Exit fullscreen mode

El valor de ARN_API_DOMAIN_NAME es el valor de API Gateway domain name.

Pruebas

Podemos ejecutar cualquier prueba usando el dominio configurado:

Image description

EL path mapping se lo configura en el recurso AWS::ApiGatewayV2::ApiMapping, esta configuración es por cada api que tengamos.

Image description

Top comments (0)