我正在try 使用boto3 SDK在另一个Lambda函数中异步调用AWS lambda函数.调用是使用以下代码片段完成的:

lambda_client = boto3.client('lambda')
response = lambda_client.invoke(
    FunctionName='async_function:alias', InvocationType="Event",
    Payload=json.dumps({'id': '101932092', 'type': 'type', 'sub_type': 'subtype'})
)

我遇到的问题是,调用函数有时会在上面的代码块超时(15分钟).这种行为是间歇性的,没有明确的模式.

通过判断相关指标,我已经排除了调用函数上的并发性和节流问题.然而,即使Invoke调用应该将事件放入用于异步处理的事件队列中(根据AWS Lambda documentation),调用函数也会超时,而不提供成功或错误响应.

任何见解或建议,解决问题,这将是非常感谢.

推荐答案

这种间歇性连接最有可能的原因是您的Lambda功能已配置用于vPC访问,并且您 Select 了私有和公有子网的混合.

修复方法是仅为专用子网配置Lambda功能,或者,如果您的Lambda功能只需要访问AWS服务,则为您需要访问的AWS服务配置vPC端点.

Lambda功能间歇性失败的原因是,根据Lambda服务做出的放置决策,它有时在私有子网中运行,而在其他时间在公共子网中运行.当Lambda函数在公共子网中执行时,它没有通往互联网或AWS服务的网络路由.这样做的原因是:

  1. Lambda函数有内网IP,但没有公网IP
  2. 公有子网中流量的默认路由是Internet Gateway,它会丢弃来自内网IP的流量(因为它们在Internet上不可路由)
  3. 专用子网中流量的默认路由(如果正确设置为到达互联网)是NAT或NAT网关,它允许私有IP流量被NAT到公共IP(NAT设备的公共IP),因此该流量可以到达互联网

另外,请看Why can't an AWS lambda function inside a public subnet in a VPC connect to the internet

Python相关问答推荐

如何在vercel中指定Python运行时版本?

如何在矩阵上并行化简单循环?

替换字符串中的点/逗号,以便可以将其转换为浮动

将numpy矩阵映射到字符串矩阵

使用matplotlib pcolormesh,如何停止从一行绘制的磁贴连接到上下行?

分组数据并删除重复数据

如何使用symy打印方程?

计算组中唯一值的数量

Python,Fitting into a System of Equations

为什么抓取的HTML与浏览器判断的元素不同?

多处理队列在与Forking http.server一起使用时随机跳过项目

从嵌套的yaml创建一个嵌套字符串,后面跟着点

使用Python从URL下载Excel文件

在matplotlib中删除子图之间的间隙_mosaic

如何在Python中使用Pandas将R s Tukey s HSD表转换为相关矩阵''

如何使regex代码只适用于空的目标单元格

在Admin中显示从ManyToMany通过模型的筛选结果

Pandas—堆栈多索引头,但不包括第一列

pandas:在操作pandora之后将pandora列转换为int

什么是一种快速而优雅的方式来转换一个包含一串重复的列,而不对同一个值多次运行转换,