在单个AWS Lambda中使用两个python函数boto3

时间:2019-01-30 03:01:28

标签: python amazon-web-services lambda aws-lambda boto3

我想在一个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)

2 个答案:

答案 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