无法使用启用的 VPC 从第一个调用第二个 Lambda

Unable to invoke second Lambda from first with enabled VPC

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

send request failed caused by: Post "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
}

我错过了什么?

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

您的 Lambda 函数似乎位于 public 子网中。这意味着他们无法 访问互联网。为了能够与 Internet 通信,AWS Lambda 函数必须:

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

Lambda 目的地

实际上,有一种使用 Lambda Destinations 功能让一个 Lambda 函数触发另一个 Lambda 函数的替代方法。当第一个 Lambda 函数完成时,它可以触发另一个 Lambda 函数作为目标。这 不需要 访问互联网,因为它由 AWS Lambda 服务本身处理(而不是调用 API)。请注意,Destinations 仅在第一个函数被触发时可用 asynchronously.

参见: