无需API Gateway可否直接调用AWS Lambda并映射自定义域名至函数URL?
Lambda新手常见两个问题的实操解答
不通过API Gateway直接调用Lambda的可行性
完全可以脱离API Gateway直接调用Lambda,两者不存在强制的技术依赖,常见的无网关调用场景包括:
- 同VPC服务互调:同一VPC内的EC2、ECS/EKS、App Runner等工作负载,只要配置好具备
lambda:InvokeFunction权限的IAM角色,直接通过AWS SDK调用Lambda的Invoke API即可,链路延迟远低于走公网网关的模式 - 本地直连调试:配置好拥有对应Lambda调用权限的IAM凭证后,直接执行
aws lambda invoke命令,就能从本地环境触发指定Lambda函数,不需要搭建任何中间网关服务 - 云原生事件触发:S3对象变更、SQS消息投递、CloudWatch定时任务、EventBridge事件分发等服务触发Lambda的链路,全是AWS服务间的原生集成,完全不经过API Gateway
- 公网HTTPS访问:Lambda自带的函数URL功能开启后,会生成固定的公网HTTPS访问端点,直接通过HTTP请求即可触发函数,从产品设计层面就完全不依赖API Gateway
补充说明:早年“Lambda必须搭配API Gateway才能公网访问”的印象,源于Lambda直到2022年才正式推出自带的函数URL功能,在此之前要实现公网HTTPS访问,API Gateway几乎是唯一的全托管选项。
不借助API Gateway将自定义域名映射到Lambda函数URL的可行性
技术上可以实现,但AWS没有在Lambda函数URL层面提供类似API Gateway的开箱即用自定义域名全托管配置,所有方案都需要额外做一层配置衔接,生产可用的路径包括:
- DNS层CNAME直连:将自定义域名在DNS服务中配置CNAME记录,直接指向Lambda函数URL的公网域名即可完成基础映射。注意该方案的硬限制:无法通过HTTPS证书校验——因为Lambda函数URL自带的SSL证书是签给官方aws.com域名的,自定义域名访问时浏览器会报证书不匹配的错误,仅适用于内部调试、跳过证书校验的测试场景,不适合面向公网用户的正式业务
- CloudFront边缘层转发:将CloudFront的源站点配置为Lambda函数URL的公网域名,在CloudFront控制台关联对应的自定义域名和ACM签发的SSL证书,整个访问链路完全不涉及API Gateway:用户请求自定义域名时由CloudFront完成SSL校验、边缘缓存,再将请求转发到Lambda函数URL执行,是目前成本最低、配置最简单的生产可用方案
- 自有反向代理转发:如果已经部署了Nginx、Traefik等反向代理服务,只需要在代理配置里绑定自定义域名对应的SSL证书,把请求路径反向代理到Lambda函数URL的公网地址即可,全程不需要接入API Gateway
内容的提问来源于stack exchange,提问作者phanlh
相关产品推荐
相关产品推荐

