首页 > 解决方案 > 无法使用启用的 VPC 从第一个 Lambda 调用第二个 Lambda

问题描述

我正在尝试从另一个调用 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
}

我错过了什么?

标签: amazon-web-servicesaws-lambdaamazon-vpc

解决方案


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

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

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

Lambda 目的地

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

看:


推荐阅读