

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# JupyterLab을 사용한 수명 주기 구성
<a name="jl-lcc"></a>

수명 주기 구성은 새 JupyterLab 노트북 시작과 같은 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 Management Console 를 사용하여 JupyterLab 환경에 대한 사용자 지정을 자동화합니다.

수명 주기 구성은 새 JupyterLab 노트북 시작과 같은 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 도메인(domain) 또는 사용자 프로필에 수명 주기 구성 연결
<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>

를 사용하여 Studio 환경에 대한 사용자 지정을 자동화 AWS Management Console 하는 수명 주기 구성을 생성하는 방법을 알아봅니다.

### 1단계: 수명 주기 구성 생성
<a name="jl-lcc-create-console-step1"></a>

다음 절차를 통해 `Hello World`를 인쇄하는 수명 주기 구성 스크립트를 생성합니다.

**수명 주기 구성을 생성하려면**

1. [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)에서 Amazon SageMaker AI 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **관리자 구성**을 선택합니다.

1. **관리자 구성**에서 **수명 주기 구성**을 선택합니다.

1. **JupyterLab** 탭을 선택합니다.

1. **구성 생성**을 선택합니다.

1. **이름**에는 수명 주기 구성의 이름을 지정합니다.

1. **스크립트**의 텍스트 상자에 다음 수명 주기 구성을 지정합니다.

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

1. **구성 생성**을 선택합니다.

### 2단계: Amazon SageMaker AI 도메인(domain) 또는 사용자 프로필에 수명 주기 구성 연결
<a name="jl-lcc-create-console-step2"></a>

도메인 수준에서 연결된 수명 주기 구성 스크립트는 모든 사용자에게 상속됩니다. 하지만 사용자 프로필 수준에서 연결된 스크립트는 특정 사용자로 범위가 지정됩니다

JupyterServer에 대해 도메인 또는 사용자 프로필에 여러 수명 주기 구성을 연결할 수 있습니다.

다음 절차를 통해 도메인에 수명 주기 구성을 연결합니다.

**도메인에 수명 주기 구성을 연결하려면**

1. [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)에서 Amazon SageMaker AI 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **관리자 구성**을 선택합니다.

1. **관리자 구성**에서 **도메인**을 선택합니다.

1. 도메인 목록에서 수명 주기 구성을 연결할 도메인을 선택합니다.

1. **도메인 세부 정보**에서 **환경** 탭을 선택합니다.

1. **개인용 Studio 앱의 수명 주기 구성**에서 **연결**을 선택합니다.

1. **소스**에서 **기존 구성**을 선택합니다.

1. **Studio 수명 주기 구성**에서 이전 단계에서 만든 수명 주기 구성을 선택합니다.

1. **도메인에 연결**을 선택합니다.

다음 절차에 따라 수명 주기 구성을 사용자 프로필에 연결합니다.

**사용자 프로필에 수명 주기 구성을 연결하려면**

1. [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)에서 Amazon SageMaker AI 콘솔을 엽니다.

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 스크립트의 기본 출력입니다. bash 명령어 끝에 `>&2`를 추가하여 `STDERR`에 쓸 수 있습니다. 예를 들어 `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":
    []
  }
}'
```