VPC私有子网内Lambda无法连接Sagemaker的排查求助
问题解答
核心问题
你的请求超时是因为私有子网的路由表没有将SageMaker服务流量引导到VPC端点,且代码中未指定VPC端点的访问地址,导致请求默认尝试走公网,而私有子网无NAT时无法访问公网。
针对你的问题逐一解答
- 是否需要在路由表中添加Sagemaker VPC端点的路由?
需要。你需要在私有子网关联的路由表中添加一条路由条目:
- 目标前缀:
com.amazonaws.<你的区域>.sagemaker.runtime(推理场景主要使用该前缀,若涉及其他SageMaker操作可对应添加服务前缀) - 目标:选择你的SageMaker VPC端点
这条路由会把所有发往SageMaker服务的请求引导到VPC端点,而非走公网。
是否需要为VPC端点的ENI分配公网IP?
不需要。VPC端点的核心作用就是让VPC内部资源无需公网即可访问AWS服务,它的ENI仅需私有IP就能完成VPC内部通信,分配公网IP既无必要,还会增加安全暴露风险。是否需要添加指向VPC端点ENI的路由?
不需要。直接指向ENI的路由缺乏弹性——AWS可能在维护时更换VPC端点的ENI,导致路由失效。正确做法是添加服务前缀指向VPC端点的路由,由AWS自动管理ENI关联,保证通信稳定。
Lambda代码中的endpoint_url配置
必须指定。在Python代码调用SageMaker推理时,需要通过endpoint_url参数明确指向你的SageMaker VPC端点域名,示例如下:
import boto3 sagemaker_runtime = boto3.client( 'sagemaker-runtime', region_name='<你的区域>', endpoint_url='https://runtime.sagemaker.<你的区域>.vpce.amazonaws.com' # 替换为你的VPC端点域名 ) # 调用推理 response = sagemaker_runtime.invoke_endpoint( EndpointName='<你的模型端点名称>', ContentType='application/json', Body=b'{"input": "..."}' )
如果不指定endpoint_url,AWS SDK会默认使用公网的SageMaker服务地址,此时即使路由表配置正确,请求也会走公网导致超时。
内容的提问来源于stack exchange,提问作者Malintha
相关产品推荐
相关产品推荐

