如何在不知道AWS lambda中目标IP的情况下删除路由53记录



change_resource_record_sets方法似乎需要Name(例如myhost.mydomain.com)和记录的目标值(例如123.123.123.123)来执行'Action': 'DELETE',但是目标IP已从终止的实例中删除,因此对资源记录的完整查找似乎需要完整的list_resource_record_sets扫描才能获得该信息。

有没有一种首选方法可以获得终止实例的ip,或者在不知道boto3/aws sdk中ip的情况下删除记录?

detail:我有一个维护3个实例的自动缩放组,以及一个在自动缩放实例终止时触发的python lambda。在创建实例的过程中,创建了一个route53与vpc私有ip地址匹配的记录,如下所示;

instance_id: i-0bfced710f9c11867

创建路线53记录:

{'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中速度较慢

有没有更简单的方法可以删除该记录?

使用标签解决了相同的问题。当一个新实例启动时,它会用自己的ip地址进行标记。然后在终止时,我们只需解析标签并使用它来删除Route53主机记录。终止的实例记录可以使用大约30分钟,所以这对我们来说很好。


需要记住的一件事是,如果您使用弹性IP,这将不起作用。弹性IP连接到实例时没有事件,因此您需要延迟触发器,否则标签中会出现非弹性IP。

相关内容

最新更新