首页 > 编程问答 >如何从 python 脚本将事件和上下文传递到 AWS lambda?

如何从 python 脚本将事件和上下文传递到 AWS lambda?

时间:2024-07-28 15:51:48浏览次数:11  
标签:python amazon-web-services aws-lambda

我正在创建一个 cli 应用程序,我想用它来调用我的 AWS lambda 函数:

@click.group(context_settings={"help_option_names": ["-h", "--help"]}, invoke_without_command=True)
@click.version_option(version=__version__, prog_name="experiment")
def experiment():
    pass

@experiment.command()
def lambda():
    my_lambda_func(event, context) # Need to get event and context and store result

此 CLI 应用程序将安装在 docker 容器内。

因此,当我使用时:

experiment lambda

我的 lambda 代码将被执行。问题是我不知道如何获取事件和上下文对象 my_lambda_func 以及如何存储函数的结果。

这可能吗?互联网上唯一的资源只是使用直接函数名称


你不能直接从在 Docker 容器中运行的 Python 脚本传递 event context 对象到 AWS Lambda 函数。这些对象是 Lambda 执行环境提供的,并且仅在函数在 Lambda 中运行时可用。

但是,你可以模拟 event context 对象并将数据作为参数传递给你的 Lambda 函数。以下是如何执行此操作:

1. 修改你的 Lambda 函数以接收数据作为参数:

def my_lambda_func(event, context):
    # 从 'event' 对象中获取数据
    data = event.get('data') 

    # ...你的代码逻辑...

    return {
        'statusCode': 200,
        'body': 'Lambda 函数执行成功!'
    }

2. 从你的 CLI 应用程序中调用 Lambda 函数:

import json
import boto3

@experiment.command()
def lambda():
    # 创建一个模拟的 'event' 对象
    event = {
        'data': '一些数据'
    }

    # 创建一个 Lambda 客户端
    lambda_client = boto3.client('lambda')

    # 调用 Lambda 函数并传递 'event' 数据
    response = lambda_client.invoke(
        FunctionName='你的Lambda函数名称',
        InvocationType='RequestResponse',
        Payload=json.dumps(event)
    )

    # 处理 Lambda 函数的响应
    result = json.loads(response['Payload'].read().decode())
    print(result)

在这个更新后的代码中:

  • 我们创建一个模拟的 event 对象来存储要传递给 Lambda 函数的数据。
  • 我们使用 boto3 库来调用 Lambda 函数,传递序列化后的 event 对象作为 Payload
  • 我们从 Lambda 函数的响应中提取结果。

请记住:

  • '你的Lambda函数名称' 替换为你的实际 Lambda 函数名称。
  • 确保你的 Docker 容器具有执行 Lambda 函数所需的必要 AWS 凭证。
  • 你可以根据需要自定义 event 对象的结构来传递不同的数据。

通过这种方式,你可以在将数据发送到 Lambda 函数之前模拟 event 对象,并且仍然在 Lambda 函数内接收和使用该数据,即使它不是从 Lambda 环境中直接调用的。

标签:python,amazon-web-services,aws-lambda
From: 78803223

相关文章

  • 有没有办法检查是否有人提到@youtubechannelname并使用youtube数据api让Python脚本回
    标题解释了大部分内容。我的问题是,尽管到处搜索,但我没有找到任何有用的解决方案。AI和ChatGPT都无法对此提供帮助。不幸的是,YouTube数据API不提供直接监控频道提及或自动回复评论的功能。YouTube数据API主要用于检索和管理YouTube上的视频、评论和其他资源,而......
  • 如何在 Python 中从 Milesight TrafficX 摄像头、Post(MQTT、TCP/IP、HTTP) 获取数据?
    你好,祝你度过愉快的一天或一夜,我有这个MilesightTrafficX摄像头已启动并正在运行,仪表板中有一个名为POST的设置,您可以在下图中看到:我想要的是知道如何设置这些设置(基于实际上我的意思是)能够在我的Python代码中接收数据。无论协议如何,数据都将如下所示:......
  • 如何循环使用按钮输入,在python中的不同选项之间循环?
    我有一个循环,它采用三路开关输入并在相机开机时选择一个选项:#SetGPIOinputswitchColorOne=pyb.Pin("P9",pyb.Pin.IN,pyb.Pin.PULL_UP)switchColorTwo=pyb.Pin("P7",pyb.Pin.IN,pyb.Pin.PULL_UP)#SetcolorpalletebyswitchifswitchColorOne.value()==0:......
  • SSL 证书验证失败 - 雅虎财经 API - Python
    我正在尝试从雅虎财经获取数据,但收到SSL错误。代码如下:importrequestsresponse=requests.get("https://query1.finance.yahoo.com/v8/finance/chart/META",verify=True)print(response.status_code)出现以下错误:urllib3.exceptions.SSLError:[SSL:CERTIFICATE_......
  • 【学习笔记】Matlab和python双语言的学习(熵权法)
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、熵权法的基本概念二、熵权法的基本步骤1、构建决策矩阵2、数据标准化3、计算指标的比重4、计算信息熵5、计算权重6、计算综合得分三、代码实现----Matlab四、代码实现----python总结......
  • 【python】网络通信编程例子
    以下是一个简单的Python示例,展示了如何在Linux下使用套接字进行基本的网络通信,包括创建服务器和客户端。服务器端代码importsocket#创建一个IPv4TCP套接字server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#绑定服务器地址和端口server_addr......
  • 如何将Python版本从3.9降级到3.7?
    我正在开发RaspberryPi。这些是我的操作系统信息:pi@raspberrypi:~$uname-marmv7lpi@raspberrypi:~$cat/etc/os-releasePRETTY_NAME="RaspbianGNU/Linux11(bullseye)"NAME="RaspbianGNU/Linux"VERSION_ID="11"VERSION="11(bullseye)......
  • Python终端输出彩色字符方法
    colorama是一个python专门用来在控制台、命令行输出彩色文字的模块,完全兼容linux和windows各个版本。 1.Python3.x中安装colorama模块: pipinstallcolorama'''可用格式常数:【颜色RED,GREEN都需要大写】Fore:BLACK,RED,GREEN,YELLOW,BLUE,MAGENTA,CYAN,WHI......
  • 我无法安装 pygame 模块,所以我尝试观看视频,它告诉我这样做。在那个视频中他得到了 pyt
    c:\User\admin>piplistSyntaxError:unexpectedcharacterafterlinecontinuationcharacter我试图获取python模块列表,但出现语法错误出现SyntaxError:unexpectedcharacterafterlinecontinuationcharacter错误是因为你的用户名中包含一个特殊字符......
  • python第五节--conda命令
    这里写自定义目录标题基本命令环境管理包管理环境文件环境变量Conda配置高级操作常见问题基本命令检查Conda版本:conda--version更新Conda:condaupdateconda环境管理创建新环境:condacreate--namemyenv创建包含特定Python版本的新环境:conda......