我想在一个AWS Lambda函数中编写两个函数。目前,如果我的代码中有两个函数,然后如何进行更改,Lambda便会使用该处理函数触发该函数,以便Lambda处理程序可以执行这两个函数。
我找到了。但是,它正在使用if语句。在我的场景中,我将必须一个接一个地运行这两个功能,并将第一功能的输出传递给第二功能。谢谢 How to have more than one handler in AWS Lambda Function?
这是示例代码:
import boto3' import json' from datetime
import datetime REGION = 'us-east-1'
emrclient = boto3.client('emr', region_name=REGION)
def lambda_handler(event, context):
EMRS = emrclient.list_clusters( ClusterStates = ['STARTING', 'RUNNING', 'WAITING', 'TERMINATING'] )
clusters = EMRS["Clusters"]
for cluster in clusters :
ID = cluster.get("Id")
EMRid = emrclient.list_instance_groups( ClusterId = str("ID") )
print(EMRid)
答案 0 :(得分:2)
如果没有关于用例的更多信息,很难说说最好的解决方案是什么,但是AWS Step Functions旨在处理运行多个lambda,并以健壮的方式(重试,并行化等)在它们之间传递数据。
This blog post提供了很好的概述,尽管示例中的代码是JavaScript而不是Python。
答案 1 :(得分:0)
您不需要其他功能即可实现列出的示例。也就是说,假设您需要在instance_groups字典上添加其他处理/功能,则可以从这里开始。如果您有50个或更少的集群,这应该可以工作:
import boto3
import json
import datetime
emrclient = boto3.client('emr', region_name='us-east-1')
def lambda_handler(event, context):
EMRS = emrclient.list_clusters(ClusterStates=['STARTING', 'RUNNING', 'WAITING', 'TERMINATING'])
for cluster in EMRS['Clusters']:
emr_inst_grp_work(cluster['Id'])
def emr_inst_grp_work(cluster_id):
"""Get instance group details dict for given cluster id"""
inst_dict = emrclient.list_instance_groups(ClusterId = cluster_id)
print(inst_dict)
# ADD code for additional dict or cluster work/processing here