如何让公有子网Lambda调用私有子网Lambda(无VPC端点)
无VPC端点时公有子网Lambda调用私有子网Lambda的实现方案(Node.js v20.x)
核心结论
InvokeCommand完全适用,调用失效的核心原因是网络连通性缺失和权限配置不全,与工具本身无关。
实现方案
1. 确保公有子网Lambda具备公网访问能力
lambdaInPublic部署在公有子网中,需配置以下网络规则:
- 公有子网关联的路由表添加路由条目:
0.0.0.0/0指向互联网网关(IGW),确保Lambda能访问公网的AWS Lambda API端点 - lambdaInPublic的安全组允许**出站HTTPS(443端口)**访问公网(默认安全组允许所有出站,若有严格限制,可仅开放AWS Lambda服务的公网IP段)
2. 配置IAM权限
给lambdaInPublic的执行角色添加调用权限
添加如下IAM策略,允许其调用目标私有Lambda:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:<你的AWS区域>:<你的AWS账号ID>:function:lambdaInPrivate" } ] }
(可选)私有Lambda资源策略补充
若lambdaInPrivate配置了资源策略限制调用方,需添加允许lambdaInPublic执行角色调用的条目:
{ "Version": "2012-10-17", "Id": "lambdaInPrivateResourcePolicy", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<你的AWS账号ID>:role/<lambdaInPublic的执行角色名>" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:<你的AWS区域>:<你的AWS账号ID>:function:lambdaInPrivate" } ] }
3. 私有Lambda无需额外网络配置
lambdaInPrivate部署在私有子网中不影响被调用——因为Invoke操作是通过AWS Lambda服务转发,而非直接的网络连通,只要私有Lambda的执行角色能满足自身业务需求即可。
可行代码示例
import { LambdaClient, InvokeCommand } from "@aws-sdk/client-lambda"; // 初始化Lambda客户端,默认使用环境变量中的凭证,自动走公网访问Lambda API const lambdaClient = new LambdaClient({ region: "你的AWS区域" }); export const handler = async (event) => { try { const invokeParams = { FunctionName: "lambdaInPrivate", // 目标私有Lambda函数名 InvocationType: "RequestResponse", // 同步调用模式,直接获取返回结果 Payload: JSON.stringify({ // 传递给私有Lambda的业务参数 inputData: "来自公有子网Lambda的请求" }) }; const command = new InvokeCommand(invokeParams); const response = await lambdaClient.send(command); // 解析私有Lambda的返回结果 const privateLambdaResult = JSON.parse(Buffer.from(response.Payload).toString()); return { statusCode: 200, body: JSON.stringify({ success: true, message: "调用私有Lambda成功", privateLambdaOutput: privateLambdaResult }) }; } catch (error) { console.error("调用失败详情:", error); return { statusCode: 500, body: JSON.stringify({ success: false, error: error.message }) }; } };
内容的提问来源于stack exchange,提问作者Jack Lee
相关产品推荐
相关产品推荐

