我正在尝试使用python boto' 2.38.0'
将现有的alias_dns_name更新为不同的新elbdef 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>
感谢任何帮助!
答案 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 属性。