2017-04-16 90 views
0

如何从aws lambda函数返回一个哈希值?aws lambda返回变量

使用boto3模块。

这里是我的代码剪断

def lambda_handler(event, context): 
    global cnt 
    any = [] 

    for node in ec2.instances.filter(Filters=[{'Name': 'instance-state-name', 'Values': ['running']}]): 

     inst= node.instance_type 
     any.append(inst) 
    cnt=collections.Counter(any) 
    return cnt 


for key, val in cnt.items(): 
    print key 
    print val 

精确的代码工作在Python IDE。我的目标是从AWS lambda函数返回一个变量,并在其他函数中使用相同的lambda函数。

错误的Lambda日志

module initialization error: global name 'cnt' is not defined 

回答

2

编辑:您添加的错误消息后,似乎这个问题根本就不是已宣布在顶部范围的全球性的。见this answer。相应地固定我的示例。

如果需要,AWS会将您的代码加载到容器中,然后调用Lambda Function Handler属性指示的方法。该函数可能会引发错误或返回数据,AWS将返回给调用方(例如:API网关方法)。

所以,例如你可以:

cnt = [] 

def lambda_handler(event, context): 
    global cnt 
    cnt = [{'id': 1, 'label': 'One'}, {'id': 2, 'label': 'Two'}] 
    print "cnt: {0!s}".format(cnt) 
    other_method() 
    return cnt 

def other_method(): 
    global cnt 
    print "cnt length is: {0!s}.format(len(cnt)) 
    return 

(我没进去AWS测试这个呢,所以一定要小心可能出现的错误) 不过,事实上,你可能也有lambda_handler方法将cnt变量作为参数传递给other_method。 或者创建一个类并调用其中的一些方法,并让该类将其作为自己的数据(例如:通过受保护的变量)管理变量cnt

保持记住全局可能会或可能不会连续调用任何给定lambda值之间生存英寸见Understanding Container Reuse in AWS Lambda

HTH

+1

谢谢,包含调用lamda函数的函数。有效 – Chucks

1

AWS会叫你定义拉姆达切入点,一旦返回,拉姆达过程将被终止。除非您的入口点调用这些函数,否则没有机会在其他函数中使用全局函数。如果其他功能正在由入口点调用,那么您可以通过cnt作为参数 - 不需要全局。如果其他函数没有被入口点调用,它们将不会被运行 - 仍然不需要全局:)