You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Lambda执行SageMaker数据处理任务?

解决方案:Lambda执行SageMaker数据处理流程 + CodePipeline自动化

一、解决Lambda中SageMaker包依赖问题

Lambda默认运行环境未预装SageMaker SDK,有两种可行方案:

方案1:使用Lambda层

  • 本地创建对应Python版本的目录结构(以Python 3.9为例):python/lib/python3.9/site-packages
  • 执行命令安装SDK到该目录:pip install sagemaker -t python/lib/python3.9/site-packages
  • 将整个python目录压缩为zip包,上传至Lambda层
  • 在目标Lambda函数的配置中关联该层

方案2:容器镜像部署Lambda

  • 基于Lambda官方Python镜像构建自定义镜像,在Dockerfile中添加RUN pip install sagemaker
  • 将镜像上传至ECR,使用该镜像创建Lambda函数

二、Lambda中执行SageMaker Processing Job的正确代码

注意:Lambda环境中不能使用sagemaker.get_execution_role(),需手动指定SageMaker执行角色ARN,同时明确配置区域:

import boto3
from sagemaker.processing import Processor, ProcessingInput, ProcessingOutput
import sagemaker

def lambda_handler(event, context):
    # 配置参数
    input_data = 's3://sagemaker-ap-south-1-057036842446/sagemaker/Data/Training/Churn_Modelling.csv'
    output_dir = 's3://sagemaker-ap-south-1-057036842446/sagemaker/Outputs/'
    image_uri = '057036842446.dkr.ecr.ap-south-1.amazonaws.com/aws-docker-repo:latest'
    # 替换为你的SageMaker执行角色ARN
    sagemaker_role_arn = 'arn:aws:iam::057036842446:role/SageMakerExecutionRole'
    
    # 初始化带区域的SageMaker会话
    sagemaker_session = sagemaker.Session(boto3.Session(region_name='ap-south-1'))
    
    processor = Processor(
        image_uri=image_uri,
        role=sagemaker_role_arn,
        instance_count=1,
        instance_type="ml.m5.xlarge",
        sagemaker_session=sagemaker_session
    )
    
    processor.run(
        inputs=[
            ProcessingInput(
                source=input_data,
                destination='/opt/ml/processing/input'
            )
        ],
        outputs=[
            ProcessingOutput(
                source='/opt/ml/processing/output',
                destination=output_dir
            )
        ]
    )
    
    return {
        'statusCode': 200,
        'body': 'Processing job started successfully'
    }

关键权限配置

  • Lambda执行角色:需添加以下权限(或更细粒度的权限策略):
    • sagemaker:CreateProcessingJob
    • 访问ECR镜像的权限
    • S3读写权限(对应输入输出路径)
  • SageMaker执行角色:需包含:
    • 限定输入输出路径的S3读写权限(或AmazonS3FullAccess)
    • AmazonEC2ContainerRegistryReadOnly
    • SageMaker Processing Job相关执行权限(或AmazonSageMakerFullAccess)

三、数据同步说明

SageMaker Processing Job会自动完成数据的拉取和推送,无需手动处理:

  • 指定ProcessingInput的source为S3路径时,SageMaker会自动将数据同步至容器内的destination目录(即/opt/ml/processing/input)
  • 指定ProcessingOutput的source为容器内目录时,SageMaker会自动将目录下的处理结果同步至指定的S3destination路径

四、CodePipeline自动化实现

流程架构

  1. 源阶段:配置S3触发器(当输入数据更新时触发)或关联CodeCommit仓库
  2. 执行阶段:选择以下两种方式之一:
    • CodeBuild执行:编写buildspec.yml安装SDK并运行处理脚本
    • Lambda触发:在CodePipeline中添加Lambda动作,调用上述Lambda函数
  3. 验证阶段(可选):添加自定义验证步骤,检查S3输出目录是否生成预期文件

CodeBuild示例buildspec.yml

version: 0.2
phases:
  install:
    runtime-versions:
      python: 3.9
    commands:
      - pip install sagemaker
  build:
    commands:
      - python run_processing_job.py

注:run_processing_job.py内容同上述Lambda中的核心处理代码,需手动指定SageMaker角色ARN和区域

CodePipeline权限配置

CodePipeline服务角色需具备:

  • 调用Lambda/CodeBuild的权限
  • 触发SageMaker Processing Job的权限
  • S3资源访问权限

内容的提问来源于stack exchange,提问作者Karki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 01:20:31