

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

# 搭配 JupyterLab 的生命週期組態
<a name="jl-lcc"></a>

生命週期組態是由 JupyterLab 生命週期事件觸發的 Shell 指令碼，例如啟動新的 JupyterLab 筆記本。您可以使用生命週期組態，自動自訂您的 JupyterLab 環境。此自訂功能包含安裝自訂套件、設定筆記本擴充功能、預先載入資料集，以及設定來源碼儲存庫。

使用生命週期組態提供您彈性和控制，來設定 JupyterLab 以滿足您的特定需求。例如，您可以使用最常用的套件和程式庫，建立一組最少的基礎容器映像。然後，您可以使用生命週期組態，跨資料科學和機器學習團隊為特定使用案例安裝其他套件。

**注意**  
每個指令碼限定最多只能包含 **16,384 個字元**。

**Topics**
+ [生命週期組態建立](jl-lcc-create.md)
+ [生命週期組態偵錯](jl-lcc-debug.md)
+ [分離生命週期組態](jl-lcc-delete.md)

# 生命週期組態建立
<a name="jl-lcc-create"></a>

本主題包含建立生命週期組態並將其與 JupyterLab 建立關聯的指示。您可以使用 AWS Command Line Interface (AWS CLI) 或 AWS 管理主控台 來自動化 JupyterLab 環境的自訂。

生命週期組態是由 JupyterLab 生命週期事件觸發的 Shell 指令碼，例如啟動新的 JupyterLab 筆記本。如需生命週期組態的更多相關資訊，請參閱[搭配 JupyterLab 的生命週期組態](jl-lcc.md)。

## 建立生命週期組態 (AWS CLI)
<a name="jl-lcc-create-cli"></a>

了解如何使用 AWS Command Line Interface (AWS CLI) 建立生命週期組態，以自動化 Studio 環境的自訂。

### 先決條件
<a name="jl-lcc-create-cli-prerequisites"></a>

