问题描述
我有一个用例,我需要创建一个 AWS glue Crawler 来爬取存储在 S3 中的一些数据,启动爬虫,然后在爬取完数据后删除爬虫。
我遇到的困境是,爬虫可能需要很长时间才能完成,有时需要 20-30 分钟才能完成对实际数据的爬取,然后才能将其删除。
最初我打算用 AWSglueAsyncclient 来解决这个问题,这样我就不会阻塞调用线程 20-30 分钟,我只需编写一个回调,这样当爬虫完成时,它会立即被删除。
这样做的问题是,如果服务器在 20 到 30 分钟的时间内出现故障或中断,爬虫程序将不会再将其删除。
什么是持久化爬虫删除步骤的好方法,这样即使服务器宕机,它仍然会在重新启动后尝试删除爬虫?数据库似乎有点矫枉过正。
解决方法
您可以设置 EventBridge rule 以在爬虫完成时触发 lambda 函数。然后该函数将删除爬虫。示例规则是:
{
"source": [
"aws.glue"
],"detail-type": [
"Glue Crawler State Change"
],"detail": {
"state": [
"Succeeded"
]
}
}