如何让Docker化Lambda代码访问SageMaker中构建的BlazingText模型?
解决方案
1. 配置Lambda执行角色权限
Lambda的执行角色必须具备以下核心权限:
- SageMaker操作权限:允许调用
sagemaker:DescribeModel、sagemaker:CreateTransformJob、sagemaker:DescribeTransformJob等批量转换相关接口,可通过附加AmazonSageMakerFullAccess策略(或自定义细粒度策略)实现。 - S3数据权限:允许读取批量推理输入路径的文件(
s3:GetObject)和写入输出路径的结果(s3:PutObject),需针对你的X_batch_location和output_pred_dir对应的S3路径配置权限。
2. 显式指定SageMaker客户端的区域与凭证
Lambda环境中,SageMaker SDK可能无法自动识别区域或凭证,需手动初始化客户端并传入Transformer:
import boto3 from sagemaker.transformer import Transformer # 初始化指定区域的SageMaker客户端 sagemaker_client = boto3.client('sagemaker', region_name='us-east-1') transformer = Transformer( model_name="arn:aws:sagemaker:us-east-1:99999999:model/my_model_name", instance_count=1, instance_type='ml.m4.xlarge', output_path=output_pred_dir, sagemaker_client=sagemaker_client # 传入自定义客户端 ) transformer.transform( data=X_batch_location, data_type='S3Prefix', content_type='application/jsonlines', split_type='Line' )
3. 升级Docker镜像中的SageMaker SDK版本
旧版本SDK可能存在ARN解析或模型访问的兼容性问题,需在Dockerfile中安装最新稳定版依赖:
RUN pip install --upgrade sagemaker boto3
4. 验证模型ARN的正确性
直接从SageMaker控制台的模型详情页复制完整ARN,确保格式为arn:aws:sagemaker:<区域>:<账号ID>:model/<模型名称>,避免手动输入时出现区域、账号ID或模型名称的错误。
内容的提问来源于stack exchange,提问作者rach
相关产品推荐
相关产品推荐

