【问题标题】:launching AND terminating EMR cluster with boto3 on AWS Lambda在 AWS Lambda 上使用 boto3 启动和终止 EMR 集群
【发布时间】:2020-10-22 20:43:59
【问题描述】:

我的情况如下。我想在工作时间启动一个集群,并在 18:00 和周末之后终止它。这些集群将用于数据科学项目。几年前,我们会为此使用无聊的 crontab,但现在我更喜欢使用 lambda 函数。

在 boto3 中,我可以启动一个集群(感谢 Jose Quinteiro),这篇文章很好地描述了它How to launch and configure an EMR cluster using boto

如何在 boto3 中以与启动它的位置相同的 lambda 函数终止集群?

【问题讨论】:

    标签: amazon-web-services aws-lambda emr launch


    【解决方案1】:

    使用 AWS CloudWatch 事件/规则和 AWS Lambda 函数检查空闲 EMR 集群,您就可以完成目标。您可以在 AWS 控制台级别上实现可见性,并且可以轻松启用和禁用它。

    考虑到这一点,我开发了一个小框架来使用上面提到的第二个解决方案来实现这一点。此框架是一个使用 AWS CloudWatch 和 AWS Lambda 的基于 AWS 的解决方案,使用 Python 脚本,该脚本使用 Boto3终止在指定时间段内空闲的 AWS EMR 集群 .

    指定最大空闲时间阈值,AWS CloudWatch 事件/规则会触发一个 AWS Lambda 函数,该函数会查询所有处于 WAITING 状态的 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】:

      您可以在 cloudwatch 中创建一个scheduled event 来触发您正在使用的 lambda。

      计划事件使用 Cron 表达式,因此您可以应用相同的逻辑。一旦你的函数被触发,你需要从事件输入中确定它是一个关闭触发器。

      【讨论】:

        【解决方案3】:

        您可以通过使用 boto3 来终止集群

        emr_client = boto3.client('emr') emr_client.terminate_job_flows(JobFlowIds=[#replace it with cluster Id you want it close ])

        【讨论】:

        • 这篇文章已经很老了,但要跳进去。我们现在有一个由 cloudwatch 调度的 lambda,它在我们的工作后杀死 EMR 集群。像魅力一样工作:)
        猜你喜欢
        • 2016-02-19
        • 2019-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-28
        • 1970-01-01
        相关资源
        最近更新 更多