似乎change_resource_record_sets方法需要名稱(例如myhost.mydomain.com)和記錄的目標值(例如123.123.123.123)執行'Action': 'DELETE'
,但目標IP從終止的實例中刪除,因此它似乎資源記錄的完整查找需要完整的list_resource_record_sets掃描來獲取該信息。如何刪除路由53 AWS lambda中不知道目標IP的記錄?
有沒有一種首選的方法來獲取終止實例的IP,或刪除記錄而不知道ip在boto3/aws sdk中?
詳細信息:我有一個自動縮放組,它維護3個實例,並且在終止自動縮放實例時觸發一個python lambda。在創建實例的過程中,創建一個與vpc私有IP地址相匹配的Route53 A記錄,如下所示;
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中緩慢
是否有更簡單的方法來刪除該記錄?
終止的實例記錄可用~30分鐘,所以這對我們來說工作得很好。呃......這個問題,ofc,是你依賴於終止的信息,而不是垃圾回收,集。感覺像在*終止它之前獲取這些信息*然後將它放在永久性的地方(例如一個DynamoDB表或其他東西)比較容易,在那裏你只刪除它*在*你確定相關的Route 53記錄已被刪除。 –
當然,但這是工作的兩倍:新的DynamoDB表,需要足夠的讀/寫容量,您的lambda函數現在需要插入相關信息等。但通常我同意,這可能會更好,我肯定會去對於任何對您/您的業務至關重要的事情來說,這條路線都是可行的 – knrdk