es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Mapear registros DNS privados a instancias EC2 con CDK

Estoy utilizando aws-cdk para ejecutar 7 instancias ec2 que serán nodos de MongoDB. Puedo crearlas con su grupo de seguridad y todo, pero no entiendo cómo puedo asignarlos en el DNS privado.

for (let inst = 1; inst<8; inst++) {
  new ec2.Instance(this, 'mongodb' + inst, {
    instanceType: new ec2.InstanceType('t3.medium'),
    vpc: defaultVpc,
    securityGroup: mongoGroup,
  });
}

Después de la implementación, los nombres serán ${mongodb1/InstanceRole.Arn}, ${mongodb2/InstanceRole.Arn},...

¿Cómo puedo configurar los registros de DNS privados para esas instancias en cdk? Quiero crear una configuración en la que todas las nodos se enumeren como:

 database1.test.com
 database2.test.com
 database3.test.com
 ...

En lugar de:

ec2-203-3-156-25.compute-1.amazonaws.com
ec2-201-1-191-21.compute-1.amazonaws.com
ec2-208-0-112-03.compute-1.amazonaws.com
...

Ya que si vuelvo a implementar o reiniciar, la dirección IP cambiará y necesitaré cambiar la configuración completa nuevamente, además esos nombres no son fáciles de recordar. Supongo que necesito crear una zona hospedada privada y luego asignar cada dirección IP a un CNAME, pero me pregunto si se puede hacer automáticamente en cdk.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para configurar registros DNS privados para las instancias ec2 creadas con aws-cdk, puedes utilizar el módulo route53 para crear una zona de hospedaje privada y luego asignar registros CNAME para cada instancia. Aquí tienes un ejemplo:

    import * as route53 from 'aws-cdk-lib/aws-route53';
    
    // ...
    
    const hostedZone = new route53.PrivateHostedZone(this, 'myPrivateZone', {
      zoneName: 'test.com', // Reemplaza con el nombre de tu zona privada
      vpc: defaultVpc,
    });
    
    for (let i = 1; i <= 7; i++) {
      const inst = new ec2.Instance(this, `mongodb${i}`, {
        // Configuración de la instancia
      });
    
      // Crea un registro CNAME para la instancia en la zona privada
      new route53.CnameRecord(this, `mongodb${i}Record`, {
        zone: hostedZone,
        recordName: `database${i}.test.com`,
        domainName: inst.instancePrivateDnsName,
        ttl: Duration.seconds(300),
      });
    }
    

    Este código crea una zona de hospedaje privada con el nombre test.com (reemplázalo con el nombre de tu propia zona) y luego recorre en bucle las 7 instancias ec2 creadas con aws-cdk, creando un registro CNAME para cada instancia en la zona. El recordName se establece como database${i}.test.com, donde i es el número de instancia (del 1 al 7), y el domainName se establece como instancePrivateDnsName, que es el nombre DNS privado de la instancia.

    Con esta configuración, puedes utilizar database1.test.com, database2.test.com, etc., para referirte a tus nodos de MongoDB en lugar de utilizar los nombres ec2...amazonaws.com largos y difíciles de recordar. Además, si vuelves a implementar o reinicias tus instancias, las direcciones IP privadas cambiarán, pero los registros CNAME en la zona de hospedaje privada se actualizarán automáticamente para apuntar a las nuevas direcciones IP, por lo que no necesitarás actualizar tu configuración manualmente.

Comments are closed.