【问题标题】:Unable to invoke second Lambda from first with enabled VPC无法使用启用的 VPC 从第一个 Lambda 调用第二个 Lambda
【发布时间】:2020-10-09 13:49:58
【问题描述】:

我正在尝试从另一个调用 AWS Lambda 函数。但是在使用 Lambda 添加 VPC 后,我收到此错误:

发送请求失败的原因是:发布“https://lambda.ap-southeast-1.amazonaws.com/2015-03-31/functions/seconda_lambda/invocations”

函数如下:


_invoke_copier_lambda(map[string]string{
   "parameter1" : "param_val",
})

func _invoke_copier_lambda(params map[string]string) error {
    // Marshal the map into a JSON string.
    bytes__data, err := json.Marshal(params)
    if err != nil {
        return err
    }

    jsonStr := string(bytes__data)
    svci := sLambda.New(session.New())
    input := &sLambda.InvokeInput{
        FunctionName: aws.String(config.CopierLambdaName),
        Payload:      []byte(jsonStr),
    }

    _, err = svci.Invoke(input)
    return err
}

我错过了什么?

【问题讨论】:

  • 第一个 Lambda 函数是否连接到 VPC?如果有,它是连接到公共子网还是私有子网,VPC 中是否有 NAT 网关?
  • 是的,两个 lambda 函数连接在同一个 VPC 公有子网中。还有一个用于 VPC 的 NAT 网关。

标签: amazon-web-services aws-lambda amazon-vpc


【解决方案1】:

AWS Lambda 的 API 终端节点位于 Internet 上。因此,调用 Lambda 函数需要访问 Internet。

您的 Lambda 函数似乎位于公共子网中。这意味着他们确实没有可以访问互联网。为了能够与 Internet 通信,AWS Lambda 函数必须:

  • 配置为使用 VPC,
  • 配置为连接到 VPC 中的私有子网,并且该 VPC 在公有子网中有 NAT 网关或 NAT 实例。此外,私有子网的路由表指向 NAT 网关/NAT 实例。

Lambda 目的地

实际上,一个 Lambda 函数可以通过使用Lambda Destinations 功能来触发另一个 Lambda 函数。当第一个 Lambda 函数完成时,它可以触发另一个 Lambda 函数作为目标。这确实不需要需要 Internet 访问,因为它由 AWS Lambda 服务本身处理(而不是调用 API)。请注意,只有当第一个函数被异步触发时,Destinations 才可用。

见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    • 2020-10-23
    • 2020-11-08
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多