繁体   English   中英

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

[英]AWS Lambda - Invoke a method of another lambda function

我正在尝试从另一个 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_function2say_hello方法。 我怎么做? 默认情况下,它会尝试调用默认的 lambda_handler 方法

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

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 中的处理程序选项来完成。 在这种情况下 my_function2.say_hello 在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM