如何在VSCode的Python代码中调用已有的AWS Lambda函数?
调用AWS Lambda函数的等效boto3代码
我完全懂你的需求——你不需要那些关于本地开发、测试Lambda或者AWS Toolkit的教程,只想直接调用已经存在的Lambda函数,就像你用boto3操作DynamoDB那样。这里直接给你对应的等效代码,还有关键细节说明:
基础调用示例
和你操作DynamoDB的思路一致,用boto3创建Lambda客户端,然后调用invoke方法就能实现:
import boto3 import json # 创建Lambda客户端 lambda_client = boto3.client('lambda') # 定义要调用的Lambda函数标识(可以是函数名、完整ARN,或者别名/版本ARN) function_name = "你的Lambda函数名或ARN" # 构造传递给Lambda的事件数据(对应Lambda函数里的event参数) payload = { "param1": "你要传递的参数1", "param2": "你要传递的参数2" } # 发起Lambda调用请求 response = lambda_client.invoke( FunctionName=function_name, Payload=json.dumps(payload).encode('utf-8') # 必须转为字节格式的JSON字符串 ) # 解析Lambda返回的结果 result = json.loads(response['Payload'].read().decode('utf-8')) print(result)
关键细节拆解
- FunctionName参数:支持多种格式,比如直接写函数名
my-function,或者用完整ARNarn:aws:lambda:us-east-1:123456789012:function:my-function,甚至可以指定别名/版本my-function:prod(调用prod别名对应的函数版本)。 - Payload参数:Lambda函数接收的
event参数本质是JSON解析后的对象,所以这里需要把Python字典先转成JSON字符串,再编码成字节流,才能被正确识别。 - 返回结果处理:
response['Payload']是一个可读取的流对象,需要先通过read()获取字节内容,解码成字符串后,再用json.loads转成Python对象,这就是Lambda函数返回的最终数据。
权限注意事项
执行这段代码的实体(比如本地机器的IAM用户、EC2实例的IAM角色、另一个Lambda的执行角色)必须拥有lambda:InvokeFunction权限,否则会抛出权限错误。你需要在对应的IAM策略中添加类似这样的语句:
{ "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:你的AWS区域:你的账号ID:function:你的函数名" }
内容的提问来源于stack exchange,提问作者greeneye12




