A Route 53 aponta para uma instância em vez de um IP ou CNAME?
Tenho várias razões para isto:
não quero queimar um IP.
Os CNAMEs não são fiáveis, porque se uma instância cair e voltar a subir, o nome completo, ec2-X-X-X-X.compute-1.amazonaws.com, vai mudar.
no futuro, preciso de criar instâncias. programaticamente e abordá-los com um subdomínio, e eu não vejo nenhuma maneira fácil de fazer isso com IPs elásticos ou CNAMEs.
5 answers
Aqui está um link para o meu AWS Route53 DNS instance update Gist. Ele contém uma política do IAM e um script Ruby. Você deve criar um novo usuário no painel IAM, atualizá-lo com a Política anexada (com o seu ID de zona nele) e definir o credenciais e parâmetros no script Ruby. O primeiro parâmetro é o nome alternativo da máquina para a sua instância na sua zona hospedada. O nome da máquina privada da instância é igual a <hostname>.<domain>
e o nome da máquina pública da instância é igual a <hostname>.<domain>
<hostname>-public.<domain>
UPDATE : aqui está uma ligação para AWS Route53 DNS instance update init.d script a registar os nomes das máquinas quando botas de instância. Aqui está outra se quiser usar AWS Route53 DNS load-balanceamento de forma semelhante.
Se continuar a usar o route53, poderá fazer um programa que actualiza o registo do CNAME para essa instância sempre que ele reiniciar.
Ver isto - > http://cantina.co/automated-dns-for-aws-instances-using-route-53 / (divulgação, eu não criei isto, embora o tenha usado como ponto de salto para uma situação semelhante) {[[2]} Melhor ainda, porque você mencionou ser capaz de girar instâncias programaticamente, esta abordagem deve guiá-lo para esse fim.
Ver também - > http://docs.pythonboto.org/en/latest/index.html
Com a estrada 53, pode criar registos de nomes alternativos que mapeiam um Balancer de carga elástica (ELB):
Http://docs.amazonwebservices.com/Route53/latest/DeveloperGuide/HowToAliasRRS.html
O único requisito é que você precise de Java instalado na sua instância EC2.
O projecto está hospedado em https://github.com/renatodelgaudio/awsroute53 e também pode modificá-lo caso precise
Você poderia configurá-lo para executar na hora de arranque ou como uma tarefa crontab para que seu registro seja atualizado com o novo IP público seguindo instruções semelhantes a estes passos de instalação manual do Linux
Usar uma combinação de Cloudwatch, Route53 e Lambda também é uma opção se hospedar pelo menos uma parte do seu dns na Route53. A vantagem disso é que você não precisa de nenhuma aplicação rodando na instância em si.
Para usar esta abordagem, configura uma regra de Cloudwatch para activar uma função Lambda sempre que o estado de uma instância EC2 muda para a execução. A função Lambda pode então recuperar o endereço IP público da instância e atualizar o registro dns em Route53.
O Lambda pode ser parecido com isto (usando o nó.js runtime):
var AWS = require('aws-sdk');
var ZONE_ID = 'Z1L432432423';
var RECORD_NAME = 'testaws.domain.tld';
var INSTANCE_ID = 'i-423423ccqq';
exports.handler = (event, context, callback) => {
var retrieveIpAddressOfEc2Instance = function(instanceId, ipAddressCallback) {
var ec2 = new AWS.EC2();
var params = {
InstanceIds: [instanceId]
};
ec2.describeInstances(params, function(err, data) {
if (err) {
callback(err);
} else {
ipAddressCallback(data.Reservations[0].Instances[0].PublicIpAddress);
}
});
}
var updateARecord = function(zoneId, name, ip, updateARecordCallback) {
var route53 = new AWS.Route53();
var dnsParams = {
ChangeBatch: {
Changes: [
{
Action: "UPSERT",
ResourceRecordSet: {
Name: name,
ResourceRecords: [
{
Value: ip
}
],
TTL: 60,
Type: "A"
}
}
],
Comment: "updated by lambda"
},
HostedZoneId: zoneId
};
route53.changeResourceRecordSets(dnsParams, function(err, data) {
if (err) {
callback(err, data);
} else {
updateARecordCallback();
}
});
}
retrieveIpAddressOfEc2Instance(INSTANCE_ID, function(ip) {
updateARecord(ZONE_ID, RECORD_NAME, ip, function() {
callback(null, 'record updated with: ' + ip);
});
});
}
Terá de executar o Lambda com uma função que tem permissões para descrever instâncias EC2 e actualizar registos em Route53.