我的情况如下。我想在工作时间启动集群,并在18:00和周末之后终止集群。这些集群将用于数据科学项目。多年前我们会使用一个无聊的crontab,但是现在我更喜欢使用lambda函数。
在boto3中我可以启动一个集群(感谢Jose Quinteiro),这篇文章很好地描述了How to launch and configure an EMR cluster using boto
如何在与我启动它相同的lambda函数中终止boto3中的集群?
答案 0 :(得分:0)
您可以在cloudwatch中创建一个scheduled event来触发您正在使用的lambda。
计划事件使用Cron表达式,因此您可以应用相同的逻辑。触发功能后,您需要确定它是事件输入的关闭触发器。
答案 1 :(得分:0)
使用 AWS CloudWatch事件/规则和AWS Lambda函数检查空闲的EMR集群,即可完成目标。您可以在AWS控制台级别获得可见性,并且可以轻松地启用和禁用它。
考虑到这一点的需要,我开发了一个小框架来使用上述第二种解决方案来实现这一目标。该框架是使用AWS CloudWatch和AWS Lambda 的基于AWS的解决方案,使用Python脚本,该脚本使用Boto3 终止在指定时间段内空闲的AWS EMR集群 。
您指定最大空闲时间阈值,并且AWS CloudWatch事件/规则触发一个AWS Lambda函数,该函数查询处于“等待”状态的所有AWS EMR集群,并针对每个集群将当前时间与AWS EMR集群的就绪时间进行比较到目前为止尚未添加任何EMR步骤的时间,或者将当前时间与AWS EMR集群的最后一步的结束时间进行比较。如果阈值已被破坏,则在取消终止保护(如果启用)后将终止AWS EMR。如果没有,它将跳过该AWS EMR集群。
AWS CloudWatch事件/规则将确定AWS Lambda函数的频率应检查空闲的AWS EMR集群。
您随时可以禁用 AWS CloudWatch事件/规则,只需单击一次即可禁用此框架,而无需删除其AWS CloudFormation堆栈
AWS Lambda函数使用 Python 3.7 作为其运行时环境。
对于您而言,在创建堆栈时,您可以在几分钟内指定所需的Cron表达式和最大空闲EMR群集阈值。
您可以从以下网址的 GitHub 获取代码并使用它:https://github.com/abdullahkhawer/auto-terminate-idle-emr
对该解决方案的任何贡献,改进和建议,将受到高度赞赏。 :)
答案 2 :(得分:0)
您可以使用bop3终止集群,方法是使用
emr_client = boto3.client('emr') emr_client.terminate_job_flows(JobFlowIds = [#将其替换为您要关闭的集群ID)]