

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

# 自訂附加元件
<a name="customization"></a>

## 範本
<a name="customization-template"></a>

範本是可重複使用的工作區組態，可做為建立工作區的管理員控制藍圖。它們提供工作空間組態值的預設值，以及用於控制資料科學家可以執行哪些動作的護欄。範本存在於叢集層級，並可在命名空間之間重複使用。

SageMaker Spaces 會建立兩個系統範本作為資料科學家的起點，一個用於程式碼編輯器，另一個用於 JupyterLab。這些系統範本由 附加元件管理，無法直接編輯。反之，管理員可以建立新的範本，並將其設定為預設範本。

## 任務控管
<a name="customization-governabce"></a>

```
apiVersion: workspace.jupyter.org/v1alpha1
kind: WorkspaceTemplate
metadata:
  name: my-jupyter-template
  namespace: my-namespace
  labels:
    kueue.x-k8s.io/priority-class: <user-input>-priority
spec:
  displayName: "My Custom Jupyter Lab"
  description: "Custom Jupyter Lab with specific configurations"
  defaultImage: "public.ecr.aws/sagemaker/sagemaker-distribution:latest-cpu"
  allowedImages:
    - "public.ecr.aws/sagemaker/sagemaker-distribution:latest-cpu"
    - "public.ecr.aws/sagemaker/sagemaker-distribution:latest-gpu"
  defaultResources:
    requests:
      cpu: "1"
      memory: "4Gi"
    limits:
      cpu: "4"
      memory: "16Gi"
  primaryStorage:
    defaultSize: "10Gi"
    minSize: "5Gi"
    maxSize: "50Gi"
    defaultStorageClassName: "sagemaker-spaces-default-storage-class"
    defaultMountPath: "/home/sagemaker-user"
  defaultContainerConfig:
    command: ["/opt/amazon/sagemaker/workspace/bin/entrypoint-workspace-jupyterlab"]
  defaultPodSecurityContext:
    fsGroup: 1000
  defaultOwnershipType: "Public"
  defaultAccessStrategy:
    name: "hyperpod-access-strategy"
  allowSecondaryStorages: true
  appType: "jupyterlab"
```

## SMD/自訂映像
<a name="customization-image"></a>

客戶可以透過 範本設定映像政策，方法是提供預設映像和允許映像的清單。此外，管理員可以選擇是否允許資料科學家攜帶自己的自訂映像。系統預設為使用最新的 SageMaker 分佈，但如果您想要鎖定至特定版本，您可以指定要在範本中使用的確切 SMD 版本。

自訂映像需求：
+ `curl` 如果您想要使用閒置關閉
+ 連接埠 8888
+ 遠端存取

## 遠端 IDE 要求
<a name="remote-ide-requirement"></a>

### VS Code 版本要求
<a name="remote-ide-requirement-vscode"></a>

