似乎change_resource_record_sets方法需要Name(例如myhost.mydomain.com)和记录的目标值(例如123.123.123.123)才能执行'Action': 'DELETE'
,但是目标IP已从终止的实例中删除,因此似乎资源记录的完整查找需要完整的list_resource_record_sets扫描才能获取该信息。
是否有一种首选方法来获取已终止实例的ip,或者在不知道boto3 / aws sdk中的ip的情况下删除记录?
详细信息:我有一个自动扩展组,它维护3个实例,以及一个在终止自动扩展实例时触发的python lambda。在创建实例期间,创建了route53 A记录,该记录与vpc私有IP地址匹配,如下所示;
instance_id: i-0bfced710f9c11867
创建route53记录:
{'Name': 'webXXX-dev-euwest1-0bfced710f9c11867-mydomain.com.',
'ResourceRecords': [{'Value': '10.69.98.116'}],
'TTL': 60,
'Type': 'A'}
但是,当实例终止时,实例的私有和公共ipv4字段在lambda事件中(以及在控制台中的已终止实例上)未设置。因此,为了使用change_resource_record_sets方法,我需要从其他地方提供IP地址;
def delete_route53(host,ip):
route53.change_resource_record_sets(
HostedZoneId=hostedzoneid,
ChangeBatch={
'Changes': [
{
'Action': 'DELETE',
'ResourceRecordSet': {
'Name': host,
'Type': 'A',
'TTL': 60,
'ResourceRecords': [
{
'Value': ip
}
]
}
}
]
}
)
所以目前我必须查找记录才能将其删除;
response = route53.list_resource_record_sets(
HostedZoneId=hostedzoneid,
StartRecordType='A',
StartRecordName=domain,
MaxItems="10"
)
和一堆代码,用于为DELETE操作重新创建Name和ResourceRecords。这似乎有点迂回,并且由于远程呼叫(费用很高)而在lambda中很慢
是否有更简单的方法来删除该记录?
答案 0 :(得分:0)
使用标签解决了同样的问题。当新实例启动时,它会使用自己的IP地址进行标记。然后在终止时我们只解析标签并使用它来删除Route53主机记录。已终止的实例记录可用约30分钟,因此对我们来说工作正常。
要记住一件事,如果您正在使用弹性IP,这将无法正常工作。弹性IP附加到实例时没有任何事件,因此您需要延迟触发器,否则最终会在标签中使用非弹性IP。