繁体   English   中英

从另一个 Lambda 调用 AWS Lambda function 超时错误

[英]Timeout error invoking AWS Lambda function from another Lambda

尝试从另一个 Lambda 调用 Lambda function 时出现超时错误。

我已按照我在另一篇文章中找到的以下步骤进行操作,但仍然无法正常工作。 使用这种方法,应该只给每个Lambda分配public su.net吗?

两个 Lambda 都可以独立运行成功,并且可以访问 Inte.net。

我还需要配置什么?

当前配置如下:

创建 2 个 Su.net,让一个表示为私人的,第二个表示为公共的(这些术语在前面解释,继续阅读)。 创建一个 Inte.net 网关 - 这是一个将 VPC 连接到 inte.net 的虚拟路由器。 创建一个 NAT 网关 - 选择公共 su.net 并为其创建一个新的弹性 IP(这个 IP 在你的 VPC 本地) - 这个组件将 pipe 通信到 inte.net-gateway。 创建 2 个路由表 - 一个名为 public,第二个为 private。

在公共路由表中,go 到 Routes 并添加一条新路由:Destination: 0.0.0.0/0

目标:inte.net-gateway 的 ID

在私有路由表中,go到Routes,添加一条新路由:Destination:0.0.0.0/0

target:nat-gateway的ID

私有 su.net 是在其路由表中没有到 inte.net 网关的路由的 su.net。

公共 su.net 是在其路由表中的 su.net - 存在到 inte.net 网关的路由

编辑:这两个 Lambda 在同一个安全组中——对吗? 我还测试了 Lambdas 可以成功连接到同一 VPC 中的 RDS 数据库。

这是我用来调用第二个 Lambda 的 Python:

try:
    invoke_response = lambda_client.invoke( 
        FunctionName='test_function',
        InvocationType='Event',
        LogType='None',
        Payload=json.dumps(test_payload),
    )
except Exception as invoke_error:
    print(invoke_error)

可能会出现许多问题,这些问题会触发 SDK 重试调用,最终可能会导致超时。

VPC 配置是其中之一,但我遇到的另一个是当所讨论的 Lambda 没有足够的权限调用另一个时。

确保您为需要调用另一个的 Lambda 准备了如下所示的 IAM 策略。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "LambdaInvoke",
            "Action": "lambda:InvokeFunction",
            "Effect": "Allow",
            "Resource": "<arn of other Lambda>"
        }
    ]
}

暂无
暂无

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

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