

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 LCC 指令碼自訂 SageMaker 筆記本執行個體
<a name="notebook-lifecycle-config"></a>

**重要**  
允許 Amazon SageMaker Studio 或 Amazon SageMaker Studio Classic 建立 Amazon SageMaker 資源的自訂 IAM 政策也必須授與許可，才能將標籤新增至這些資源。需要將標籤新增至資源的許可，因為 Studio 和 Studio Classic 會自動標記它們建立的任何資源。如果 IAM 政策允許 Studio 和 Studio Classic 建立資源，但不允許標記，則在嘗試建立資源時可能會發生 "AccessDenied" 錯誤。如需詳細資訊，請參閱[提供標記 SageMaker AI 資源的許可](security_iam_id-based-policy-examples.md#grant-tagging-permissions)。  
提供許可來建立 SageMaker 資源的 [AWS Amazon SageMaker AI 的 受管政策](security-iam-awsmanpol.md) 已包含建立這些資源時新增標籤的許可。

*生命週期組態* (LCC) 提供 shell 指令碼，這些指令碼只有在您建立筆記本執行個體時或每當啟動筆記本執行個體時才會執行。建立筆記本執行個體時，您可以建立新的 LCC 或連接您已有的 LCC。生命週期組態指令碼適用於下列使用案例：
+ 在筆記本執行個體上安裝套件或範例筆記本
+ 設定筆記本執行個體的聯網和安全性
+ 使用 shell 指令碼自訂筆記本執行個體

您也可以使用生命週期組態指令碼，從筆記本存取 AWS 服務。例如，您可以建立指令碼，讓您使用筆記本來控制其他 AWS 資源，例如 Amazon EMR 執行個體。

我們維護筆記本生命週期組態指令碼的公有儲存庫，以解決在 https：//[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` 環境變數的值) 是 `/`。  
在日誌串流 `[notebook-instance-name]/[LifecycleConfigHook]` 中的日誌群組 `/aws/sagemaker/NotebookInstances` 內檢視筆記本執行個體生命週期組態的 CloudWatch Logs。  
指令碼無法執行超過 5 分鐘。如果指令碼執行超過 5 分鐘，就會開始故障，而無法建立或啟動筆記本執行個體。為了協助縮短指令碼的執行時間，請嘗試下列方法：  
削減必要步驟。例如，限制在哪些 conda 環境中安裝大型套件。
在平行程序中執行任務。
在您的指令碼中使用 `nohup` 命令。

您可以藉由在 SageMaker AI 主控台中選擇**生命週期組態**，查看您先前所建立的筆記本執行個體生命週期組態的清單。當您建立新的筆記本執行個體時，可以連接筆記本執行個體 LCC。如需建立筆記本執行個體的更多相關資訊，請參閱[建立 Amazon SageMaker 筆記本執行個體](howitworks-create-ws.md)。

## 生命週期組態最佳實務
<a name="nbi-lifecycle-config-bp"></a>

以下是使用生命週期組態的最佳實務：

**重要**  
我們不建議在生命週期組態指令碼中儲存敏感資訊。

**重要**  
生命週期組態指令碼會以根存取和筆記本執行個體的 IAM 執行角色權限執行，無論筆記本使用者的根存取設定為何。具有建立或修改生命週期組態和更新筆記本執行個體許可的委託人可以使用執行角色的登入資料執行程式碼。如需詳細資訊，請參閱[控制 SageMaker 筆記本執行個體的根存取權](nbi-root-access.md)。
+ 以 `root` 使用者身分執行生命週期組態。如果您的指令碼在 `/home/ec2-user/SageMaker` 目錄中進行任何變更 (例如，使用 `pip` 安裝套件)，請使用 `sudo -u ec2-user` 命令來指定以 `ec2-user` 使用者身分執行。這是用來執行 Amazon SageMaker AI 的同一個使用者身分。
+ 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 作業系統複製文字可能會引進不相容的分行符號，並導致非預期的錯誤。