python - 如何使用云监视事件使用单个 lambda 创建和终止 EMR 集群
问题描述
我对此很陌生,我想每天在 0900 创建一个 emr 集群,并使用 cloudwatch 事件触发器在 1300 再次终止它。我希望通过一个 lambda(python) 来实现这一点,而不是创建 2 个 lambda,一个用于创建,一个用于终止。请帮帮我
import boto3
client = boto3.client('emr', region_name='us-east-1')
response = client.run_job_flow(
Name="Boto3 test cluster",
ReleaseLabel='emr-5.12.0',
Instances={
'MasterInstanceType': 'm4.xlarge',
'SlaveInstanceType': 'm4.xlarge',
'InstanceCount': 3,
'KeepJobFlowAliveWhenNoSteps': True,
'TerminationProtected': False,
'Ec2SubnetId': 'my-subnet-id',
'Ec2KeyName': 'my-key',
},
VisibleToAllUsers=True,
JobFlowRole='EMR_EC2_DefaultRole',
ServiceRole='EMR_DefaultRole'
)
我必须添加什么代码才能使其符合我的要求?提前致谢
解决方案
首先,您必须分别在计划 0900 和 1300 创建 2 个不同的 Cloudwatch 事件(使用 cron 表达式)。设置它们以触发您的 lambda。
修改您的 lambda 代码以处理事件信息并获取将具有您计划的规则名称的“资源”。
现在基于该值运行您的代码。
import boto3
client = boto3.client('emr', region_name='us-east-1')
def lambda_handler(event, context):
rule_name = event["Records"][0]["resources"].split("/")[-1]
if rule_name == 'crete_emr_rule':
response = client.run_job_flow(
Name="Boto3 test cluster",
ReleaseLabel='emr-5.12.0',
Instances={
'MasterInstanceType': 'm4.xlarge',
'SlaveInstanceType': 'm4.xlarge',
'InstanceCount': 3,
'KeepJobFlowAliveWhenNoSteps': True,
'TerminationProtected': False,
'Ec2SubnetId': 'my-subnet-id',
'Ec2KeyName': 'my-key',
},
VisibleToAllUsers=True,
JobFlowRole='EMR_EC2_DefaultRole',
ServiceRole='EMR_DefaultRole'
)
elif rule_name = "Terminate emr rule":
list_emr = client.list_clusters(
CreatedAfter=datetime(2021, 1, 1)# use time/date function to get these values
CreatedBefore=datetime(2021, 1, 1),
ClusterStates=['WAITING'],
)
cluster_id = list_emr['Clusters'][0][Id]
client.terminate_job_flows(JobFlowIds=[cluster_id])
推荐阅读
- python - 如何将网格转换为数据框中的 1 列并使其高效
- ios - 带有有效详细信息的 iOS 应用程序中的 Okta 身份验证失败
- kubernetes - 使用 Kubernetes 故障域进行灾难恢复
- angular - 输入角度时更改文本颜色
- rhapsody - 被调用的Activity不能接受事件
- database - 如何将极光无服务器数据库连接到 HeidiSql?
- hibernate - 在应用程序关闭时删除没有后备域类的表
- microsoft-cognitive - 使用 Microsoft Translator 进行错误的自动语言检测
- android - 任务中的 Flutter 构建错误:app:copyFlutterAssetsDebug
- laravel - Laravel/Lumen 迁移表 SQLSTATE [42000] 的表名不正确