Boto3 & moto - Route53 创建 dns 记录集时出错,找不到托管区域
Boto3 & moto - Route53 error creating dns record set, it can't find the hosted zone
我在使用 Boto3 和模拟 AWS 的 moto 库时遇到了一些问题。
我正在创建这样的托管区域:
@moto.mock_route53
def create_dns_zone(route53_client, vpc, name='test.'):
hosted_zone = route53_client.create_hosted_zone(
Name=name,
VPC={'VPCId': vpc.vpc_id},
CallerReference=str(hash('test')),
HostedZoneConfig=dict(
PrivateZone=True,
Comment="testing zone",
)
)
return hosted_zone
vpc对象和route53_client对象创建在同一区域。我像这样更改了 vpc 对象的一些属性:
ec2.modify_vpc_attribute(
EnableDnsHostnames={'Value': True}, EnableDnsSupport={'Value': True}, VpcId=vpc.vpc_id
)
create_dns_zone
函数returns这个对象:
然后我尝试在 AWS 中创建 dns 注册表:
@moto.mock_route53
def create_dns(client_route53, zones, total_dns=1):
# zones is the hosted zone object
hosted_zone_id = session.get_hosted_zone(Id=zones.get('HostedZone').get('Id'))
changes_dns = []
for index in range(total_dns):
index += 1
data_dns = dict(
Action='CREATE',
ResourceRecordSet=dict(
Name='dns-test.{index}.testing.internal'.format(index=index),
Type='A',
TTL=30,
ResourceRecords=[{'Value': '10.10.0.1{index}'.format(index)}]
)
)
changes_dns.append(data_dns)
return client_route53.change_resource_record_sets(
HostedZoneId=hosted_zone_id,
ChangeBatch=dict(
Comment='testing dns',
Changes=changes_dns
)
)
因此,当我想在 route53 dns 服务器名称中创建一个条目时,它会抛出此异常:
Exception: An error occurred (404) when calling the GetHostedZone operation: Not Found
并在错误日志中向下滚动:
botocore.parsers.ResponseParserError: Unable to parse response (syntax error: line 1, column 0), invalid XML received:
b'Zone VINSTS51LDMLEAA not Found'
如果我调用函数 list_hosted_zones()
它 returns 一个空列表。
我是不是做错了什么?或者错过了什么?
非常感谢。
moto AWS 模拟实现没有 100% 的覆盖率。在这种情况下,route53 只有 12% implemented。
我认为这是你的问题。
我在使用 Boto3 和模拟 AWS 的 moto 库时遇到了一些问题。
我正在创建这样的托管区域:
@moto.mock_route53
def create_dns_zone(route53_client, vpc, name='test.'):
hosted_zone = route53_client.create_hosted_zone(
Name=name,
VPC={'VPCId': vpc.vpc_id},
CallerReference=str(hash('test')),
HostedZoneConfig=dict(
PrivateZone=True,
Comment="testing zone",
)
)
return hosted_zone
vpc对象和route53_client对象创建在同一区域。我像这样更改了 vpc 对象的一些属性:
ec2.modify_vpc_attribute(
EnableDnsHostnames={'Value': True}, EnableDnsSupport={'Value': True}, VpcId=vpc.vpc_id
)
create_dns_zone
函数returns这个对象:
然后我尝试在 AWS 中创建 dns 注册表:
@moto.mock_route53
def create_dns(client_route53, zones, total_dns=1):
# zones is the hosted zone object
hosted_zone_id = session.get_hosted_zone(Id=zones.get('HostedZone').get('Id'))
changes_dns = []
for index in range(total_dns):
index += 1
data_dns = dict(
Action='CREATE',
ResourceRecordSet=dict(
Name='dns-test.{index}.testing.internal'.format(index=index),
Type='A',
TTL=30,
ResourceRecords=[{'Value': '10.10.0.1{index}'.format(index)}]
)
)
changes_dns.append(data_dns)
return client_route53.change_resource_record_sets(
HostedZoneId=hosted_zone_id,
ChangeBatch=dict(
Comment='testing dns',
Changes=changes_dns
)
)
因此,当我想在 route53 dns 服务器名称中创建一个条目时,它会抛出此异常:
Exception: An error occurred (404) when calling the GetHostedZone operation: Not Found
并在错误日志中向下滚动:
botocore.parsers.ResponseParserError: Unable to parse response (syntax error: line 1, column 0), invalid XML received:
b'Zone VINSTS51LDMLEAA not Found'
如果我调用函数 list_hosted_zones()
它 returns 一个空列表。
我是不是做错了什么?或者错过了什么?
非常感谢。
moto AWS 模拟实现没有 100% 的覆盖率。在这种情况下,route53 只有 12% implemented。 我认为这是你的问题。