amazon-web-services - 无法使用启用的 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
}
我错过了什么?
解决方案
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 才可用。
看:
推荐阅读
- angular - 使用 NGINX + ANGULAR + Docker 的生产 SSL
- mysql - 在 sequelize 中编码弱实体的问题
- flutter - (颤振)使用 FutureBuilder 的 ListView.builder 不起作用
- javascript - 如何在javascript中接收来自多个用户的输入?
- spring-boot - 如何使用 gradle 构建用于部署的 .war 文件
- http - Web 服务器如何确定 ETag 值是否是最新的?
- python - Numpy 数组作为 pandas 数据框管理的元素
- amazon-s3 - Brightscript 为 CloudFront 生成签名 URL 产生“拒绝访问”
- django - 是否可以在 Django 中缓存整个页面?
- ruby-on-rails - 为这个查询创建一个索引 Heroku 说是我最慢的