如何通过AWS Step Function或Lambda触发运行SageMaker中的Jupyter Notebook
方案解答
通过Step Function调用Notebook运行的实现方案
你之前仅使用StartNotebookInstance步骤只能启动Notebook实例服务,本身没有内置执行指定.ipynb文件的能力,可通过两种方案实现需求:
方案1:使用SageMaker原生Notebook执行API(推荐)
无需提前启动Notebook实例,API会自动调度计算资源运行、执行完成后自动释放资源:
- 先将你本地的
test.ipynb上传到S3存储桶的指定路径 - 在Step Function中添加「调用AWS SDK服务」类型的步骤,选择SageMaker服务的
startNotebookExecution动作,对应ARN为arn:aws:states:::aws-sdk:sagemaker:startNotebookExecution,参考参数配置如下:
{ "NotebookExecutionName": "run-test-notebook-$.Execution.Id", "NotebookS3Location": { "Bucket": "你的S3存储桶名", "Key": "notebook存储路径/test.ipynb" }, "OutputNotebookS3Location": { "Bucket": "结果输出的S3存储桶名", "Key": "结果存储路径/" }, "ExecutionRoleArn": "持有SageMaker执行权限、S3读写权限的IAM角色ARN", "NotebookInstanceType": "ml.t3.medium" }
- 后续可添加状态判断步骤,根据
startNotebookExecution的返回结果分别处理执行成功、失败的分支逻辑。
方案2:配合Notebook实例生命周期配置使用
如果你一定要使用已经创建好的Notebook实例内的test.ipynb,可以给实例添加生命周期启动脚本:
- 进入SageMaker控制台创建生命周期配置,启动脚本填写如下内容:
#!/bin/bash sudo -u ec2-user -i <<'EOF' cd /home/ec2-user/SageMaker # 执行指定notebook,输出运行后的结果文件 jupyter nbconvert --to notebook --execute test.ipynb --output test_output.ipynb # 生成的csv回传S3后停止实例 aws s3 cp ./生成的结果文件.csv s3://你的存储桶/路径/ aws sagemaker stop-notebook-instance --notebook-instance-name 你的Notebook实例名 EOF
- 将该生命周期配置绑定到你的Notebook实例
- Step Function中仅保留
StartNotebookInstance步骤即可,实例启动后会自动执行脚本、跑完自动停止,无需额外配置。
用Lambda触发Notebook运行的实现方案
不需要使用API网关组件,直接在Lambda代码中调用SageMaker的startNotebookExecutionAPI即可,Python运行环境的示例代码如下:
import boto3 import os sagemaker_client = boto3.client('sagemaker') def lambda_handler(event, context): # 触发notebook执行任务 exec_resp = sagemaker_client.start_notebook_execution( NotebookExecutionName=f"run-test-notebook-{context.aws_request_id}", NotebookS3Location={ 'Bucket': os.environ['INPUT_S3_BUCKET'], 'Key': os.environ['NOTEBOOK_FILE_KEY'] }, OutputNotebookS3Location={ 'Bucket': os.environ['OUTPUT_S3_BUCKET'], 'Key': os.environ['OUTPUT_PATH_PREFIX'] }, ExecutionRoleArn=os.environ['SAGEMAKER_EXEC_ROLE_ARN'], NotebookInstanceType='ml.t3.medium' ) # 如果notebook运行时长不超过15分钟,可加循环查询执行状态的逻辑,否则直接异步返回即可 return { "statusCode": 200, "notebook_exec_arn": exec_resp['NotebookExecutionArn'] }
配置注意事项:
- 给Lambda的执行角色添加
sagemaker:StartNotebookExecution的权限 - 配置的SageMaker执行角色需要持有S3读写、SageMaker作业运行的相关权限
方案选型说明
你找不到直接触发Notebook实例内文件运行的方案,是因为这种方式本身不属于推荐的生产级实现:
- Notebook实例是为交互式开发场景设计的,长期运行成本高,没有内置任务重试、状态监控、异常告警的能力
- 测试/快速验证场景推荐使用上面提到的
startNotebookExecutionAPI方案,无需维护常驻的Notebook实例 - 生产环境更推荐你把
test.ipynb中的数据处理逻辑拆成普通Python脚本,打包为SageMaker Processing Job运行,或打包为容器镜像直接通过Lambda/Step Function调度,稳定性、成本控制、可观测性都会大幅提升。
内容的提问来源于stack exchange,提问作者ithoughtso
相关产品推荐
相关产品推荐

