AWS Lambda-调用另一个lambda函数的方法

时间:2019-11-27 14:22:03

标签: aws-lambda

我正在尝试从另一个lambda调用一个不同于默认处理程序方法的方法。但是却没有怎么做。从文档中尚不清楚。这是我的代码

Lambda函数1: my_function1

import json
import boto3

def lambda_handler(event, context):
    lambda_inv = boto3.client("lambda", region_name="us-east-1")
    payload = {"message":"Hi From my_function1"}
    lambda_inv.invoke(FunctionName='arn:aws:lambda:us-east-1:1236547899871:function:my_function2', 
                        InvocationType='Event', Payload=json.dumps(payload))


Lambda函数2: my_function2

import json

def lambda_handler(event, context):
    # TODO implement
    print("lambda_handler")

def say_hello(event, context):
    print("From say_hello function")
    print(str(event))
    print("say_hello end")

我想从lambda my_function1 中调用lambda my_function2 say_hello 方法。我怎么做?默认情况下,它尝试调用默认的lambda_handler方法

2 个答案:

答案 0 :(得分:2)

每个lambda函数只能有一个处理程序。您可以做的是在处理程序中使用一些if-logic,以根据事件在同一lambda中调用不同的函数。

答案 1 :(得分:1)

Lambda函数始终通过处理程序函数输入。这就像“主要方法”。每个Lambda函数都是其自己的应用程序,具有自己的资源,因此在它们之间进行协调时,您将始终通过main(处理程序)进入该函数,然后可以在其他任何地方使用

请记住,每个Lambda在被调用之间都会丢失其所有资源(内存和CPU),因此它将始终在每次调用时从处理程序中重新启动。

要使用say_hello函数,您需要在处理程序中使用某些if语句,例如@jimmone描述的。像这样:

def lambda_handler(event, context):
    lambda_inv = boto3.client("lambda", region_name="us-east-1")
    payload = {
        "message":"Hi From my_function1", 
        "request": "say_hello"
    }
    lambda_inv.invoke(FunctionName='arn:aws:lambda:us-east- 1:1236547899871:function:my_function2', 
                        InvocationType='Event', Payload=json.dumps(payload))


def lambda_handler(event, context):
    # TODO implement
    print("lambda_handler")
    if event['request'] == 'say_hello':
        return say_hello(event, context)

def say_hello(event, context):
    print("From say_hello function")
    print(str(event))
    print("say_hello end")

如果您只想更改处理程序的名称,可以通过在AWS Lambda中编辑Handler选项来完成。在这种情况下,my_function2.say_hello enter image description here