

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 LCC 脚本自定义 SageMaker 笔记本实例
<a name="notebook-lifecycle-config"></a>

**重要**  
允许 Amazon SageMaker Studio 或 Amazon SageMaker Studio Classic 创建亚马逊 SageMaker资源的自定义 IAM 策略还必须授予向这些资源添加标签的权限。之所以需要为资源添加标签的权限，是因为 Studio 和 Studio Classic 会自动为创建的任何资源添加标签。如果 IAM 策略允许 Studio 和 Studio Classic 创建资源但不允许标记，则在尝试创建资源时可能会出现 AccessDenied “” 错误。有关更多信息，请参阅 [提供标记 A SageMaker I 资源的权限](security_iam_id-based-policy-examples.md#grant-tagging-permissions)。  
[Amazon 亚马逊 A SageMaker I 的托管策略](security-iam-awsmanpol.md)授予创建 SageMaker 资源的权限已经包括在创建这些资源时添加标签的权限。

*生命周期配置* (LCC) 提供了 Shell 脚本，仅在您创建笔记本实例或者随时启动笔记本实例时运行。创建笔记本实例时，您可以创建新的 LCC 或附加已有的 LCC。生命周期配置脚本对以下使用场景非常有用：
+ 在笔记本实例上安装软件包或示例笔记本
+ 为笔记本实例配置网络和安全性
+ 使用 shell 脚本自定义笔记本实例

您也可以使用生命周期配置脚本从笔记本访问 Amazon 服务。例如，您可以创建一个脚本，允许您使用笔记本来控制其他 Amazon 资源，例如 Amazon EMR 实例。

我们维护着一个包含笔记本生命周期配置脚本的公共存储库，这些脚本解决了自定义笔记本实例的常见用例，网址为 [https://github.com/aws-samples/amazon-sagemaker-notebook-instance-lifecycle-config-samples](https://github.com/aws-samples/amazon-sagemaker-notebook-instance-lifecycle-config-samples)。

**注意**  
每个脚本的字符数上限为 16384 个字符。  
可用于这两个脚本的 `$PATH` 环境变量的值是 `/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin`。工作目录（这是 `$PWD` 环境变量的值）是 `/`。  
在 CloudWatch 日志流的日志组中查看笔记本实例生命周期配置`/aws/sagemaker/NotebookInstances`的日志`[notebook-instance-name]/[LifecycleConfigHook]`。  
脚本运行时间不能超过 5 分钟。如果脚本运行时间超过 5 分钟，它会失败，并且不创建或启动笔记本实例。为了缩短脚本的运行时间，请尝试以下方法：  
减少所需的步骤。例如，限制在哪些 conda 环境中安装大型软件包。
在并行进程中运行任务。
在脚本中使用 `nohup` 命令。

您可以通过在 A SageMaker I 控制台中选择生命周期配置来查看之前创建的笔记本实例**生命周期配置**列表。创建新笔记本实例时，可以附加笔记本实例 LCC。有关创建笔记本实例的更多信息，请参阅 [创建 Amazon SageMaker 笔记本实例](howitworks-create-ws.md)。

## 生命周期配置最佳实践
<a name="nbi-lifecycle-config-bp"></a>

以下是使用生命周期配置的最佳实践：

**重要**  
我们不建议在生命周期配置脚本中存储敏感信息。

**重要**  
无论笔记本用户的根访问权限设置如何，生命周期配置脚本都使用根访问权限和笔记本实例的 IAM 执行角色权限运行。有权创建或修改生命周期配置以及更新 notebook 实例的委托人可以使用执行角色的凭据执行代码。请参阅[控制对 SageMaker 笔记本实例的 root 访问权限](nbi-root-access.md)了解更多信息。
+ 以 `root` 用户身份运行生命周期配置。如果您的脚本在 `/home/ec2-user/SageMaker` 目录中进行任何更改（例如，通过 `pip` 安装软件包），请使用命令 `sudo -u ec2-user` 以 `ec2-user` 用户的身份运行。这与运行 Amazon A SageMaker I 的用户相同。
+ SageMaker AI 笔记本实例使用`conda`环境为 Jupyter 笔记本实现不同的内核。如果要安装可用于一个或多个笔记本内核的软件包，请在安装软件包的命令中加入 `conda` 环境命令，以便激活包含要安装软件包的内核的 conda 环境。

  例如，如果只想为 `python3` 环境安装软件包，请使用以下代码：

  ```
  #!/bin/bash
  sudo -u ec2-user -i <<EOF
  
  # This will affect only the Jupyter kernel called "conda_python3".
  source activate python3
  
  # Replace myPackage with the name of the package you want to install.
  pip install myPackage
  # You can also perform "conda install" here as well.
  
  source deactivate
  
  EOF
  ```

  如果要在笔记本实例的所有 conda 环境中安装软件包，请使用以下代码：

  ```
  #!/bin/bash
  sudo -u ec2-user -i <<EOF
  
  # Note that "base" is special environment name, include it there as well.
  for env in base /home/ec2-user/anaconda3/envs/*; do
      source /home/ec2-user/anaconda3/bin/activate $(basename "$env")
  
      # Installing packages in the Jupyter system environment can affect stability of your SageMaker
      # Notebook Instance.  You can remove this check if you'd like to install Jupyter extensions, etc.
      if [ $env = 'JupyterSystemEnv' ]; then
        continue
      fi
  
      # Replace myPackage with the name of the package you want to install.
      pip install --upgrade --quiet myPackage
      # You can also perform "conda install" here as well.
  
      source /home/ec2-user/anaconda3/bin/deactivate
  done
  
  EOF
  ```
+ 必须将所有 conda 环境存储在默认环境文件夹 (/home/user/anaconda3/envs) 中。

**重要**  
当您创建或更改脚本时，我们建议您使用提供 Unix 样式换行符的文本编辑器，例如，创建笔记本时可在控制台中使用的文本编辑器。从非 Linux 操作系统复制文本可能会引入不兼容的换行符，并导致意外错误。