如何使用Boto 3获取域的托管区域?

时间:2017-02-24 19:04:58

标签: amazon-web-services boto3 amazon-route53

Boto 2中,我可以获得与域名domain相关联的托管区域

r53_2 = boto.route53.connection.Route53Connection()
hz = r53_2.get_zone(domain)

但在Boto 3中,corresponding API需要ID而不是域名

r53_3 = boto3.client('route53')
hz = r53_3.get_hosted_zone(id)

而且我没有看到任何方法从域名中获取ID,这是我有权访问的。

如何使用Boto 3获取域的托管区域?

3 个答案:

答案 0 :(得分:2)

我目前无法对此进行测试,但您可以使用 .list_hosted_zones()

您需要解析结果,但这是一个开始。

RL

答案 1 :(得分:1)

list_hosted_zones_by_name 有点误导性:它仍会返回一个列表,但是具有DNSName的记录将首先列出。注意:如果该记录不存在,它将以字母顺序返回下一条记录(我认为),因此在列表中获取第一条记录并不能保证它是您想要的。这是对我有用的东西:

import boto3, json

client = boto3.client('route53')
dnsName = 'example.com' 
response = client.list_hosted_zones_by_name(
    DNSName=dnsName, 
    MaxItems='1'
)
print(json.dumps(response, indent=4)) # inspect output
if ('HostedZones' in response.keys()
    and len(response['HostedZones']) > 0
    and response['HostedZones'][0]['Name'].startswith(dnsName)):
    hostedZoneId = response['HostedZones'][0]['Id'].split('/')[2] # response comes back with /hostedzone/{HostedZoneId}
    print('HostedZone {} found with Id {}'.format(dnsName, hostedZoneId))
else:
    print('HostedZone not found: {}'.format(dnsName))

答案 2 :(得分:0)

也许这个例子会有所帮助...

    r53 = boto3.client('route53')
    zones = r53.list_hosted_zones_by_name(DNSName=domain)
    if not zones or len(zones['HostedZones']) == 0:
        raise Exception("Could not find DNS zone to update")
    zone_id = zones['HostedZones'][0]['Id']