Versión: macOS‑compatible (Bash 3.2 + BSD utilities)
Autor: @armandofcom Última actualización: 5‑may‑2025
El script check_domains_sorted.sh consulta Amazon Route 53 y genera un informe de tus dominios públicos:
Columna | Descripción |
---|---|
Dominio | Nombre de la Hosted Zone pública |
Existe en Registered domains | “Sí” si el dominio también está registrado en Route 53 Domains |
Registration date | Fecha de alta del dominio |
Expiration date | Fecha de caducidad |
Auto‑renew | True /False según esté activo el auto‑renovado |
La salida se ordena de esta forma:
- Dominios con auto‑renovado activo (
Auto‑renew = True
) - Dentro de ese grupo, primero los más próximos a caducar (menos días restantes)
- A continuación, el resto de dominios por fecha de expiración ascendente
El resultado se imprime en formato Markdown (tabla)
Herramienta | Versión mínima | Notas |
---|---|---|
AWS CLI v2 | 2.x | Configurado con AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY |
Python 3 | 3.8 | Ya incluido en macOS 14; para versiones anteriores instala python@3 con Homebrew |
Bash | 3.2 | El que viene con macOS; no requiere Bash 4 |
Dateutil (opcional) | N/A | El script usa el parser propio de Python 3.11+; si falta instala pip3 install python-dateutil |
El usuario o rol cuyas claves pegues debe tener como mínimo:
route53:ListHostedZones
route53domains:ListDomains
route53domains:GetDomainDetail
# 1. Clonar o copiar el script
curl -O https://github.com/sysadminsdecuba/aws-route53-util/check_domains_sorted.sh
chmod +x check_domains_sorted.sh
# 2. (Opcional) Instalar Bash moderno + coreutils
brew install bash coreutils
Abre el script y edita la sección Credenciales y región:
AWS_ACCESS_KEY_ID="AKIAEXAMPLE123456"
AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
AWS_SESSION_TOKEN="" # deja vacío si no estás usando STS
AWS_REGION="us-east-1" # Route 53 Domains solo opera en us‑east‑1
⚠️ Seguridad: guardar claves en texto plano no es ideal.
Para entornos productivos emplea variables de entorno, AWS SSM Parameter Store, 1Password CLI, etc.
# Generar un Markdown
./check_domains_sorted.sh > dominios_route53.md
# Generar CSV (modificando dos líneas) y abrir en Excel directamente
./check_domains_sorted.sh > dominios_route53.csv
open dominios_route53.csv
El script no toma flags. Si deseas cambiar la salida a CSV añade:
# Sustituye la cabecera Markdown
printf 'Dominio,Existe,RegistrationDate,ExpirationDate,AutoRenew\n'
# Sustituye la impresión de cada fila
printf '%s,%s,%s,%s,%s\n' ...
- Exporta credenciales al entorno (sin perfíl AWS).
- Obtiene Hosted Zones públicas con
route53 list-hosted-zones
. - Obtiene el listado de dominios registrados con
route53domains list-domains
. - Recorre cada Hosted Zone y, si el dominio está registrado, llama a
route53domains get-domain-detail
para extraer fechas yAutoRenew
. - Calcula días restantes hasta expiración en segundos usando Python (
datetime
→ epoch). - Escribe todas las filas en un fichero temporal y luego ordena con
awk
+sort
. - Imprime la tabla ordenada y limpia los temporales.
| Dominio | Existe en Registered domains | Registration date | Expiration date | Auto‑renew |
|---------|------------------------------|-------------------|-----------------|------------|
| ejemplo.com | Sí | 2023-05-12T10:23:17Z | 2025-05-11T23:59:59Z | True |
| midominio.net | Sí | 2024-01-08T15:42:55Z | 2025-01-07T23:59:59Z | True |
| otrodominio.org | No | - | - | - |
Mensaje | Solución |
---|---|
dateutil import error |
pip3 install python-dateutil |
InvalidClientTokenId |
Claves mal copiadas o expirada la sesión STS |
declare: -A: invalid option |
Estás usando la versión Bash 3.2 sin este README; utiliza esta variante o instala Bash 5 |
Los pull requests son bienvenidos. Si quieres añadir:
- Flag
--output csv
|--output xlsx
- Compatibilidad zsh / fish
- Informe HTML con colores
por favor abre primero un issue para discutir el cambio.
MIT © 2025 Armando Fuentes.