開始之前，請先完成以下先決條件：
+  AWS CLI 依照[安裝目前 AWS CLI 版本](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html#install-tool-bundled)中的步驟更新 。
+ 從您的本機機器，執行 `aws configure` 並提供您的 AWS 憑證。如需 AWS 登入資料的相關資訊，請參閱[了解並取得您的 AWS 登入](https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html)資料。
+ 加入 Amazon SageMaker AI 網域。如需相關概念資訊，請參閱 [Amazon SageMaker AI 網域概觀](gs-studio-onboard.md)。如需快速入門指南，請參閱 [使用 Amazon SageMaker AI 的快速設定](onboard-quick-start.md)。

### 步驟 1：建立生命週期組態
<a name="jl-lcc-create-cli-step1"></a>

下列程序示範如何建立 `Hello World` 生命週期組態指令碼。

**注意**  
每個指令碼最多可以有 **16,384** 個字元。

1. 從您的本機電腦中，使用以下內容建立名為 `my-script.sh` 的檔案：

   ```
   #!/bin/bash
   set -eux
   echo 'Hello World!'
   ```

1. 使用下列內容將您的 `my-script.sh` 檔案轉換為 base64 格式。此要求可防止由於間距和換行編碼而發生的錯誤。

   ```
   LCC_CONTENT=`openssl base64 -A -in my-script.sh`
   ```

1. 建立與 Studio 搭配使用的生命週期組態。下列命令會建立在您啟動相關聯 `JupyterLab` 應用程式時執行的生命週期組態：

   ```
   aws sagemaker create-studio-lifecycle-config \
   --region region \
   --studio-lifecycle-config-name my-jl-lcc \
   --studio-lifecycle-config-content $LCC_CONTENT \
   --studio-lifecycle-config-app-type JupyterLab
   ```

   記下傳回之新建立之生命週期組態的 ARN。需要此 ARN 才能將生命週期組態附加至您的應用程式。

### 步驟 2：將生命週期組態連接至您的 Amazon SageMaker AI 網域 (網域) 和使用者設定檔
<a name="jl-lcc-create-cli-step2"></a>

若要連接生命週期組態，您必須針對網域或使用者設定檔更新 `UserSettings`。所有使用者都會繼承在網域層級關聯的生命週期組態指令碼。但是，在使用者設定檔層級關聯的指令碼範圍是特定使用者。

您可以使用下列命令，使用連接的生命週期組態建立新的使用者設定檔、網域或空間：
+ [create-user-profile](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sagemaker/create-user-profile.html)
+ [create-domain](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sagemaker/create-domain.html)
+ [create-space](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sagemaker/create-space.html)

下列命令會使用生命週期組態建立使用者設定檔。將來自上述步驟的生命週期組態 ARN 新增至使用者的 `JupyterLabAppSettings`。您可以傳遞生命週期組態清單，同時新增多個生命週期組態。當使用者使用 啟動 JupyterLab 應用程式時 AWS CLI，他們可以指定生命週期組態，而不是使用預設組態。使用者傳遞的生命週期組態必須屬於 `JupyterLabAppSettings` 中的生命週期組態清單。

```
# Create a new UserProfile
aws sagemaker create-user-profile --domain-id domain-id \
--user-profile-name user-profile-name \
--region region \
--user-settings '{
"JupyterLabAppSettings": {
  "LifecycleConfigArns":
    [lifecycle-configuration-arn-list]
  }
}'
```

## 建立生命週期組態 (主控台)
<a name="jl-lcc-create-console"></a>

了解如何使用 建立生命週期組態 AWS 管理主控台 ，以自動化 Studio 環境的自訂。

### 步驟 1：建立生命週期組態
<a name="jl-lcc-create-console-step1"></a>

使用下列程序來建立一個列印 `Hello World` 的生命週期組態指令碼。

**建立生命週期組態**

1. 開啟 Amazon SageMaker AI 主控台，網址為 [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)。

1. 在左側導覽窗格中，選擇**管理員組態**。

1. 在**管理員組態**下，選擇**生命週期組態**。

1. 選擇 **JupyterLab** 索引標籤。

1. 選擇**建立組態**。

1. 針對**名稱**，指定生命週期組態的名稱。

1. 針對**指令碼**下的文字方塊，指定下列生命週期組態：

   ```
   #!/bin/bash
   set -eux
   echo 'Hello World!'
   ```

1. 選擇**建立組態**。

### 步驟 2：將生命週期組態連接至您的 Amazon SageMaker AI 網域 (網域) 和使用者設定檔
<a name="jl-lcc-create-console-step2"></a>

所有使用者都會繼承與網域層級相關聯的生命週期組態指令碼。但是，在使用者設定檔層級關聯的指令碼範圍是特定使用者。

您可以將多個生命週期組態連接至 JupyterLab 的網域或使用者設定檔。

使用下列程序將生命週期組態連接至網域。

**將生命週期組態連接至網域**

1. 開啟 Amazon SageMaker AI 主控台，網址為 [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)。

1. 在左側導覽窗格中，選擇**管理員組態**。

1. 在**管理員組態**下，選擇**網域**。

1. 從網域清單中，選取要連接生命週期組態的網域。

1. 從**網域詳細資料**中，選擇**環境**索引標籤。

1. 在**個人 Studio 應用程式的生命週期組態**下，選擇**連接**。

1. 在**來源**下，選擇**現有的組態**。

1. 在 **Studio 生命週期組態**下，選取您在上一個步驟中建立的生命週期組態。

1. 選取**連接至網域**。

使用下列程序將生命週期組態連接至使用者設定檔。

**將生命週期組態連接至使用者設定檔**

1. 開啟 Amazon SageMaker AI 主控台，網址為 [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)。

1. 在左側導覽窗格中，選擇**管理員組態**。

1. 在**管理員組態**下，選擇**網域**。

1. 從網域清單中，選取包含要連接生命週期組態之使用者設定檔的網域。

1. 在**使用者設定檔**下，選取使用者設定檔。

1. 在**使用者詳細資訊**頁面，選擇**編輯**。

1. 在左側導覽選擇 **Studio 設定**。

1. 在**連接至使用者的生命週期組態**下，選擇**連接**。

1. 在**來源**下，選擇**現有的組態**。

1. 在 **Studio 生命週期**組態下，選取您在上一個步驟中建立的生命週期組態。

1. 選擇**連接至使用者設定檔**。

# 生命週期組態偵錯
<a name="jl-lcc-debug"></a>

下列主題示範如何取得生命週期組態的相關資訊和偵錯。

**Topics**
+ [從 CloudWatch Logs 驗證生命週期組態程序](#jl-lcc-debug-logs)
+ [生命週期組態逾時](#jl-lcc-debug-timeout)

## 從 CloudWatch Logs 驗證生命週期組態程序
<a name="jl-lcc-debug-logs"></a>

生命週期組態僅記錄 `STDOUT` 和 `STDERR`。

`STDOUT` 是 bash 指令碼的預設輸出。您可以寫入 `STDERR`，只要把 `>&2` 附加到 bash 命令的末端。例如 `echo 'hello'>&2`。

生命週期組態的日誌會使用 Amazon CloudWatch AWS 帳戶 發佈至您的 。您可以在 CloudWatch 主控台的日誌串流 `/aws/sagemaker/studio` 中找到這些日誌。

1. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。

1. 從左側導覽窗格中，選擇**日誌**。從下拉式清單中，選擇**日誌群組**。

1. 在**日誌群組**頁面上，搜尋 `aws/sagemaker/studio`。

1. 選取日誌群組。

1. 在**日誌群組詳細資訊**頁面上，選擇**日誌串流**索引標籤。

1. 若要尋找特定空間的日誌，請使用下列格式搜尋日誌串流：

   ```
   domain-id/space-name/app-type/default/LifecycleConfigOnStart
   ```

   例如，若要尋找網域 ID `d-m85lcu8vbqmz`、空間名稱 `i-sonic-js` 和應用程式類型 `JupyterLab` 的生命週期組態日誌，請使用下列搜尋字串：

   ```
   d-m85lcu8vbqmz/i-sonic-js/JupyterLab/default/LifecycleConfigOnStart
   ```

## 生命週期組態逾時
<a name="jl-lcc-debug-timeout"></a>

生命週期組態逾時限制為 5 分鐘。如果生命週期組態指令碼花費超過 5 分鐘的時間來執行，您會收到錯誤。

若要解決此錯誤，請確定您的生命週期組態指令碼在 5 分鐘內完成。

為了協助縮短指令碼的執行時期，請嘗試下列方法：
+ 減少不必要的步驟。例如，限制在哪些 conda 環境中安裝大型套件。
+ 在平行程序中執行任務。
+ 在指令碼中使用 nohup 命令，以確定忽略掛斷訊號，以便指令碼在不停止的情況下執行。

# 分離生命週期組態
<a name="jl-lcc-delete"></a>

若要更新您的指令碼，您必須建立新的生命週期組態指令碼，並將其連接至個別的 Amazon SageMaker AI 網域 (網域)、使用者設定檔或共用空間。生命週期組態指令碼建立後便無法變更。如需建立和管理生命週期組態的更多資訊，請參閱[生命週期組態建立](jl-lcc-create.md)。

下節說明如何使用 AWS Command Line Interface (AWS CLI) 分離生命週期組態。

## 使用 分離 AWS CLI
<a name="jl-lcc-delete-cli"></a>

若要使用AWS CLI分離生命週期組態，請從連接至資源的生命週期組態清單中移除所需的生命週期組態。然後，將清單做為個別命令的一部分傳遞：
+ [update-user-profile](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sagemaker/update-user-profile.html)
+ [update-domain](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sagemaker/update-domain.html)
+ [update-space](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sagemaker/update-space.html)

例如，以下命令會移除連接至網域的 JupyterLab 應用程式的所有生命週期組態。

```
aws sagemaker update-domain --domain-id domain-id \
--region region \
--default-user-settings '{
"JupyterLabAppSettings": {
  "LifecycleConfigArns":
    []
  }
}'
```