如何在于 Amazon SageMaker 笔记本实例上运行的 Jupyter 笔记本中指定代理设置?

上次更新时间:2019 年 9 月 24 日

我试图使用生命周期配置在新的 Jupyter 笔记本上或在现有笔记本的 shell 环境中配置代理设置。但是,Jupyter 不应用我的设置。如何才能在于 Amazon SageMaker 笔记本实例上运行的 Jupyter 笔记本上指定代理设置,并确保 Jupyter 使用所指定的设置?

简短描述

Jupyter 笔记本不会从生命周期配置获取代理设置,除非您在 iPython 笔记本服务器环境中指定代理设置。

要配置 iPython 笔记本服务器配置文件,请创建一个 Python 脚本并以名称 00-startup.py 保存到 /home/ec2-user/.ipython/profile_default/startup。路径 /home/ec2-user/.ipython/profile_default/startup 是在 Amazon SageMaker 笔记本示例上打开 Jupyter 笔记本时创建。Juypter 以字母表顺序运行脚本,因此名称以“00”开头的脚本文件将会被 Jupyter 最先运行。

注意:Jupyter 笔记本和 Shell 作为单独的进程分别运行。这意味着通过 00-startup.py 应用的代理设置不会传递到 shell。此外,在 Jupyter 中打开终端时创建的默认 shell 是一个非登录 shell,也称为交互式 shell。要使用生命周期配置将代理设置应用到 shell 环境,需要将默认的交互式 shell 更改为登录 shell,如 bash,并将代理设置保存到 /home/ec2-user/.profile

解决方法

从 AWS 实验室 GitHub 存储库下载并运行 proxy-for-jupyter 生命周期配置脚本:

  • 要同时为 Jupyter 笔记本和 shell 设置代理,请保留脚本中的所有 echo 语句。
  • 要仅为 Jupyter 笔记本设置代理,则从脚本中删除前四个 echo 语句。
  • 要仅为 shell 设置代理,则从脚本中删除末四个 echo 语句。

执行脚本后,您可以在 Jupyter 笔记本和终端中看到代理设置。要确认代理是否正常工作:

1.    在 Amazon SageMaker 笔记本实例上打开终端窗口,然后运行以下命令来测试代理连接:

wget google.com

如果获得类似下面的输出,则表示代理在终端已正确配置:

--2019-09-24 07:46:05--  http://google.com/
Resolving proxy.local (proxy.local)...

2.    在 Amazon SageMaker 笔记本实例打开 Jupyter 笔记本,然后运行以下命令以列出环境变量:

%env

示例输出:

{...'GIT_PAGER': 'cat',
 'MPLBACKEND': 'module://ipykernel.pylab.backend_inline',
 'HTTP_PROXY': 'http://proxy.local:3128',
 'HTTPS_PROXY': 'http://proxy.local:3128'
 'NO_PROXY': 's3.amazonaws.com,127.0.0.1,localhost'}

注意:特定值,例如代理 URL,将特定于您的配置。

3.    发出请求以确认笔记本实例正在使用代理设置:

import requests
requests.get("http://google.com")

这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助吗?