如何通过AWS S3触发AWS SageMaker Notebook实例自动执行并导出输出?
需求可实现,以下是具体实现方案
1. 触发机制:S3事件触发Lambda启动Notebook实例
- 给目标S3桶配置对象创建事件(如Put操作),触发Lambda函数
- 在Lambda中调用SageMaker的
StartNotebookInstanceAPI,启动指定的Notebook实例 - 确保Lambda拥有S3事件读取权限、SageMaker实例启停权限,以及对应的IAM角色权限
2. 自动执行Notebook:利用SageMaker生命周期配置
- 创建SageMaker生命周期配置脚本,在实例启动完成后自动执行以下操作:
- 安装依赖工具:执行
pip install papermill(papermill是批量执行Jupyter Notebook的专用工具) - 执行目标Notebook:用命令
papermill /home/ec2-user/SageMaker/your_notebook.ipynb /home/ec2-user/SageMaker/output_notebook.ipynb -p input_s3_path s3://your-bucket/input-file.csv(输入文件路径可通过Lambda传递或从S3事件中获取)
- 安装依赖工具:执行
3. 输出自动导出至S3
- 在生命周期脚本中,执行完Notebook后,用AWS CLI或boto3将输出文件上传到目标S3桶:
- CLI示例:
aws s3 cp /home/ec2-user/SageMaker/output_notebook.ipynb s3://your-bucket/output/ - Python脚本(boto3)示例:
import boto3; s3 = boto3.client('s3'); s3.upload_file('/path/to/output', 'your-bucket', 'output/path')
- CLI示例:
4. 自动停止实例避免资源浪费
- 在生命周期脚本末尾,调用SageMaker的
StopNotebookInstanceAPI,或用CLI命令:aws sagemaker stop-notebook-instance --notebook-instance-name your-instance-name - 也可以在Lambda中添加逻辑,轮询实例状态,待执行完成后触发停止操作
关键注意事项
- 确保Notebook实例的IAM角色拥有S3读写权限,能访问输入输出桶
- 生命周期脚本需匹配SageMaker Notebook的默认工作目录:
/home/ec2-user/SageMaker/ - 可通过Lambda将输入文件的具体路径传递给Notebook,比如用环境变量或S3事件中的对象键
内容的提问来源于stack exchange,提问作者Sophia
相关产品推荐
相关产品推荐

