AWS Lambda调用SageMaker端点报Body参数类型错误如何解决
问题原因
- boto3的
runtime.sagemaker.invoke_endpoint接口要求Body参数必须为字节流、字节数组或类文件对象,你当前代码中传入的payload是Python字典类型,不符合参数要求,直接触发参数校验错误。 - 现有代码里
payload = json.loads(json.dumps(event))属于冗余操作:event本身就是Lambda触发时已经解析好的Python字典,你先将其序列化为JSON字符串又反序列回字典,没有实际作用,还保留了字典类型传给Body参数,直接导致报错。
解决方法
修改Lambda代码的payload处理逻辑,把字典序列化为JSON字符串后编码为字节流再传给Body参数即可,修改后的完整代码如下:
import os import io import boto3 import json ENDPOINT_NAME = 'iris-autoscale-6' runtime= boto3.client('runtime.sagemaker') def lambda_handler(event, context): # 直接将event字典序列化为JSON字节流 payload = json.dumps(event).encode('utf-8') print(payload) response = runtime.invoke_endpoint(EndpointName=ENDPOINT_NAME, ContentType='application/json', Body=payload) print(response) result = json.loads(response['Body'].read().decode()) print(result) return result
你当前配置的Lambda权限策略没有问题,修改代码后即可正常调用SageMaker端点。
内容的提问来源于stack exchange,提问作者Naveen Reddy Marthala
相关产品推荐
相关产品推荐

