Al final decidí omitir las secuencias de comandos ubuntu ec2 y hacer algo similar. Intenté usar el servicio Route53 de Amazon como el servicio de nombres y fue muy fácil ponerlo en funcionamiento.
Usando Route53
Esto es lo que hice; En primer lugar he usado el IAM tools para crear un usuario route53 'con permisos para políticas liberales para interactuar con el servicio de Route53
Crear el grupo DNS & usuario
iam-groupcreate -g route53 -v
iam-usercreate -u route53 -g route53
crear claves para el usuario y tome en cuenta estos para más adelante
iam-useraddkey -u route53
dan acceso al grupo para añadir zonas y registros DNS
iam-grouplistpolicies -g route53
iam-groupaddpolicy -p hostedzone -e Allow -g route53 -a route53:* -r '*'
una lista de los usuarios y políticas para un grupo
iam-grouplistusers -g route53
iam-grouplistpolicies -g route53
iam-grouplistpolicies -g route53 -p hostedzone
Para añadir y eliminar entradas de registro DNS que utiliza la excelente biblioteca de Python envoltura para Route53, cli53. Esto elimina el dolor de usar route53. Puede tomar desde aquí
https://github.com/barnybug/cli53
En mi caso, el script en Python es un enlace simbólico en/usr/bin como cli53. Tendrá que establecer las siguientes variables de entorno que contienen claves creadas anteriormente para el usuario de route53.
export AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
export AWS_ACCESS_KEY_ID=XXXXXXXXXXXXXXXXXXXXX
Deberá entonces crear una entrada de zona para su dominio, p. simple.org
cli53.py create simple.org
Esto debería devolver una dirección del servidor de nombres del Amazonas que se puede asociar con su nombre de dominio a través de su nombre de dominio de registro, de modo que las búsquedas por nombre de dominio serán redirigidos a los servidores Route53.
Una vez que la zona está configurada, agregar y eliminar entradas es simple, p.
cli53 rrcreate simple.org hostname CNAME ec2-184-73-137-40.compute-1.amazonaws.com
cli53 rrdelete simple.org hostname
se utiliza una entrada CNAME con el nombre DNS público de la instancia EC2 ya que esto va a resolver el nombre de host a la dirección IP pública externa y la IP privada desde dentro de EC2. A continuación, se agrega una entrada para un host 'test2.simple.org'.
cli53 rrcreate simple.org test2 CNAME ec2-184-73-137-40.compute-1.amazonaws.com --ttl 60 --replace
Se ajusta automáticamente el nombre de host y la actualización de Route53
Ahora lo que queda es configurar un script para hacer esto automáticamente cuando la máquina arranca. Esta solución y la siguiente secuencia de comandos le debe a la enorme deuda excelente tutorial de Marius Ducea encontrar aquí
http://www.ducea.com/2009/06/01/howto-update-dns-hostnames-automatically-for-your-amazon-ec2-instances/
Se trata básicamente de hacer lo mismo que la configuración de Marius, pero utilizando en lugar de Route53 Enlazar.
La secuencia de comandos utiliza los servicios basados en REST simples disponibles para cada instancia de EC2 en
http://169.254.169.254
para recuperar el nombre DNS público real y agarrar el nombre de host que desee de la instancia. El nombre de host se pasa a la instancia utilizando los 'datos de usuario' personalizables que podemos especificar cuando comenzamos la instancia. El script espera datos de usuario en el formato
hostname=test2
el guión
- información agarrar nombre de host a partir de los datos de usuario de instancia
- agarrar el nombre DNS público de la instancia de metadatos
- de análisis el nombre de host
- establece el nombre de host en el nombre completo, por ejemplo test2.simple.org,
- Agregue un registro CNAME para este FQDN en el punto Route53 al nombre DNS público
- escriba una entrada en los mensajes del día para que los usuarios puedan ver el dominio en la asignación ec2 cuando inicien sesión
copiar y guardar los siguientes como /usr/bin/autohostname.sh
#!/bin/bash
DOMAIN=simple.org
USER_DATA=`/usr/bin/curl -s http://169.254.169.254/latest/user-data`
EC2_PUBLIC=`/usr/bin/curl -s http://169.254.169.254/latest/meta-data/public-hostname`
HOSTNAME=`echo $USER_DATA| cut -d = -f 2`
#set also the hostname to the running instance
FQDN=$HOSTNAME.$DOMAIN
hostname $FQDN
export AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
export AWS_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxxxxxxx
# Update Route53 with a CNAME record pointing the hostname to the EC2 public DNS name
# in this way it will resolve correctly to the private ip internally to ec2 and
# the public ip externally
RESULT=`/root/dns/cli53/cli53.py rrcreate $DOMAIN $HOSTNAME CNAME $EC2_PUBLIC --ttl 60 --replace`
logger "Created Route53 record with the result $RESULT"
# write an MOTD file so that the hostname is displayed on login
MESSAGE="Instance has been registered with the Route53 nameservers as '$FQDN' pointing to ec2 domain name '$EC2_PUBLIC'"
logger $MESSAGE
cat<<EOF > /etc/update-motd.d/40-autohostname
#!/bin/bash
# auto generated on boot by /root/bin/auto_hostname.sh via rc.local
echo "$MESSAGE"
EOF
chmod +x /etc/update-motd.d/40-autohostname
exit 0
para obtener la secuencia de comandos para ejecutar en el arranque, añadimos una línea en /etc/rc.local por ejemplo,
/usr/bin/autohostname.sh
Cambie los datos de usuario para la instancia de prueba a 'hostname = test2' y reinicie la instancia. Una vez que se reinicie, debe poder iniciar sesión a través de test2.simple.org. Puede tardar unos minutos en resolverse correctamente, según los TTL que haya especificado. Cuando inicie sesión, debería ver un mensaje MOTD que le dice
La instancia se ha registrado con los servidores de nombres Route53 como 'test2.simple.org' apuntando al nombre de dominio ec2 'ec2-184-73-137-40.compute- 1.amazonaws.com '
Una vez que tenga esto trabajando con la instancia de prueba, tendría sentido realizar una copia de seguridad como una AMI que puede usar para crear otras instancias con las mismas capacidades de autohostnaming.
HTH
Great answer. Esto me puso en marcha bastante rápido. Hice un cambio. En lugar de usar los 'datos de usuario' construí el nombre de host de las etiquetas ec2: HOSTNAME = $ (ec2-describe-tags --filter resource-type = instancia --filter resource-id = "$ INSTANCE_ID" | fgrep Nombre | corte -f5) – dkantowitz