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

Posted

技术标签:

【中文标题】AWS Lambda - 调用另一个 lambda 函数的方法【英文标题】:AWS Lambda - Invoke a method of another lambda function 【发布时间】:2020-03-23 03:09:40 【问题描述】:

我试图从另一个 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 方法

【问题讨论】:

这能回答你的问题吗? Nodejs - Invoke an AWS.Lambda function from within another lambda function @vaquarkhan 这有点帮助,但没有回答我的问题。但是 jimmone 和 Branson Smith 已经回答了我的问题。感谢您的宝贵时间。 这里的意图是一次又一次地避免同样的问题,只有一个答案会帮助大家,很高兴你找到了答案 【参考方案1】:

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

【讨论】:

谢谢 jimmone【参考方案2】:

Lambda 函数始终通过处理函数输入。这就像“主要方法”。每个 Lambda Function 都是自己的应用程序,拥有自己的资源,因此当您在它们之间进行协调时,您总是会通过 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

【讨论】:

谢谢布兰森。

以上是关于AWS Lambda - 调用另一个 lambda 函数的方法的主要内容,如果未能解决你的问题,请参考以下文章

AWS Lambda 无法调用没有 VPC 的另一个 AWS Lambda - NodeJs

AWS lambda 函数调用另一个带参数的 lambda 函数

如何在另一个 lambda 之后执行 AWS lambda

AWS CloudFormation:如何为 Lambda 代码指定来自另一个 AWS 账户的存储桶?

AWS CloudFormation:如何从另一个AWS账户为Lambda代码指定存储桶?

另一个账户中来自 Lambda 的 AWS 跨账户 S3 PutObject