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

SageMaker中如何通过Lambda自动将S3路径参数传入Jupyter Notebook?

可以实现,以下是具体方案

1. 在Lambda中提取S3对象路径

当S3对象创建事件触发Lambda时,事件参数里包含了完整的桶名和对象Key,直接解析即可得到S3路径:

def lambda_handler(event, context):
    # 从触发事件中提取桶名和对象Key
    bucket = event['Records'][0]['s3']['bucket']['name']
    object_key = event['Records'][0]['s3']['object']['key']
    # 拼接成标准S3路径格式
    s3_path = f"s3://{bucket}/{object_key}"
    # 后续执行Notebook的逻辑写在这里

2. 将S3路径传递给Jupyter Notebook

有两种实用的传递方式,按需选择:

方式一:用Papermill(推荐,专为参数化Notebook设计)

  1. 先在Lambda的执行环境中安装papermill和jupyter依赖(可以打包成Lambda层,避免函数包体积过大)
  2. 在你的源Notebook中,添加一个标记为parameters的参数单元格:
    # parameters
    s3_path = ""  # 这里会被papermill传入的参数覆盖
    
  3. 在Lambda中执行命令传递参数:
    import subprocess
    subprocess.run([
        "papermill",
        "/path/to/your/input_notebook.ipynb",
        "/path/to/output_notebook.ipynb",  # 执行后的Notebook保存路径
        "-p", "s3_path", s3_path
    ], check=True)
    

方式二:通过环境变量传递

  1. 在Lambda中设置环境变量,再执行Notebook:
    import os
    import subprocess
    os.environ['S3_PATH'] = s3_path
    # 用nbconvert执行Notebook
    subprocess.run([
        "jupyter", "nbconvert",
        "--execute", "/path/to/your/notebook.ipynb",
        "--to", "notebook",
        "--output", "/path/to/executed_notebook.ipynb"
    ], check=True)
    
  2. 在Notebook中读取环境变量:
    import os
    s3_path = os.environ.get('S3_PATH')
    # 后续业务逻辑直接使用s3_path即可
    

3. 注意事项

  • 确保Lambda的IAM角色拥有访问目标S3桶的权限(读取触发对象、写入执行后的Notebook<如果需要>)
  • 依赖包建议用Lambda层管理,避免函数包超过大小限制
  • 如果Notebook需要处理S3对象,可直接用s3_path结合boto3等工具操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:45:04