带有Boto的AWS Route 53:别名目标名称不在目标区域内

时间:2015-11-22 03:58:42

标签: python amazon-web-services boto amazon-route53

我正在尝试使用python boto' 2.38.0'

将现有的alias_dns_name更新为不同的新elb
def a_record_alias_update(myRegion, myDomain, elbName, elbZone):
dnsConn = route53.connect_to_region(myRegion)
myZone = dnsConn.get_zone(myDomain+'.')
changes = route53.record.ResourceRecordSets(dnsConn,myZone.id)
add_change_args_upsert = {
    'action': 'UPSERT',
    'name': 'dev.'+myDomain+'.',
    'type': 'A',
    'alias_hosted_zone_id': elbZone,
    'alias_dns_name': elbName,
    'alias_evaluate_target_health': True
}
change = changes.add_change(**add_change_args_upsert)
result = changes.commit()
return result

错误:

result = changes.commit()
File "/Library/Python/2.7/site-packages/boto/route53/record.py", line 168, in commit
return self.connection.change_rrsets(self.hosted_zone_id, self.to_xml())
File "/Library/Python/2.7/site-packages/boto/route53/connection.py", line 475, in change_rrsets
body)
boto.route53.exception.DNSServerError: DNSServerError: 400 Bad Request
<?xml version="1.0"?>
<ErrorResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><Error>    <Type>Sender</Type><Code>InvalidChangeBatch</Code><Message>Tried to create an alias that targets <alias_dns_name>., type A in zone <alias_hosted_zone_id>, but the alias target name does not lie within the target zone</Message></Error><RequestId>afhh08-ckki9f2b5</RequestId></ErrorResponse>

感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

要获得正确的alias_hosted_zone_id,我进入控制台并手动创建区域,当我在字段中输入ELB DNS名称时,出现了alias_hosted_zone_id,所以我把它放进去了我的代码。希望这会有所帮助。

答案 1 :(得分:0)

对于遇到此错误的任何人,获取托管区域 ID 的正确方法因不同的目标类型而异。要查找正确的托管区域 ID,请转到 the official documentation,向下滚动到 HostedZoneId 并查找您的目标类型。

在这种特殊情况下,如果您使用的是 ALB 或 NLB,则需要所述 LB 的 CanonicalHostedZoneID 属性。如果是 Classic LB,则需要 CanonicalHostedZoneNameID 属性。