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

如何通过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,可以给实例添加生命周期启动脚本:

  1. 进入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
  1. 将该生命周期配置绑定到你的Notebook实例
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:45:03