需要 VS Code 版本 [v1.90](https://code.visualstudio.com/updates/v1_90) 或更新版本。我們建議您使用[最新穩定的 VS Code 版本](https://code.visualstudio.com/updates)。

### 作業系統要求
<a name="remote-ide-requirement-operate"></a>

您需要下列其中一個作業系統才能遠端連線至 Studio 空間：
+ macOS 13\$1
+ Windows 10
  + [Windows 10 支援將於 2025 年 10 月 14 日結束](https://support.microsoft.com/en-us/windows/windows-10-support-ends-on-october-14-2025-2ca8b313-1946-43d3-b55c-2b95b107f281)
+ Windows 11
+ Linux
+ 安裝[適用於 Linux 的官方 Microsoft VS 程式碼](https://code.visualstudio.com/docs/setup/linux)
  + 不是開放原始碼版本

### 本機機器先決條件
<a name="remote-ide-requirement-machine"></a>

將本機 Visual Studio 程式碼連線至 Studio 空間之前，請確定您的本機機器具有必要的相依性和網路存取。

**注意**  
具有軟體安裝限制的環境可能會讓使用者無法安裝必要的相依性。Toolkit AWS for Visual Studio Code 會在啟動遠端連線時自動搜尋這些相依性，並在缺少任何相依性時提示安裝。與您的 IT 部門協調，以確保這些元件可用。

**必要的本機相依性**

您的本機機器必須安裝下列元件：
+ **[https://code.visualstudio.com/docs/remote/ssh](https://code.visualstudio.com/docs/remote/ssh)**
+ — 適用於遠端開發的標準 VS Code Marketplace 擴充功能
+ **[Session Manager 外掛程式](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html)** — 安全工作階段管理的必要項目
+ **SSH 用戶端** — 大多數機器上的標準元件 ([Windows 建議使用 OpenSSH](https://learn.microsoft.com/en-us/windows-server/administration/openssh/openssh_install_firstuse))
+ **[https://code.visualstudio.com/docs/configure/command-line](https://code.visualstudio.com/docs/configure/command-line)**
+  通常包含在 VS Code 安裝中

**平台特定需求**
+ **Windows 使用者** — SSH 終端機連線需要 PowerShell 5.1 或更新版本

**網路連線需求**

您的本機機器必須具有 [Session Manager 端點](https://docs.aws.amazon.com/general/latest/gr/ssm.html)的網路存取權。例如，在美國東部 （維吉尼亞北部） (us-east-1) 中，這些可以是：
+ `[ssm.us-east-1.amazonaws.com](http://ssm.us-east-1.amazonaws.com)`
+ `ssm.us-east-1.api.aws`
+ `[ssmmessages.us-east-1.amazonaws.com](http://ssmmessages.us-east-1.amazonaws.com)`
+ `[ec2messages.us-east-1.amazonaws.com](http://ec2messages.us-east-1.amazonaws.com)`

### 映像要求
<a name="remote-ide-requirement-image"></a>

**SageMaker 分佈映像**

搭配遠端存取使用 SageMaker Distribution 時，請使用 [SageMaker Distribution](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-distribution.html) 2.7 版或更新版本。

**自訂映像**

當您使用[遠端存取自有映像 (BYOI)](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-byoi.html) 時，請務必遵循[自訂映像規格](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-byoi-specs.html)，並確保已安裝下列相依性：
+ `curl` 或 `wget` — 下載 AWS CLI 元件時需要
+ `unzip` — 擷取 AWS CLI 安裝檔案時需要
+ `tar` — 封存擷取的必要項目
+ `gzip` — 壓縮檔案處理時需要

### 執行個體要求
<a name="remote-ide-requirement-instance"></a>
+ **記憶體** - 8GB 或以上
+ 使用具有至少 8GB 記憶體的執行個體。由於記憶體不足 (小於 8GB)，因此*不*支援下列執行個體類型：`ml.t3.medium`、`ml.c7i.large`、`ml.c6i.large`、`ml.c6id.large` 和 `ml.c5.large`。如需更完整的執行個體類型清單，請參閱 [Amazon EC2 隨需定價頁面](https://aws.amazon.com/ec2/pricing/on-demand/)

## 透過預裝容器映像最佳化 Kubernetes 啟動時間
<a name="remote-ide-optimize-image"></a>

容器映像提取效能已成為許多 EKS 客戶的重大瓶頸，尤其是 AI/ML 工作負載依賴越來越大的容器映像。提取和解壓縮這些大型映像通常需要幾分鐘的時間，才會在每個 EKS 節點上使用它們。此延遲會在啟動 SageMaker Spaces 時增加大量延遲，並直接影響使用者體驗，特別是在需要快速啟動的環境中，例如筆記本、互動式開發任務。

映像預暖是一種技術，用於在需要特定容器映像之前，先將特定容器映像預先載入 EKS/HyperPod 叢集中的每個節點。叢集不會等待 Pod 觸發第一次提取大型映像，而是主動在所有節點下載和快取映像。這可確保在工作負載啟動時，必要的映像已在本機提供，消除長時間冷啟動延遲。映像預熱可改善 SageMaker Spaces 啟動速度，並為最終使用者提供更可預測和回應的體驗。

### 透過 DaemonSet 預填
<a name="remote-ide-optimize-image-dae"></a>

建議使用 DaemonSet 預先載入映像。DaemonSet 可確保叢集中每個節點上執行一個 Pod。DaemonSet Pod 內的每個容器都會參考您要快取的映像。當 Kubernetes 啟動 Pod 時，會自動提取映像，為每個節點上的快取暖機。

下列範例示範如何建立預先載入兩個 GPU 映像的 DaemonSet。每個容器都會執行輕量型`sleep infinity`命令，讓 Pod 保持作用中狀態，並將額外負荷降至最低。

```
cat <<EOF | kubectl apply -n "namespace_1" -f -
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: image-preload-ds
spec:
  selector:
    matchLabels:
      app: image-preloader
  template:
    metadata:
      labels:
        app: image-preloader
    spec:
      containers:
      - name: preloader-3-4-2
        image: public.ecr.aws/sagemaker/sagemaker-distribution:3.4.2-gpu
        command: ["sleep"]
        args: ["infinity"]
        resources:
          requests:
            cpu: 1m
            memory: 16Mi
          limits:
            cpu: 5m
            memory: 32Mi
      - name: preloader-3-3-2
        image: public.ecr.aws/sagemaker/sagemaker-distribution:3.3.2-gpu
        command: ["sleep"]
        args: ["infinity"]
        resources:
          requests:
            cpu: 1m
            memory: 16Mi
          limits:
            cpu: 5m
            memory: 32Mi
EOF
```

### 運作方式
<a name="remote-ide-optimize-image-how"></a>
+ 每個容器參考一個映像。
+ Kubernetes 必須在啟動容器之前下載每個映像。
+ 在每個節點上執行 Pod 後，映像會在本機快取。
+ 使用這些映像的任何工作負載現在都會以更快的速度啟動。

## 空間預設儲存體 (EBS)
<a name="space-storage"></a>

系統預設使用 EBS CSI 驅動程式為每個工作區佈建 EBS 儲存磁碟區。SageMaker 會建立用於工作區的 EBS 儲存類別，管理員可以使用範本設定自訂這些磁碟區的預設大小和大小上限。對於使用 CLI 工具的進階使用者，您也可以自訂工作區的儲存體方案，這可讓使用者利用其他儲存體方案，包括為其 EBS 磁碟區設定客戶管理的 KMS 金鑰。

請注意，EBS 磁碟區繫結至特定 AZ，這表示只能在與其儲存磁碟區相同的 AZ 節點上排程工作區。如果叢集容量存在，但不在正確的可用區域中，這可能會導致排程失敗。

## 其他儲存體
<a name="space-additional-storage"></a>

SageMaker Spaces 支援將 Amazon EFS、FSx for Lustre 或 S3 掛載點等其他儲存磁碟區連接至您的開發空間。這可讓您存取共用資料集、在專案上協同合作，或為您的工作負載使用高效能儲存。

### 先決條件
<a name="space-additional-storage-prereq"></a>

將額外的儲存體連接到空間之前，您必須：

1. 透過 EKS **附加元件安裝適當的 CSI 驅動程式**附加元件 (Amazon EFS CSI 驅動程式、Amazon FSx for Lustre CSI 驅動程式或 Amazon S3 CSI 驅動程式掛載點） [https://docs.aws.amazon.com/eks/latest/userguide/workloads-add-ons-available-eks.html](https://docs.aws.amazon.com/eks/latest/userguide/workloads-add-ons-available-eks.html) 

1. 遵循特定**儲存類型的 CSI 驅動程式文件，設定儲存資源和 PersistentVolumeClaims** 

1. **確定 PVC 可在**您計劃建立空間的相同命名空間中使用

### 將儲存體連接至空間
<a name="space-additional-storage-attach"></a>

設定 PersistentVolumeClaim 後，您可以使用 HyperPod CLI 或 kubectl 將其連接至空間。

**HyperPod CLI**

```
hyp create hyp-space \
    --name my-space \
    --display-name "My Space with FSx" \
    --memory 8Gi \
    --volume name=shared-fsx,mountPath=/shared,persistentVolumeClaimName=my-fsx-pvc
```

**kubectl**

```
apiVersion: workspace.jupyter.org/v1alpha1
kind: Workspace
metadata:
  name: my-space
spec:
  displayName: "My Space with FSx"
  desiredStatus: Running
  volumes:
  - name: shared-fsx
    mountPath: /shared
    persistentVolumeClaimName: my-fsx-pvc
```

### 多個磁碟區
<a name="space-additional-storage-multiple"></a>

您可以使用 CLI 指定多個`--volume`旗標，或使用 kubectl 指定`volumes`陣列中的多個項目，將多個額外的儲存磁碟區連接至單一空間。

**HyperPod CLI**

```
hyp create hyp-space \
    --name my-space \
    --display-name "My Space with Multiple Storage" \
    --memory 8Gi \
    --volume name=shared-efs,mountPath=/shared,persistentVolumeClaimName=my-efs-pvc \
    --volume name=datasets,mountPath=/datasets,persistentVolumeClaimName=my-s3-pvc
```

**kubectl**

```
apiVersion: workspace.jupyter.org/v1alpha1
kind: Workspace
metadata:
  name: my-space
spec:
  displayName: "My Space with Multiple Storage"
  desiredStatus: Running
  volumes:
  - name: shared-efs
    mountPath: /shared
    persistentVolumeClaimName: my-efs-pvc
  - name: datasets
    mountPath: /datasets
    persistentVolumeClaimName: my-s3-pvc
```

## 資源組態
<a name="space-resource-configuration"></a>

SageMaker Spaces 可讓您為開發環境設定運算資源，包括 CPU、記憶體和 GPU 資源，以符合工作負載需求。

### GPU 組態
<a name="space-gpu-configuration"></a>

SageMaker Spaces 使用 NVIDIA Multi-Instance GPU (MIG) 技術支援整個 GPU 配置和 GPU 分割。這可讓您針對不同類型的機器學習工作負載最佳化 GPU 使用率。

#### 整個 GPU 配置
<a name="space-gpu-whole"></a>

**HyperPod CLI**

```
hyp create hyp-space \
    --name gpu-space \
    --display-name "GPU Development Space" \
    --image public.ecr.aws/sagemaker/sagemaker-distribution:latest-gpu \
    --memory 16Gi \
    --gpu 1 \
    --gpu-limit 1
```

**kubectl**

```
apiVersion: workspace.jupyter.org/v1alpha1
kind: Workspace
metadata:
  name: gpu-space
spec:
  displayName: "GPU Development Space"
  image: "public.ecr.aws/sagemaker/sagemaker-distribution:latest-gpu"
  desiredStatus: Running
  resources:
    requests:
      memory: "16Gi"
      nvidia.com/gpu: "1"
    limits:
      memory: "16Gi"
      nvidia.com/gpu: "1"
```

#### GPU 分割 (MIG)
<a name="space-gpu-mig"></a>

使用 NVIDIA Multi-Instance GPU (MIG) 技術的 GPU 分割可讓您將單一 GPU 分割為較小的隔離執行個體。您的 HyperPod 叢集必須具有支援 MIG 的 GPU 節點，並已設定 MIG 設定檔。如需在 HyperPod 叢集上設定 MIG 的詳細資訊，請參閱[使用 NVIDIA MIG 的 GPU 分割](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-gpu-partitioning-setup.html)。

**HyperPod CLI**

```
hyp create hyp-space \
    --name mig-space \
    --display-name "MIG GPU Space" \
    --image public.ecr.aws/sagemaker/sagemaker-distribution:latest-gpu \
    --memory 8Gi \
    --accelerator-partition-type mig-3g.20gb \
    --accelerator-partition-count 1
```

**kubectl**

```
apiVersion: workspace.jupyter.org/v1alpha1
kind: Workspace
metadata:
  name: mig-space
spec:
  displayName: "MIG GPU Space"
  image: "public.ecr.aws/sagemaker/sagemaker-distribution:latest-gpu"
  desiredStatus: Running
  resources:
    requests:
      memory: "8Gi"
      nvidia.com/mig-3g.20gb: "1"
    limits:
      memory: "8Gi"
      nvidia.com/mig-3g.20gb: "1"
```

## 生命週期
<a name="space-lifecycle"></a>

生命週期組態提供在建立或啟動工作區時執行的啟動指令碼。這些指令碼可讓管理員在啟動期間自訂工作區環境。這些是大小上限為 1 KB 的 bash 指令碼。如果您需要較大的設定組態，建議您將指令碼新增至容器映像，並從生命週期組態觸發指令碼。

我們利用 Kubernetes 容器生命週期掛鉤來提供此功能 [https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/](https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/)：//。請注意，Kubernetes 不保證啟動指令碼何時會相對於容器的進入點執行。

## 閒置關閉
<a name="space-idle-shutdown"></a>

設定閒置工作區的自動關閉，以最佳化資源用量。

### 閒置關閉
<a name="space-idle-shutdown-spec"></a>

```
idleShutdown:
  enabled: true
  idleShutdownTimeoutMinutes: 30
  detection:
    httpGet:
      path: /api/idle
      port: 8888
      scheme: HTTP
```

### Parameters
<a name="space-idle-shutdown-parameter"></a>

**enabled** （布林值，必要） - 啟用或停用工作區的閒置關閉。

**idleShutdownTimeoutMinutes** （整數，必要） - 工作區關閉之前閒置的分鐘數。最小值為 1。

**detection** （物件，必要） - 定義如何偵測工作區閒置狀態。

**detection.httpGet** （物件、選用） - 用於閒置偵測的 HTTP 端點組態。使用 Kubernetes HTTPGetAction 規格。
+ **path** - 請求的 HTTP 路徑
+ **連接埠** - 連接埠號碼或名稱
+ scheme**** - HTTP 或 HTTPS （預設：HTTP)

### 組態位置
<a name="space-idle-shutdown-configure"></a>

**工作區組態**

直接在工作區規格中定義閒置關閉：

```
apiVersion: workspace.jupyter.org/v1alpha1
kind: Workspace
metadata:

      name: my-workspace
spec:
  displayName: "Development Workspace"
  image:
      jupyter/scipy-notebook:latest
  idleShutdown:
    enabled: true

      idleShutdownTimeoutMinutes: 30
    detection:
      httpGet:
        path:
      /api/idle
        port: 8888
```

**範本組態**

在 WorkspaceTemplate 中定義預設閒置關閉行為：

```
apiVersion: workspace.jupyter.org/v1alpha1
kind: WorkspaceTemplate
metadata:
  name: jupyter-template
spec:
  displayName: "Jupyter Template"
  defaultImage: jupyter/scipy-notebook:latest
  defaultIdleShutdown:
    enabled: true
    idleShutdownTimeoutMinutes: 30
    detection:
      httpGet:
        path: /api/idle
        port: 8888
  idleShutdownOverrides:
    allow: true
    minTimeoutMinutes: 60
    maxTimeoutMinutes: 240
```

### 範本繼承和覆寫
<a name="space-idle-shutdown-inherit"></a>

使用範本的工作區會自動繼承範本的`defaultIdleShutdown`組態。如果範本允許，工作區可以覆寫此組態。

**覆寫政策**

範本透過 控制覆寫行為`idleShutdownOverrides`：

**allow** （布林值，預設值：true)- 工作區是否可以覆寫預設的閒置關機組態。

**minTimeoutMinutes** （整數、選用） - 工作區覆寫允許的最小逾時值。

**maxTimeoutMinutes** （整數、選用） - 工作區覆寫允許的逾時值上限。

**繼承範例**

工作區會繼承範本預設值：

```
apiVersion: workspace.jupyter.org/v1alpha1
kind: Workspace
metadata:
  name: my-workspace
spec:
  displayName: "My Workspace"
  templateRef:
    name: jupyter-template
  # Inherits defaultIdleShutdown from template
```

**覆寫範例**

工作區覆寫範本預設值：

```
apiVersion: workspace.jupyter.org/v1alpha1
kind: Workspace
metadata:
  name: my-workspace
spec:
  displayName: "My Workspace"
  templateRef:
    name: jupyter-template
  idleShutdown:
    enabled: true
    idleShutdownTimeoutMinutes: 60  # Must be within template bounds
    detection:
      httpGet:
        path: /api/idle
        port: 8888
```

**鎖定組態**

防止工作區覆寫：

```
apiVersion: workspace.jupyter.org/v1alpha1
kind: WorkspaceTemplate
metadata:
  name: locked-template
spec:
  displayName: "Locked Template"
  defaultImage: jupyter/scipy-notebook:latest
  defaultIdleShutdown:
    enabled: true
    idleShutdownTimeoutMinutes: 30
    detection:
      httpGet:
        path: /api/idle
        port: 8888
  idleShutdownOverrides:
    allow: false  # Workspaces cannot override
```

### Behavior (行為)
<a name="space-idle-shutdown-behavior"></a>

啟用閒置關閉時，系統會使用設定的 HTTP 端點定期檢查工作區的活動。如果端點指出工作區在指定的逾時持續時間內處於閒置狀態，則工作區會自動停止。您可以視需要手動重新啟動工作區。

## 範本更新
<a name="customization-template-updates"></a>

Kubectl 或 Hyperpod CLI 和 SDK 等用戶端工具可用於管理 EKS 叢集中的空間。管理員可以為預設空間組態佈建空間範本，而資料科學家可以自訂其整合的開發環境，而不需要了解基礎 Kubernetes 複雜性。如需詳細使用說明，請參閱位於 https：//[https://sagemaker-hyperpod-cli.readthedocs.io/en/latest/index.html](https://sagemaker-hyperpod-cli.readthedocs.io/en/latest/index.html) 的 CLI 和 SDK 文件。

管理員可以在空間範本上執行 CRUD 操作，在建立空間時做為基本組態。資料科學家可以在 Spaces 上執行 CRUD 操作並覆寫各種參數，包括特定運算節點的多執行個體 GPU 設定檔。他們可以透過遠端 VSCode 存取和 Web UI 來啟動、停止和連線至 Spaces。空間範本更新時，任何後續建立的空間都會使用更新範本中的設定進行設定。更新或啟動現有 Spaces 時，將會執行合規檢查。如果任何設定超出限制或不相符，則 Spaces 將無法更新或啟動。

## 使用 hyp cli 和 kubectl
<a name="customization-hyp-cli"></a>

使用者可以使用 Hyperpod CLI 在範本上執行 CRUD

```
### 1. Create a Space Template
hyp create hyp-space-template --file template.yaml

### 2. List Space Templates
hyp list hyp-space-template
hyp list hyp-space-template --output json

### 3. Describe a Space Template
hyp describe hyp-space-template --name my-template
hyp describe hyp-space-template --name my-template --output json

### 4. Update a Space Template
hyp update hyp-space-template --name my-template --file updated-template.yaml

### 5. Delete a Space Template
hyp delete hyp-space-template --name my-template
```

若要建立自訂範本，您可以使用我們的系統範本做為起點。此範本適用於類似 SMD 的影像，但可以根據管理員使用的映像進行自訂。

自訂 JupyterLab 範本範例：

```
apiVersion: workspace.jupyter.org/v1alpha1
kind: WorkspaceTemplate
metadata:
  name: my-jupyter-template
  namespace: my-namespace
spec:
  displayName: "My Custom Jupyter Lab"
  description: "Custom Jupyter Lab with specific configurations"
  defaultImage: "public.ecr.aws/sagemaker/sagemaker-distribution:latest-cpu"
  allowedImages:
    - "public.ecr.aws/sagemaker/sagemaker-distribution:latest-cpu"
    - "public.ecr.aws/sagemaker/sagemaker-distribution:latest-gpu"
  defaultResources:
    requests:
      cpu: "1"
      memory: "4Gi"
    limits:
      cpu: "4"
      memory: "16Gi"
  primaryStorage:
    defaultSize: "10Gi"
    minSize: "5Gi"
    maxSize: "50Gi"
    defaultStorageClassName: "sagemaker-spaces-default-storage-class"
    defaultMountPath: "/home/sagemaker-user"
  defaultContainerConfig:
    command: ["/opt/amazon/sagemaker/workspace/bin/entrypoint-workspace-jupyterlab"]
  defaultPodSecurityContext:
    fsGroup: 1000
  defaultOwnershipType: "Public"
  defaultAccessStrategy:
    name: "hyperpod-access-strategy"
  allowSecondaryStorages: true
  appType: "jupyterlab"
```

自訂程式碼編輯器範本範例：

```
apiVersion: workspace.jupyter.org/v1alpha1
kind: WorkspaceTemplate
metadata:
  name: my-code-editor-template
  namespace: my-namespace
spec:
  displayName: "My Custom Code Editor"
  description: "Custom Code Editor with specific configurations"
  defaultImage: "public.ecr.aws/sagemaker/sagemaker-distribution:latest-cpu"
  allowedImages:
    - "public.ecr.aws/sagemaker/sagemaker-distribution:latest-cpu"
    - "public.ecr.aws/sagemaker/sagemaker-distribution:latest-gpu"
  defaultResources:
    requests:
      cpu: "1"
      memory: "4Gi"
    limits:
      cpu: "4"
      memory: "16Gi"
  primaryStorage:
    defaultSize: "10Gi"
    minSize: "5Gi"
    maxSize: "50Gi"
    defaultStorageClassName: "sagemaker-spaces-default-storage-class"
    defaultMountPath: "/home/sagemaker-user"
  defaultContainerConfig:
    command: ["/opt/amazon/sagemaker/workspace/bin/entrypoint-workspace-code-editor"]
  defaultPodSecurityContext:
    fsGroup: 1000
  defaultOwnershipType: "Public"
  defaultAccessStrategy:
    name: "hyperpod-access-strategy"
  allowSecondaryStorages: true
  appType: "code-editor"
```