我在 AWS Sagemaker 中设置了一个 Juypter Notebook。我想找到一种方法,在将新文件上传到某个文件夹(因此是 AWS Lambda(时,在自主触发器上启动此笔记本。我一直在寻找是否有一种简化的方法来使用 AWS Lambda 触发器触发 Juypter Notebook。
我已经考虑过使用 API 并将 Sagemaker 变成端点,但它没有奏效。
*编辑 对不起,如果问题有点模糊。我在Juypter的笔记本上编写了大量代码。我理想中寻找的是,当文件上传到"RandomFile"时,笔记本中的代码将运行。我希望通过设置基于 S3 的触发器来使用 AWS Lambda 执行此操作。
感謝您使用 Amazon SageMaker! 非常有趣的用例!
目前,没有任何直接方法可以在基于 S3 的触发器上触发 Jupyter 笔记本的执行,但有几种方法可以实现此目的:
基于 SQS 的解决方案
- 将 S3 存储桶配置为发送事件通知,以将消息发送到 SQS 队列。
- 在您的 SageMaker 笔记本实例上配置一个 cron 作业,该作业会持续轮询队列以查找工作。
- 基于 shell 脚本的示例 SQS 轮询器 - 当然任何语言都可以使用。
- 生命周期配置中 cron 作业的示例配置
- 当轮询器检测到消息时,在笔记本上执行 nbconvert 或造纸厂(如 Guy 建议的那样(。
- 根据 SQS 队列的大小配置 CloudWatch 警报,以便在 cron 作业不再工作时收到警报。
然后,只需让笔记本实例始终保持正常运行,它应该会检测对象何时上传到 S3。
λ和阶跃函数解决方案
此解决方案稍微复杂一些,但如果您不希望笔记本实例始终运行,则具有更具成本效益的优势。
- 使用生命周期配置配置笔记本实例,该配置执行以下操作:
- 从 S3 拉取文件
- 在后台运行 nbconvert。
- 将 nbconvert 的结果上传到 S3。
- 将您的 S3 存储桶配置为向 Amazon Step Functions 发送事件通知。
- 创建一个步骤函数状态机,其中包含以下步骤:
- 启动笔记本实例
- 等待 nbconvert 的结果上传到 S3。
- 停止笔记本实例。
其他解决方案
- 使用 nbconvert RESTful API。 nbconvert API 可在/api/nbconvert 中找到,但据我所知,它没有很好的文档记录。 要在 Lambda 函数中执行此操作,您可以获取笔记本实例的预签名 URL,然后通过 Python 请求库(或类似库(与此 API 交互。 但是,我还没有测试过这个,所以YMMV。