【发布时间】:2020-09-16 05:16:38
【问题描述】:
我试图弄清楚如何在提交给它的所有步骤都是'COMPLETED'|'CANCELLED'|'FAILED'|'INTERRUPTED' 后成功终止 EMR 集群。共有三个 Lambda 函数。
- Lambda 1:做一些工作并创建 EMR。通过事件传递步骤和集群 ID 来触发 Lambda 2。
- Lambda 2:将从 Lambda 1 收到的步骤提交到从 Lambda 1 收到的集群 ID。
- Lambda 3:提交最后一步,然后在所有步骤均为
'COMPLETED'|'CANCELLED'|'FAILED'|'INTERRUPTED'时发送终止请求。
我已经完成了 Lambda 3 的步骤提交,但无法完成其余的工作。
我已通过以下方式成功创建 EMR:
conn = boto3.client("emr")
cluster_id = conn.run_job_flow()
提交的步骤:
conn = boto3.client("emr")
action = conn.add_job_flow_steps(JobFlowId=cluster_id, Steps=event["steps"])
现在如何仅在给定条件下触发此终止?我看到boto3 API doc有client.terminate_job_flows(),但是这个函数不等待步骤完成或失败,直接命中终止进程。
完成所有步骤后,有没有办法将 KeepJobFlowAliveWhenNoSteps 从 TRUE 更改为 FALSE?然后我认为它应该自动关闭集群。但是通过 API 文档,一旦调用 run_job_flow(),就没有找到任何更改此参数的选项。
希望我能够正确传达我面临的问题。有什么帮助吗?
注意:在 AWS Lambda 中使用 Python 3.8。每个步骤都是 Spark 作业。
【问题讨论】:
标签: python-3.x amazon-web-services aws-lambda amazon-emr aws-step-functions