

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# IDEs とノートブック


Amazon SageMaker は SageMaker HyperPod EKS クラスターに新機能を導入します。これにより、AI 開発者はインタラクティブな機械学習ワークロードを HyperPod EKS クラスターで直接実行できます。この機能は Amazon SageMaker Spaces という新しいアドオンを導入し、AI 開発者がノートブックを実行するための自己完結型環境を作成および管理できるようにします。

管理者は、SageMaker HyperPod コンソールを使用してクラスターにアドオンをインストールし、イメージ、コンピューティングリソース、ノートブック設定用のローカルストレージ (開発スペースにアタッチされる追加ストレージ）、ファイルシステム、初期化スクリプトなどのデフォルトのスペース設定を定義できます。管理者エクスペリエンスを簡素化するために、デフォルト設定でワンクリックインストールオプションを使用できます。管理者は、SageMaker HyperPod コンソール、kubectl、または HyperPod CLI を使用して、オペレータのインストール、デフォルト設定の作成、すべてのスペースの管理を一元的に行うことができます。

AI 開発者は、HyperPod CLI を使用して開発スペースを作成、更新、削除できます。管理者が提供するデフォルト設定を使用することも、設定をカスタマイズすることもできます。AI 開発者は、ローカル VS Code IDEs、および/または管理者が設定したカスタム DNS ドメインで JupyterLab または CodeEditor IDE をホストするウェブブラウザを使用して、HyperPod のスペースにアクセスできます。また、kubernetes のポート転送機能を使用して、ウェブブラウザからスペースにアクセスすることもできます。

## 管理者

+ [アクセス許可の設定](permission-setup.md)
+ [SageMaker AI Spaces アドオンをインストールする](operator-install.md)
+ [アドオンをカスタマイズする](customization.md)
+ [ユーザーを追加し、サービスアカウントをセットアップする](add-user.md)
+ [制限](ds-limits.md)
+ [HyperPod のインタラクティブスペースのタスクガバナンス](task-governance.md)
+ [オブザーバビリティ](observability.md)

## データサイエンティスト

+ [スペースの作成と管理](create-manage-spaces.md)
+ [ウェブブラウザアクセス](browser-access.md)
+ [SageMaker Spaces へのリモートアクセス](vscode-access.md)

## SageMaker Spaces マネージドインスタンスの料金


SageMaker Spaces アドオン/オペレーターには追加料金はかかりません。ただし、*リモート IDE 接続*機能に必要な SSH-over-SSM トンネリングをサポートするために、SageMaker Spaces は AWSマネージドインスタンスを使用します。このインスタンスは SSM でアドバンストオンプレミスインスタンスとして登録されるため、コンピューティング時間ごとに課金されます。

 AWS Systems Manager の料金ページの「オンプレミスインスタンス管理」料金を参照してください。 AWS Systems Manager の料金: [https://aws.amazon.com/systems-manager/pricing/](https://aws.amazon.com/systems-manager/pricing.com)

# アクセス許可の設定


## アドオンとその依存関係に必要なロール


### SageMaker HyperPod の SageMaker スペースに必要な IAM ロール


**SageMaker HyperPod (EKS) クラスターで SageMaker Spaces (a.k.aSageMaker** SageMaker **IDE / Notebooks SageMaker**) 機能を有効にする場合は、複数の IAM ロールを作成して割り当てる必要があります。 HyperPod これらのロールは、安全なアクセス、ルーティング、リモート IDE セッション、EBS ストレージのプロビジョニングをサポートします。次の表は、4 つのロールと、必要なタイミングをまとめたものです。

### ロールの概要テーブル



| IAM ロール | 必須? | 目的 | 誰がそれを使用しますか? | SageMaker コンソールでカスタマイズが許可されますか? | 
| --- | --- | --- | --- | --- | 
|  Spaces アドオン実行ロール  |  常に必須  |  Spaces コントローラーによるスペースの管理、署名付き URLsの生成、SSM セッションの管理を許可する  |  アドオンコントローラーポッド (特権)  |  ✔ はい  | 
|  クラスター内ルーターロール  |  WebUI アクセスに必要です  |  ルーターポッドに JWT 署名の KMS オペレーションの実行を許可する (WebUI 認証)  |  クラスター内ルーターポッド (特権)  |  ✔ はい  | 
|  SSM マネージドインスタンスロール  |  リモート IDE アクセスに必要です  |  SSM エージェントのサイドカーが SSH-over-SSM リモート IDE セッションに使用する  |  スペース IDE ポッドの SSM エージェント (アドオンポッドではない)  |  ✔ はい  | 
|  EBS CSI ドライバーアドオンの IAM ロール  |  常に必須  |  EBS CSI ドライバーが Spaces ワークロードのボリュームcreate/attach/modifyできるようにする  |  EBS CSI ドライバーアドオン  |  自動作成  | 
|  外部 DNS アドオンの IAM ロール  |  WebUI アクセスに必要です  |  これにより、スペースエンドポイントとクラスター内のコンポーネントに、お客様の Route 53 ホストゾーンで DNS 名を自動的に割り当てることができます。  |  外部 DNS アドオン  |  自動作成  | 

### 1. Spaces アドオン実行ロール (必須)


Spaces アドオン実行ロールは、EKS アドオンを介してインストールされる管理コンポーネントである SageMaker Spaces アドオンコントローラーポッドで使用されるため、常に必要です。このロールにより、コントローラーはスペースの管理、リソースのプロビジョニング、SSM とのやり取り、リモート IDE と WebUI アクセスの両方の署名付き URLs の生成を行うことができます。また、WebUI https リクエストを認証するためのリクエスト署名に使用される KMS アクセスもサポートしています。このロールは、SageMaker コンソールを介して SageMaker Spaces アドオンがインストールされているときに自動的に作成できます。手動作成の場合、 は `AmazonSageMakerSpacesControllerPolicy`管理ポリシー AWS を提供します。

**参照信頼ポリシー**

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "pods.eks.amazonaws.com"
      },
      "Action": [
          "sts:AssumeRole",
          "sts:TagSession"
      ],
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "{{accountId}}",
          "aws:SourceArn": "arn:aws:eks:{{region}}:{{accountId}}:cluster/{{eksClusterName}}"
        }
      }
    }
  ]
}
```

### 2. クラスター内ルーターロール (WebUI 認証に必須)


クラスター内ルーターロールは、Spaces WebUI セッションを認証する特権コンポーネントである**ルーターポッド**によって使用されます。ルーターは KMS キーを使用して、特定の Spaces へのユーザーアクセスを許可する JWT トークンを作成して署名します。このロールにより、ルーターポッドはデータキーを生成して復号できます。コントローラーロールと同様に、タグおよびクラスターベースのスコープ制限を使用してセキュリティを適用します。このロールは、Spaces アドオンが AWS SageMaker コンソールを介してインストールされたときに自動的に生成できますが、お客様は手動で作成できます。

**参照信頼ポリシー**

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "pods.eks.amazonaws.com"
      },
      "Action": [
          "sts:AssumeRole",
          "sts:TagSession"
      ],
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "{{accountId}}",
          "aws:SourceArn": "arn:aws:eks:{{region}}:{{accountId}}:cluster/{{eksClusterName}}"
        }
      }
    }
  ]
}
```

**リファレンスアクセス許可ポリシー**

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "KMSDescribeKey",
            "Effect": "Allow",
            "Action": [
                "kms:DescribeKey"
            ],
            "Resource": "arn:aws:kms:{{region}}:{{accountId}}:key/{{kmsKeyId}}"
        },
        {
            "Sid": "KMSKeyOperations",
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey",
                "kms:Decrypt"
            ],
            "Resource": "arn:aws:kms:{{region}}:{{accountId}}:key/{{kmsKeyId}}",
            "Condition": {
                "StringEquals": {
                    "kms:EncryptionContext:sagemaker:component": "amazon-sagemaker-spaces",
                    "kms:EncryptionContext:sagemaker:eks-cluster-arn": "${aws:PrincipalTag/eks-cluster-arn}"
                }
            }
        }
    ]
}
```

### 3. SSM マネージドインスタンスロール (リモート IDE アクセスに必要)


SSM マネージドインスタンスロールは、リモート IDE アクセスを有効にするために SSM マネージドインスタンスを登録するときに渡されます。このロールにより、SSM エージェントはポッドを SSM マネージドインスタンスとして登録し、リモート IDE (SSH-over-SSM) 接続に SSM セッションマネージャーチャネルを使用できます。SageMaker コンソールを使用する場合 AWS に自動的に作成できます。手動デプロイの場合、お客様はこのロールを作成し、Spaces アドオンに提供する必要があります。コントローラーポッド自体はこのロールを引き受けるのではなく、 を呼び出すときにのみ提供されます`ssm:CreateActivation`。

**参照信頼ポリシー**

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "ssm.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "{{account}}"
                },
                "ArnEquals": {
                    "aws:SourceArn": "arn:aws:ssm:{{region}}:{{account}}:*"
                }
            }
        }
    ]
}
```

**リファレンスアクセス許可ポリシー**

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ssm:DescribeAssociation"
      ],
      "Resource": [
        "arn:aws:ssm:{{region}}:{{account}}:association/*",
        "arn:aws:ssm:{{region}}:{{account}}:document/*",
        "arn:aws:ec2:{{region}}:{{account}}:instance/*",
        "arn:aws:ssm:{{region}}:{{account}}:managed-instance/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssm:GetDocument",
        "ssm:DescribeDocument"
      ],
      "Resource": "arn:aws:ssm:{{region}}:{{account}}:document/*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssm:GetParameter",
        "ssm:GetParameters"
      ],
      "Resource": "arn:aws:ssm:{{region}}:{{account}}:parameter/*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssm:ListInstanceAssociations"
      ],
      "Resource": [
        "arn:aws:ec2:{{region}}:{{account}}:instance/*",
        "arn:aws:ssm:{{region}}:{{account}}:managed-instance/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssm:PutComplianceItems"
      ],
      "Resource": [
        "arn:aws:ec2:{{region}}:{{account}}:instance/*",
        "arn:aws:ssm:{{region}}:{{account}}:managed-instance/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssm:UpdateAssociationStatus"
      ],
      "Resource": [
        "arn:aws:ssm:{{region}}:{{account}}:document/*",
        "arn:aws:ec2:{{region}}:{{account}}:instance/*",
        "arn:aws:ssm:{{region}}:{{account}}:managed-instance/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssm:UpdateInstanceAssociationStatus"
      ],
      "Resource": [
        "arn:aws:ssm:{{region}}:{{account}}:association/*",
        "arn:aws:ec2:{{region}}:{{account}}:instance/*",
        "arn:aws:ssm:{{region}}:{{account}}:managed-instance/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssm:UpdateInstanceInformation"
      ],
      "Resource": [
        "arn:aws:ec2:{{region}}:{{account}}:instance/*",
        "arn:aws:ssm:{{region}}:{{account}}:managed-instance/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssm:GetDeployablePatchSnapshotForInstance",
        "ssm:GetManifest",
        "ssm:ListAssociations",
        "ssm:PutInventory",
        "ssm:PutConfigurePackageResult"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssmmessages:CreateControlChannel",
        "ssmmessages:CreateDataChannel",
        "ssmmessages:OpenControlChannel",
        "ssmmessages:OpenDataChannel"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2messages:AcknowledgeMessage",
        "ec2messages:DeleteMessage",
        "ec2messages:FailMessage",
        "ec2messages:GetEndpoint"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2messages:GetMessages",
        "ec2messages:SendReply"
      ],
      "Resource": "*",
      "Condition": {
        "ArnLike": {
          "ssm:SourceInstanceARN": "arn:aws:ssm:{{region}}:{{account}}:managed-instance/*"
        }
      }
    }
  ]
}
```

### 4. EBS CSI ドライバーアドオンの IAM ロール


EBS CSI ドライバーは Spaces ワークロードの永続ボリュームをプロビジョニングするため、EBS CSI ドライバーの IAM ロールが必要です。 AWSマネージド [AmazonEBSCSIDriverPolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEBSCSIDriverPolicy.html) はベースラインアクセス許可を提供しますが、SageMaker HyperPod クラスターには、高速スナップショット復元の作成、クラスター所有ボリュームのタグ付け、HyperPod マネージドノードのボリュームのアタッチ/デタッチなどの[追加機能](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-ebs.html#sagemaker-hyperpod-eks-ebs-setup)が必要です。これらのアクセス許可には、 などの SageMaker 固有の APIs も含まれます`sagemaker:AttachClusterNodeVolume`。EBS CSI ドライバーがインストールされていない場合、Spaces アドオンのインストール中に SageMaker コンソールによってこのロールが自動的に作成されるようになり、**お客様のアクションは必要ありません**。

### 5. 外部 DNS アドオンの IAM ロール


外部 DNS アドオンは、HyperPod クラスター上のサービスとイングレスリソースの DNS レコードを管理します。これにより、スペースエンドポイントとクラスター内のコンポーネントに、お客様の Route 53 ホストゾーンで DNS 名を自動的に割り当てることができます。現在、お客様は EKS コンソールのワンクリックオプションを使用して外部 DNS を手動でインストールすることがよくあります。SageMaker Spaces エクスペリエンスの向上の一環として、Spaces アドオンのインストール中に SageMaker コンソールによってこのロールが自動的に作成されるようになり、**お客様のアクションは必要ありません**。

## AWS Toolkit が SageMaker スペースにアクセスするためのアクセス許可の設定


 AWS VS Code Toolkit リソースエクスプローラーサイドパネルが SageMaker Spaces を検出して接続できるようにするには、次の IAM アクセス許可が必要です。これらのアクセス許可により、Toolkit は使用可能な SageMaker HyperPod クラスターを一覧表示し、クラスターの詳細を取得して、関連付けられた Amazon EKS クラスターの接続トークンを取得できます。

**必要な IAM ポリシー**

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "SageMakerListClusters",
            "Effect": "Allow",
            "Action": "sagemaker:ListClusters",
            "Resource": "*"
        },
        {
            "Sid": "SageMakerDescribeCluster",
            "Effect": "Allow",
            "Action": "sagemaker:DescribeCluster",
            "Resource": "arn:aws:sagemaker:{{region}}:{{account}}:cluster/cluster-name"
        },
        {
            "Sid": "EksDescribeCluster",
            "Effect": "Allow",
            "Action": "eks:DescribeCluster",
            "Resource": "arn:aws:eks:{{region}}:{{account}}:cluster/cluster-name"
        },
        {
            "Sid": "EksGetToken",
            "Effect": "Allow",
            "Action": "eks:GetToken",
            "Resource": "*"
        }
    ]
}
```

**スコープに関する推奨事項**
+ cluster-name を、ユーザーがアクセスする必要がある特定の SageMaker HyperPod クラスター (複数可) に置き換えます。
+ eks:GetToken アクションは現在リソースレベルの制限をサポートしておらず、リソース「\$1」を使用する必要があります。これは AWS サービスの制限です。クライアント側の認証は、[EKS アクセスエントリ](https://docs.aws.amazon.com/eks/latest/userguide/access-entries.html)を介して実行されます。

# SageMaker AI Spaces アドオンをインストールする


## 依存関係


**Amazon EKS Pod Identity Agent アドオン**
+ オペレーターが AWS 認証情報を取得するために必要です
+ **通常、ほとんどの EKS クラスターにプリインストールされています** 
+ インストール: EKS アドオン経由

**証明書マネージャー**
+ TLS 証明書管理に必須
+ HyperPod クイッククラスター作成を使用する場合に**プリインストール済み** 
+ インストール: EKS アドオン経由

**EBS CSI ドライバー**
+ スペース永続ストレージ (EBS ボリューム) に必要です
+ SageMaker コンソールを使用してインストールするときに**自動的に**インストールされる
+ `AmazonEBSCSIDriverPolicy` \$1 HyperPod 固有のアクセス許可を持つ IAM ロールが必要です
+ インストール: EKS アドオン経由。ただし、HyperPod に必要な追加のアクセス許可をインストールするには、 ガイドに従ってください。
+ リファレンス: [ HyperPod での Amazon EBS CSI ドライバーの使用](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-ebs.html)

## WebUI Access のその他の依存関係


**AWS Load Balancerコントローラー**
+ HyperPod クイッククラスター作成を使用する場合に**プリインストール済み** 
+ インストール: Helm 経由
+ 手動インストールガイド: [AWS Load Balancerコントローラーのインストール](https://docs.aws.amazon.com/eks/latest/userguide/lbc-helm.html)

**外部 DNS**
+ WebUI アクセスにカスタムドメインを使用する場合に必要です
+ Route53 DNS レコードを自動的に管理します
+ Route53 アクセス許可を持つ IAM ロールが必要です
+ インストール: EKS アドオン経由

## インストール


開始する前に、以下を確認してください。
+ Kubernetes バージョン 1.30 以降を実行しているワーカーノードが 1 つ以上あるアクティブな SageMaker HyperPod クラスター
+ 最小インスタンスタイプ (XX vCPU、YY GiB メモリ) のワーカーノードが 1 つ以上ある

### Amazon SageMaker Spaces アドオンのインストール


SageMaker Spaces アドオンは、デフォルト設定の場合はクイックインストール、詳細設定の場合はカスタムインストールのいずれかを使用してインストールできます。

#### クイックインストール


1. Amazon SageMaker コンソール ([https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)) を開きます。

1. クラスターリストからクラスターを選択します。

1. IDE およびノートブックタブで、Amazon SageMaker Spaces を見つけ、クイックインストールを選択します。

クイックインストールは自動的に行われます。
+ アドオンに必要な IAM ロールを作成します
+ Systems Manager に必要な IAM ロールでリモートアクセスモードを有効にする
+ アドオンをインストールし、ポッド ID の関連付けを設定します

#### カスタムインストール


1. Amazon SageMaker コンソール ([https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)) を開きます。

1. クラスターリストからクラスターを選択します。

1. IDE およびノートブックタブで、Amazon SageMaker Spaces を見つけ、カスタムインストールを選択します。

1. 次のオプションを設定します。

   **アドオンに必要な IAM ロール**
   + 推奨されるアクセス許可を持つ新しい IAM ロールを作成するか、必要なアクセス許可を持つ既存のロールを使用するかを選択します (上記の「管理者アクセス許可の設定」セクションを参照）。

   **リモートアクセス設定**
   + を有効にして、ユーザーが AWS Systems Manager を使用してローカル Visual Studio Code からスペースに接続できるようにします
   + SSM マネージドインスタンスロールの場合:
     + **新しいロールの作成** – アドオンは、必要な Systems Manager アクセス許可を持つロールを作成および管理します。
     + **既存のロールを使用する** – 必要な Systems Manager アクセス許可を持つ事前設定されたロールを選択します。
   + Spaces アドオン実行ロールに SSM マネージドインスタンスロールの PassRole アクセス許可があることを確認します。
**注記**  
リモートアクセスを有効にすると、 AWS Systems Manager のアドバンストインスタンス層が有効になり、インスタンスごとの追加料金が発生します。料金の詳細については、「Systems Manager の料金」を参照してください。

   **ウェブブラウザのアクセス設定**
   + Route 53 DNS 証明書と SSL 証明書を使用してユーザーがウェブブラウザ経由でスペースにアクセスできるようにするには、 を有効にします。
   + **前提条件:** ブラウザアクセスを有効にする前に AWS Load Balancer Controller をインストールする
   + **Route 53 ホストゾーン:** 所有しているドメインまたはサブドメインの既存のホストゾーンを選択します。DNS 管理と SSL 証明書の検証を有効にするには、ドメインまたはサブドメインが登録され、ユーザーの管理下にある必要があります。

     ドメイン登録の詳細については、Route 53 デベロッパーガイド[の「新しいドメインの登録](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-register.html#domain-register-procedure-section)」を参照してください。
   + **サブドメイン:** サブドメインプレフィックスを入力します (英数字とハイフンのみ、最大 63 文字)
   + **SSL 証明書:** AWS Certificate Manager から既存の SSL 証明書を選択します。個々のスペースアクセス URLs をサポートするには、証明書が有効で、サブドメイン (subdomain.domain.com など) とワイルドカードサブドメイン (\$1.subdomain.domain.com など) の両方をカバーする必要があります。
   +  **トークン署名キー:** JWT トークン署名用の AWS KMS 非対称キーを選択します。キーは、安全な WebUI アクセスのために認証トークンを暗号化するために使用されます。KMS で新しい非対称キーを作成するか、アカウントがアクセスできる既存のキーを選択できます。
**注記**  
ホストゾーンと DNS クエリには、標準の Route 53 料金が適用されます。料金の詳細については、Route 53の料金」を参照してください。

#### EKS アドオンのインストール - WebUI を使用した Jupyter K8s


##### 設定ファイル


を作成する`addon-config.yaml`:

```
jupyter-k8s:
  workspacePodWatching:
    enable: true

jupyter-k8s-aws-hyperpod:
  clusterWebUI:
    enabled: true
    domain: "<DOMAIN_NAME>"
    awsCertificateArn: "<ACM_CERTIFICATE_ARN>"
    kmsEncryptionContext:
      enabled: true
    traefik:
      shouldInstall: true
    auth:
      kmsKeyId: "<KMS_KEY_ARN>"
```

**次のプレースホルダーを置き換えます。**
+ <DOMAIN\$1NAME>: ドメイン名 (例: `jupyter.example.com`)
+ <ACM\$1CERTIFICATE\$1ARN>: ACM 証明書 ARN (例: `arn:aws:acm:us-west-2:111122223333:certificate/12345678-1234-1234-1234-123456789012` 
+ <KMS\$1KEY\$1ARN>: KMS キー ARN (例: `arn:aws:kms:us-west-2:111122223333:key/12345678-1234-1234-1234-123456789012`

##### によるインストール AWS CLI


```
aws eks create-addon \
  --cluster-name <CLUSTER_NAME> \
  --addon-name amazon-sagemaker-spaces \
  --configuration-values file://addon-config.yaml \
  --resolve-conflicts OVERWRITE \
  --region <AWS_REGION>
```

**既存のアドオンを更新するには:**

```
aws eks update-addon \
  --cluster-name <CLUSTER_NAME> \
  --addon-name amazon-sagemaker-spaces \
  --configuration-values file://addon-config.yaml \
  --resolve-conflicts OVERWRITE \
  --region <AWS_REGION>
```

##### によるインストール AWS マネジメントコンソール


1. **EKS コンソール**に移動する → クラスターを選択する

1. **アドオン**タブをクリック → **新しい** を追加

1. **SageMaker Spaces **アドオンを選択する

1. 上記の YAML 設定を**オプションの 設定**に貼り付ける

1. **次**へをクリックし、アドオン設定を確認します。

1. [**作成**] をクリックします。

##### インストールの検証


```
# Check addon status
aws eks describe-addon \
  --cluster-name <CLUSTER_NAME> \
  --addon-name amazon-sagemaker-spaces \
  --region <AWS_REGION>
```

##### ALB 属性のカスタマイズ


デフォルトでは、アドオンはウェブ UI で使用するパブリックロードバランサーを作成します。EKS アドオンプロパティを使用してロードバランサー属性をカスタマイズできます。

内部 ALB を作成するには、スキームを に設定します`internal`。

```
jupyter-k8s-aws-hyperpod:
  clusterWebUI:
    enabled: true
    domain: "<DOMAIN_NAME>"
    awsCertificateArn: "<ACM_CERTIFICATE_ARN>"
    alb:
      scheme: "internal"  # Default is "internet-facing"
```

`alb.annotations` フィールドを使用して ALB 設定をカスタマイズすることもできます。

```
jupyter-k8s-aws-hyperpod:
  clusterWebUI:
    enabled: true
    domain: "<DOMAIN_NAME>"
    awsCertificateArn: "<ACM_CERTIFICATE_ARN>"
    alb:
      scheme: "internal"
      annotations:
        alb.ingress.kubernetes.io/security-groups: "<SECURITY_GROUP_ID>"
        alb.ingress.kubernetes.io/subnets: "<SUBNET_ID_1>,<SUBNET_ID_2>"
        alb.ingress.kubernetes.io/load-balancer-attributes: "idle_timeout.timeout_seconds=60"
```

**一般的な ALB 注釈:**
+ `alb.ingress.kubernetes.io/security-groups`: ALB のセキュリティグループを指定する
+ `alb.ingress.kubernetes.io/subnets`: ALB のサブネットを指定する
+ `alb.ingress.kubernetes.io/load-balancer-attributes`: ALB 属性を設定する (アイドルタイムアウト、アクセスログなど)

使用可能なすべての注釈については、[AWS 「 Load Balancer Controller のドキュメント](https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/guide/ingress/annotations/)」を参照してください。

### アドオンのアップグレード/バージョニング


```
aws eks update-addon \
  --cluster-name <CLUSTER_NAME> \
  --addon-name amazon-sagemaker-spaces \
  --configuration-values file://addon-config.yaml \
  --resolve-conflicts OVERWRITE \
  --region <AWS_REGION>
```

# アドオンをカスタマイズする


## テンプレート


テンプレートは再利用可能なワークスペース設定であり、ワークスペース作成の管理者が管理する設計図として機能します。ワークスペース設定値のデフォルトと、データサイエンティストが実行できる操作を制御するガードレールを提供します。テンプレートはクラスターレベルに存在し、名前空間間で再利用できます。

SageMaker Spaces は、データサイエンティストの開始点として 2 つのシステムテンプレートを作成します。1 つはコードエディタ用、もう 1 つは JupyterLab 用です。これらのシステムテンプレートはアドオンによって管理され、直接編集することはできません。代わりに、管理者は新しいテンプレートを作成し、デフォルトとして設定できます。

## タスクガバナンス


```
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 / カスタムイメージ


お客様は、デフォルトのイメージと許可されたイメージのリストを提供することで、 テンプレートを使用してイメージポリシーを設定できます。さらに、管理者はデータサイエンティストに独自のカスタムイメージの持ち込みを許可するかどうかを選択できます。システムはデフォルトで最新の SageMaker ディストリビューションを使用しますが、特定のバージョンに固定する場合は、テンプレートで使用する正確な SMD バージョンを指定できます。

カスタムイメージの要件:
+ `curl` アイドルシャットダウンを使用する場合
+ ポート 8888
+ リモートアクセス

## リモート IDE 要件


### VS Code バージョン要件


VS Code バージョン [v1.90](https://code.visualstudio.com/updates/v1_90) 以降が必要です。[VS Code の最新の安定したバージョン](https://code.visualstudio.com/updates)を使用することをお勧めします。

### オペレーティングシステムの要件


Studio スペースにリモート接続するには、次のいずれかのオペレーティングシステムが必要です。
+ macOS 13 以降
+ 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 Code](https://code.visualstudio.com/docs/setup/linux) をインストールする
  + オープンソースバージョンではない

### ローカルマシンの前提条件


ローカル Visual Studio コードを Studio スペースに接続する前に、ローカルマシンに必要な依存関係とネットワークアクセスがあることを確認してください。

**注記**  
ソフトウェアのインストール制限がある環境では、ユーザーが必要な依存関係をインストールできない場合があります。 AWS Toolkit 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)`

### イメージの要件


**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` — 圧縮されたファイル処理に必要です

### インスタンスの要件

+ **メモリ** — 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 起動時間の最適化


コンテナイメージのプルパフォーマンスは、特に AI/ML ワークロードがますます大きなコンテナイメージに依存するため、多くの EKS 顧客にとって大きなボトルネックとなっています。これらの大きなイメージをプルおよび解凍するには、通常、各 EKS ノードで初めて使用する場合に数分かかります。この遅延により、SageMaker Spaces を起動する際のレイテンシーが大幅に増加し、ユーザーエクスペリエンスに直接影響します。特に、ノートブックやインタラクティブな開発ジョブなど、高速起動が不可欠な環境では顕著です。

イメージの事前ウォーミングは、特定のコンテナイメージを EKS/HyperPod クラスター内のすべてのノードに必要な前にプリロードするために使用される手法です。ポッドが大きなイメージの最初のプルをトリガーするのを待つ代わりに、クラスターはすべてのノードでイメージをプロアクティブにダウンロードしてキャッシュします。これにより、ワークロードの起動時に必要なイメージが既にローカルで利用可能になり、コールドスタートの遅延が長くなります。イメージの事前ウォーミングにより、SageMaker Spaces の起動速度が向上し、エンドユーザーにより予測可能で応答性の高いエクスペリエンスが提供されます。

### DaemonSet による事前ウォーミング


DaemonSet を使用してイメージをプリロードすることをお勧めします。DaemonSet は、クラスター内のすべてのノードで 1 つのポッドが実行されるようにします。DaemonSet ポッド内の各コンテナは、キャッシュするイメージを参照します。Kubernetes がポッドを起動すると、イメージが自動的にプルされ、各ノードのキャッシュがウォームアップされます。

次の例は、2 つの GPU イメージをプリロードする DaemonSet を作成する方法を示しています。各コンテナは軽量`sleep infinity`コマンドを実行して、最小限のオーバーヘッドでポッドをアクティブに保ちます。

```
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
```

### 仕組み

+ 各コンテナは 1 つのイメージを参照します。
+ Kubernetes は、コンテナを起動する前に各イメージをダウンロードする必要があります。
+ ポッドがすべてのノードで実行されると、イメージはローカルにキャッシュされます。
+ これらのイメージを使用するワークロードは、はるかに高速に開始されるようになりました。

## スペースデフォルトストレージ (EBS)


システムはデフォルトで EBS CSI ドライバーを使用して、各ワークスペースに EBS ストレージボリュームをプロビジョニングします。SageMaker はワークスペースで使用する EBS ストレージクラスを作成し、管理者はテンプレート設定を使用してこれらのボリュームのデフォルトサイズと最大サイズをカスタマイズできます。CLI ツールを使用する上級ユーザーの場合、ワークスペースのストレージクラスをカスタマイズすることもできます。これにより、ユーザーは EBS ボリュームのカスタマーマネージド KMS キーの設定など、他のストレージクラスを活用できます。

EBS ボリュームは特定の AZ にバインドされることに注意してください。つまり、ワークスペースはストレージボリュームと同じ AZ 内のノードでのみスケジュールできます。これにより、クラスター容量は存在するが、正しい AZ にない場合、スケジューリングが失敗する可能性があります。

## 追加ストレージ


SageMaker Spaces は、Amazon EFS、FSx for Lustre、S3 Mountpoint などの追加のストレージボリュームを開発スペースにアタッチすることをサポートしています。これにより、共有データセットへのアクセス、プロジェクトでのコラボレーション、ワークロードの高性能ストレージの使用が可能になります。

### 前提条件


追加のストレージをスペースにアタッチする前に、以下を行う必要があります。

1. [EKS](https://docs.aws.amazon.com/eks/latest/userguide/workloads-add-ons-available-eks.html) **アドオンを介して適切な CSI ドライバー**アドオンをインストールする (Amazon EFS CSI ドライバー、Amazon FSx for Lustre CSI ドライバー、または Mountpoint for Amazon S3 CSI ドライバー)

1. 特定の**ストレージタイプの CSI ドライバードキュメントに従ってストレージリソースと PersistentVolumeClaims を設定する** 

1. スペースを作成する予定の同じ名前空間で **PVC が使用可能であることを確認します**。

### スペースへのストレージのアタッチ


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
```

### 複数のボリューム


CLI で複数の`--volume`フラグを指定するか、kubectl で`volumes`配列内の複数のエントリを指定することで、複数の追加のストレージボリュームを 1 つのスペースにアタッチできます。

**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
```

## リソース設定


SageMaker Spaces では、ワークロードの要件に合わせて CPU、メモリ、GPU リソースなど、開発環境のコンピューティングリソースを設定できます。

### GPU 設定


SageMaker Spaces は、NVIDIA マルチインスタンス GPU (MIG) テクノロジーを使用した GPU 割り当て全体と GPU パーティショニングの両方をサポートしています。これにより、さまざまなタイプの機械学習ワークロードの GPU 使用率を最適化できます。

#### GPU 全体の割り当て


**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)


NVIDIA マルチインスタンス GPU (MIG) テクノロジーを使用した GPU パーティショニングを使用すると、1 つの 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"
```

## Lifecycle


ライフサイクル設定は、ワークスペースの作成時または起動時に実行される起動スクリプトを提供します。これらのスクリプトにより、管理者は起動時にワークスペース環境をカスタマイズできます。これらは、最大サイズが 1 KB の bash スクリプトです。より大きなセットアップ設定が必要な場合は、コンテナイメージにスクリプトを追加し、ライフサイクル設定からスクリプトをトリガーすることをお勧めします。

Kubernetes コンテナライフサイクルフックを活用して、この機能 [https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/](https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/) を提供します。Kubernetes は、コンテナのエントリポイントに関連して起動スクリプトが実行されるタイミングを保証しないことに注意してください。

## アイドルシャットダウン


アイドル状態のワークスペースの自動シャットダウンを設定して、リソースの使用を最適化します。

### アイドルシャットダウン


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

### パラメータ


**有効** (ブール値、必須) - ワークスペースのアイドルシャットダウンを有効または無効にします。

**idleShutdownTimeoutMinutes** (整数、必須) - ワークスペースがシャットダウンするまでの非アクティブの分数。最小値は 1 です。

**detection** (オブジェクト、必須) - ワークスペースのアイドル状態を検出する方法を定義します。

**detection.httpGet** (オブジェクト、オプション) - アイドル検出用の HTTP エンドポイント設定。Kubernetes HTTPGetAction 仕様を使用します。
+ **path** - リクエストする HTTP パス
+ **port** - ポート番号または名前
+ **スキーム** - HTTP または HTTPS (デフォルト: HTTP)

### 設定場所


**WorkSpace の設定**

ワークスペース仕様でアイドルシャットダウンを直接定義します。

```
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
```

### テンプレートの継承と上書き


テンプレートを使用する Workspace は、テンプレート`defaultIdleShutdown`の設定を自動的に継承します。テンプレートで許可されている場合、WorkSpaces はこの設定を上書きできます。

**ポリシーを上書きする**

テンプレートは、 を通じてオーバーライド動作を制御します`idleShutdownOverrides`。

**allow** (ブール値、デフォルト: true) - ワークスペースがデフォルトのアイドルシャットダウン設定を上書きできるかどうか。

**minTimeoutMinutes** (整数、オプション) - ワークスペースオーバーライドで許可される最小タイムアウト値。

**maxTimeoutMinutes** (整数、オプション) - ワークスペースオーバーライドの最大許容タイムアウト値。

**継承の例**

WorkSpace はテンプレートのデフォルトを継承します。

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

**オーバーライドの例**

WorkSpace はテンプレートのデフォルトを上書きします。

```
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
```

### 行動


アイドルシャットダウンを有効にすると、システムは設定された HTTP エンドポイントを使用してワークスペースのアクティビティを定期的にチェックします。エンドポイントが、指定されたタイムアウト時間ワークスペースがアイドル状態であることを示している場合、ワークスペースは自動的に停止します。必要に応じて、ワークスペースを手動で再起動できます。

## テンプレートの更新


Kubectl や Hyperpod CLI や SDK などのクライアントツールは、EKS クラスター内のスペースの管理に使用できます。管理者はデフォルトのスペース設定用にスペーステンプレートをプロビジョニングできますが、データサイエンティストは基盤となる Kubernetes の複雑さを理解することなく、統合された開発環境をカスタマイズできます。詳細な使用手順については、[https://sagemaker-hyperpod-cli.readthedocs.io/en/latest/index.html](https://sagemaker-hyperpod-cli.readthedocs.io/en/latest/index.html) の CLI と SDK のドキュメントを参照してください。

管理者は、スペーステンプレートで CRUD オペレーションを実行できます。これは、スペースを作成する際の基本設定として機能します。データサイエンティストは、スペースで CRUD オペレーションを実行し、特定のコンピューティングノードのマルチインスタンス GPU プロファイルなど、さまざまなパラメータを上書きできます。リモート VSCode アクセスとウェブ UI を使用して、Spaces を起動、停止、接続できます。スペーステンプレートが更新されると、後で作成されるスペースは、更新されたテンプレートの設定で設定されます。コンプライアンスチェックは、既存のスペースが更新または開始されたときに実行されます。いずれかの設定が範囲外であるか、一致しない場合、スペースは更新または起動に失敗します。

## hyp CLI と kubectl の使用


ユーザーは 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"
```

# ユーザーを追加し、サービスアカウントをセットアップする


## きめ細かなアクセスコントロール - 推奨事項


ユーザーは Kubernetes ユーザー名に基づいて区別されます。ユーザーの Kubernetes ユーザー名は、アクセスエントリで定義されます。2 人のユーザーが個別のユーザー名を持つようにするには、次の 2 つのオプションがあります。

1. 推奨 - 複数のヒューマンユーザーは、セッション間で保持される独自のセッション名を持っている限り、同じロールを使用できます。デフォルトでは、IAM ロールの Kubernetes ユーザー名は の形式です`arn:aws:sts::{ACCOUNT_ID}:assumed-role/{ROLE_NAME}/{SESSION_NAME}`。このデフォルトでは、ユーザーはすでにセッション名で区別されます。管理者には、ユーザーごとに一意のセッション名を適用する方法がいくつかあります。
   + SSO ログイン - SSO ログインを使用するユーザーは、デフォルトで AWS ユーザー名に関連付けられたセッション名を持ちます。
   + 中央認証情報供給サービス - エンタープライズのお客様には、ユーザーが ID で認証情報を取得するために呼び出すことができる内部認証情報供給サービスがある場合があります。
   + ロールベースの適用 - IAM ユーザーは、 で IAM ロールを引き受けるときに、 をロールセッション名`aws:username`として設定する必要があります AWS アカウント。これを行う方法については、 を参照してください。 [https://aws.amazon.com/blogs/security/easily-control-naming-individual-iam-role-sessions/](https://aws.amazon.com/blogs/security/easily-control-naming-individual-iam-role-sessions/)

1. 2 人のデータサイエンティストが異なるアクセスエントリ (異なる IAM ロールまたはユーザー) を使用している場合、それらは常に異なるユーザーとしてカウントされます。

**アクセスエントリの作成**

データサイエンティストロールに必要な IAM ポリシー:
+ `eks:DescribeCluster`

必要なアクセスエントリポリシー
+ `AmazonSagemakerHyperpodSpacePolicy` - DS が にスペースを作成する名前空間に限定
+ `AmazonSagemakerHyperpodSpaceTemplatePolicy` - 「jupyter-k8s-shared」名前空間に限定

## プライベートスペースとパブリックスペース


「Public」とOwnerOnly」の 2 種類の共有パターンをサポートしています。AccessType」フィールドとOwnershipType」フィールドの両方がこれらの 2 つの値を使用します。
+ AccessType: パブリックスペースには名前空間内のアクセス許可を持つユーザーがアクセスできますが、OwnerOnly にはスペース作成者と管理者ユーザーのみがアクセスできます。管理者ユーザーは、次の基準で定義されます。
+ OwnershipType: パブリックスペースは、名前空間内のアクセス許可を持つすべてのユーザーが変更/削除できます。OwnerOnly は、作成者または管理者によって変更/削除できます。

管理者ユーザーの定義は以下のとおりです。

1. Kubernetes `system:masters` グループの一部

1. helm チャートの CLUSTER\$1ADMIN\$1GROUP 環境変数で定義された Kubernetes グループの一部。

ユーザーのグループは、EKS アクセスエントリを使用して設定できます。オブジェクトで仕様を設定することで、スペースを「Public」または「OwnerOnly」として定義できます。

```
apiVersion: workspace.jupyter.org/v1alpha1
kind: Workspace
metadata:
  labels:
    app.kubernetes.io/name: jupyter-k8s
  name: example-workspace
spec:
  displayName: "Example Workspace"
  image: "public.ecr.aws/sagemaker/sagemaker-distribution:3.4.2-cpu"
  desiredStatus: "Running"
  ownershipType: "Public"/"OwnerOnly"
  accessType: "Public"/"OwnerOnly"
  # more fields here
```

# 制限


スペースは、EBS ボリュームがアタッチされた HyperPod EKS ノードでポッドとして実行されます。ノードごとにデプロイできるスペースの数は、 AWS インフラストラクチャの制限によって制約されます。

**ノードあたりの EBS ボリューム制限**

リファレンス: [https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/volume\$1limits.html](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/volume_limits.html)

EC2 ノードには、アタッチできる EBS ボリュームの最大数があります。通常、各スペースは 1 つの EBS ボリュームを使用するため、専用 EBS ストレージを持つスペースを 1 つのノードで実行できる数は制限されます。

**HyperPod ノードあたりの最大ポッド数**

リファレンス: [https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-prerequisites.html](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-prerequisites.html)

各 HyperPod インスタンスタイプは、VPC CNI プラグインから使用可能な IP アドレスに基づいて最大数のポッドをサポートします。各スペースはポッドとして実行されるため、ノードあたりのスペースの数を直接制限します。

**Impact**

ノードあたりのスペースの有効な制限は、最初に達した制約のいずれかです。

# HyperPod のインタラクティブスペースのタスクガバナンス


このセクションでは、インタラクティブスペースのワークロード用に共有 Amazon SageMaker HyperPod EKS クラスターを最適化する方法について説明します。クォータ管理、優先度スケジューリング、リソース共有ポリシーなど、Kueue のタスクガバナンス機能を設定して、開発ワークロードを中断することなく実行し、チームのトレーニング、評価、バッチ処理アクティビティ全体で公平な配分を維持する方法について説明します。

## インタラクティブスペース管理の仕組み


共有 HyperPod EKS クラスターでインタラクティブスペースを効果的に管理するには、Kueue の既存の機能を使用して次のタスクガバナンス戦略を実装します。

**優先クラス設定**

重みが高いインタラクティブスペース (100 など) の専用優先度クラスを定義して、開発ポッドが他のタスクタイプより先に許可およびスケジュールされるようにします。この設定により、インタラクティブスペースはクラスターのロード中に優先度の低いジョブを優先できます。これは、中断のない開発ワークフローを維持する上で重要です。

**クォータのサイジングと割り当て**

予想される開発ワークロードを処理するのに十分なコンピューティングリソースをチームの ClusterQueue に予約します。開発リソースがアイドル状態の期間中は、未使用のクォータリソースを他のチームのタスクに一時的に割り当てることができます。開発需要が増加すると、これらの借用リソースを再利用して、保留中のインタラクティブスペースポッドに優先順位を付けることができます。

**リソース共有戦略**

要件に基づいて、以下の 2 つのクォータ共有アプローチから選択します。

*厳格なリソース制御*: クォータの貸借を無効にして、リザーブドコンピューティングキャパシティがインタラクティブスペースで常に使用可能であることを確認します。このアプローチでは、ピーク時の開発需要を個別に処理するのに十分な大きさのサイジングクォータが必要であり、使用頻度が低い期間にアイドルノードが発生する可能性があります。

*Flexible Resource Sharing*: クォータローンを有効にして、他のチームが必要に応じてアイドル状態の開発リソースを利用できるようにします。ただし、借用を無効にして、予期しないエビクションにつながる可能性のある借用された再利用可能なリソースで Interactive Spaces が実行されないようにします。

**チーム内プリエンプション**

同じクォータで混合ワークロード (トレーニング、評価、インタラクティブスペース) を実行する場合、チーム内プリエンプションを有効にします。これにより、Kueue はチーム内の優先度の低いジョブを優先して優先度の高いインタラクティブスペースポッドに対応できるため、外部クォータの借用に応じて開発作業を続行できます。

## インタラクティブスペースの設定例


次の例は、Kueue が共有 Amazon SageMaker HyperPod クラスター内のインタラクティブスペースのコンピューティングリソースを管理する方法を示しています。

**クラスター設定とポリシー設定**

このクラスターの設定は、以下のとおりです。
+ *チームアルファ (開発チーム)*: インタラクティブスペースの 8 CPU クォータ
+ *チームベータ (ML チーム)*: トレーニングと評価のための 16 CPU クォータ
+ *チームガンマ (研究)*: 実験用の 6 CPU クォータ
+ *静的プロビジョニング*: オートスケーリングなし
+ *合計容量*: 30 CPUs

共有 CPU プールはこの優先度ポリシーを使用します。
+ *インタラクティブスペース*: Priority 100
+ *トレーニング*: 優先度 75
+ *評価*: 優先度 50
+ *バッチ処理*: Priority 25

Kueue はチームのクォータと優先度クラスを適用し、開発チームに対してプリエンプションが有効になり、借用が無効になります。

**初期状態: 通常のクラスター使用率**

通常運用:
+ *Team Alpha*: 6 つの CPUs を使用して 6 つのインタラクティブスペースを実行し、2 つの CPUsアイドル状態にします
+ *チームベータ*: トレーニングジョブ (12 CPUs) と評価 (4 CPU) を 16 CPUs クォータ内で実行します
+ *チームガンマ*: 6 つの CPUs
+ *リソース共有*: Team Beta が追加のトレーニングのために Team Alpha の 2 つのアイドル CPUs を借りる

**開発スパイク: Team Alpha には追加のリソースが必要です**

Team Alpha の開発者が開発作業をスケールアップする必要がある場合、追加のインタラクティブスペースポッドにはさらに 4 つの CPUsが必要です。Kueue は、新しいポッドが以下であることを検出します。
+ Team Alpha の名前空間内
+ Priority 100 (インタラクティブスペース)
+ クォータの制約によりアドミッション保留中

**Kueue の応答プロセス**

Kueue は 3 ステップのプロセスに従ってリソースを割り当てます。

1. **クォータチェック**

   質問: Team Alpha には未使用のクォータがありますか?
   + *現在の使用状況*: 6 CPUs が使用され、2 CPUs が利用可能
   + *新しい要件*: 4 CPUs が必要
   + *結果*: クォータが不十分 → ステップ 2 に進む

1. **Team Alpha 内でのセルフプリエンプション**

   質問: 優先度の低い Team Alpha ジョブを優先できますか?
   + *使用可能なターゲット*: Team Alpha に優先度の低いジョブがない
   + *結果*: プリエンプション不可 → ステップ 3 に進む

1. **借用リソースの再利用**

   質問: Team Alpha リソースは他のチームによって借用されていますか?
   + *借用リソース*: Team Alpha の 2 つの CPUs を使用する Team Beta
   + *アクション*: Kueue は Team Beta の借用トレーニングポッドを削除し、2 CPU CPUs解放
   + *残りのニーズ*: まだ 2 つの CPUsが必要 → インタラクティブスペースは、リソースが利用可能になるまで NotAdmitted 状態のままです

このアプローチでは、チームのクォータの境界を維持し、開発作業が不安定な借用リソースで実行されないようにしながら、インタラクティブスペースを優先します。

# オブザーバビリティ


## 標準 Kubernetes モニタリング


describe `kubectl`や `kubectl` logs などの標準 Kubernetes ツールを使用して、スペースをモニタリングできます。

**スペースステータスのモニタリング**

```
# List all Spaces with status
kubectl get workspace -A

# Get detailed information about a specific Space
kubectl describe workspace <workspace-name>
```

**スペースログの表示**

```
# View workspace container logs
kubectl logs -l workspace.jupyter.org/workspace-name=<workspace-name> -c workspace

# View SSM agent sidecar logs (for remote IDE connectivity)
kubectl logs -l workspace.jupyter.org/workspace-name=<workspace-name> -c ssm-agent-sidecar

# Follow logs in real-time
kubectl logs -l workspace.jupyter.org/workspace-name=<workspace-name> -c workspace -f
```

**スペース条件について**

スペースは、ステータスに 4 つの条件タイプを報告します。
+ **使用可能**: スペースが使用可能になった`True`とき。必要なすべてのリソース (ポッド、サービス、ストレージ) が実行されており、正常である。
+ **進行中: **`True`スペースが作成、更新、または調整されている場合。安定`False`すると に移行します。
+ **Degraded**: スペースリソースでエラーが検出され`True`た場合。詳細については、条件メッセージを確認してください。
+ **Stopped**: `True` Space desired ステータスが に設定されている場合`Stopped`。ポッドは終了しますが、ストレージと設定は保持されます。

## CloudWatch Logs の統合


CloudWatch ロギングアドオンをインストールして、スペースログを Amazon CloudWatch Logs に送信し、ログの管理と保持を一元化できます。これにより、複数のクラスター間でログを集約し、CloudWatch Insights と統合してクエリと分析を行うことができます。上記の使用可能な`kubectl`ログはすべて、このプラグインを使用して CloudWatch でクエリできます。

**リファレンス: **[https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-cluster-observability-cluster-cloudwatch-ci.html](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-cluster-observability-cluster-cloudwatch-ci.html)。

## HyperPod Observability アドオン


SageMaker HyperPod オブザーバビリティアドオンは、スペースリソースの使用率をモニタリングするための包括的なダッシュボードを提供します。アドオンをインストールしたら、Amazon Managed Grafana ダッシュボードにメトリクスを表示する HyperPod コンソールの**タスク**タブでスペースメモリと CPU 使用率を表示できます。

**リファレンス: **[https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-observability-addon.html](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-observability-addon.html)

**利用可能な主要なメトリクス:**
+ スペースあたりの CPU とメモリの使用率
+ GPU メトリクス (該当する場合)

# スペースの作成と管理


データサイエンティストは、アクセスできるすべてのスペースを表示したり、テンプレートのいずれかを使用してスペースを作成したり、スペースを更新してイメージ、ファイルシステム、その他のスペース設定の属性を更新したり、スペースを削除したりできます。前提条件として、お客様は HyperPod CLI をインストールするか、kubectl を使用してスペースを作成および管理する必要があります。HyperPod CLI の詳細については、[こちら](https://github.com/aws/sagemaker-hyperpod-cli/blob/main/README.md#space)を参照してください。kubectl コマンドを使用するには、[このガイド](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)を参照して kubectl をインストールしてください。

## スペースを作成する


**HyperPod CLI**

Jupyter スペースを作成する

```
hyp create hyp-space \ 
    --name myspace \ 
    --display-name "My Space" \ 
    --memory 8Gi \ 
    --template-ref name=sagemaker-jupyter-template,namespace=jupyter-k8s-system
```

コードエディタスペースを作成する

```
hyp create hyp-space \ 
    --name myspace \ 
    --display-name "My Space" \ 
    --memory 8Gi \ 
    --template-ref name=sagemaker-code-editor-template,namespace=jupyter-k8s-system
```

**kubectl**

```
kubectl apply -f - <<EOF
apiVersion: workspace.jupyter.org/v1alpha1
kind: Workspace
metadata:
  name: my-space
spec:
  displayName: my-space
  desiredStatus: Running
EOF
```

または、yaml ファイルを単純に適用できます。

```
kubectl apply -f my-workspace.yaml
```

## スペースを一覧表示する


**HyperPod CLI**

```
hyp list hyp-space
```

**kubectl**

```
kubectl get workspaces -n <workspace-namespace> 
```

## スペースの説明


**HyperPod CLI**

```
hyp describe hyp-space --name myspace
```

**kubectl**

```
# Basic Status reporting
kubectl get workspace my-workspace -n <workspace-namespace>

# Enhanced Workspace Information Retrieval 
kubectl get workspace my-workspace -n <workspace-namespace> -o wide

# Complete Workspace Information Retrieval
kubectl get workspace my-workspace -n <workspace-namespace> -o json
kubectl get workspace my-workspace -n <workspace-namespace> -o yaml
```

## スペースを更新する


**HyperPod CLI**

```
hyp update hyp-space \
    --name myspace \
    --display-name "Updated My Space"
```

**kubectl**

必要に応じて元のワークスペース YAML ファイルを更新し、再度適用します。メタデータ名が変更されていないことを確認してください。これらの kubectl コマンドを使用して、ワークスペース yaml 全体を再適用せずにフィールドを変更することもできます。

```
# Open a Terminal IDE and modify the Workspace
kubectl edit workspace -n <workspace-namespace>

# Patch a Workspace
kubectl patch workspace <workspace-name> --type='merge' -p \
    '{"spec":{"<field name>":"<desired value>"}}' -n <workspace-namespace>
```

## スペースの開始/停止


**HyperPod CLI**

```
hyp start hyp-space --name myspace
hyp stop hyp-space --name myspace
```

**kubectl**

Workspace で目的のステータスフィールドを更新して、スペースを開始/停止できます。

```
# Start a Workspace
kubectl patch workspace <workspace-name> --type='merge' -p \
    '{"spec":{"desiredStatus":"Running"}}' -n <workspace-namespace>
    
# Stop a Workspace
kubectl patch workspace <workspace-name> --type='merge' -p \
    '{"spec":{"desiredStatus":"Stopped"}}' -n <workspace-namespace>
```

## ログの取得


**HyperPod CLI**

```
hyp get-logs hyp-space --name myspace
```

**kubectl**

```
# Check Pod Logs
kubectl logs -l workspace.jupyter.org/workspace-name=<workspace-metadata-name>

# Check Pod Events
kubectl describe pod -l workspace.jupyter.org/workspace-name=<workspace-metadata-name>

# Check Operator Logs
kubectl logs -n jupyter-k8s-system deployment/jupyter-k8s-controller-manager
```

## スペースを削除する


**HyperPod CLI**

```
hyp delete hyp-space --name myspace
```

**kubectl**

```
# Delete a Workspace
kubectl delete workspace <workspace-name> -n <namespace>
```

# ウェブブラウザアクセス


ウェブ UI アクセスを使用すると、安全なウェブブラウザインターフェイスを介して SageMaker HyperPod クラスターで実行されている開発スペースに直接接続できます。これにより、ローカルソフトウェアのインストールを必要とせずに、Jupyter Lab やその他のウェブベースの開発環境にすぐにアクセスできます。

## 前提条件


ウェブ UI アクセスを設定する前に、以下が完了していることを確認してください。
+ *SageMaker Spaces アドオンのインストール*: [SageMaker Spaces アドオンのインストール](https://docs.aws.amazon.com/sagemaker/latest/dg/operator-install.html)に従い、インストール中にウェブ UI アクセスを有効にします。
+ *EKS クラスターへのユーザーアクセス*: ユーザーには、適切なアクセス許可で設定された EKS アクセスエントリが必要です。[EKS アクセスエントリの設定の詳細については、「ユーザーの追加」および「サービスアカウントの設定](https://docs.aws.amazon.com/sagemaker/latest/dg/add-user.html)」を参照してください。
+ *開発スペース*: HyperPod クラスターで開発スペースを作成して開始する
+ *kubectl アクセス*: kubectl が EKS クラスターにアクセスするように設定されていることを確認します

## ウェブ UI アクセス URL の生成


**HyperPod CLI の使用**

HyperPod CLI がインストールされている場合は、次の簡易コマンドを使用できます。

```
hyp create hyp-space-access --name <space-name> --connection-type web-ui
```

**kubectl を使用する**

`kubectl` コマンドラインを使用して接続リクエストを作成することもできます。

```
kubectl create -f - -o yaml <<EOF
apiVersion: connection.workspace.jupyter.org/v1alpha1
kind: WorkspaceConnection
metadata:
  namespace: <space-namespace>
spec:
  workspaceName: <space-name>
  workspaceConnectionType: web-ui
EOF
```

URL は、このコマンド`status.workspaceConnectionUrl`の出力の にあります。

## 開発スペースへのアクセス


1. 上記の方法のいずれかを使用して*ウェブ UI URL を生成する* 

1. レスポンスから *URL をコピー*する

1. ウェブブラウザで *URL を開く* 

1. ウェブインターフェイスから*開発環境にアクセスする* 

## サポートされている開発環境


ウェブ UI は、以下へのアクセスを提供します。
+ *Jupyter ラボ*
+ *コードエディタ*

## トラブルシューティング


**アクセス URLsを生成できない**

以下をチェックしてください:
+ SageMaker Spaces アドオンが実行されています: kubectl get pods -n sagemaker-spaces-system
+ 開発スペースが実行中で正常である
+ ユーザーに適切な EKS アクセスエントリ許可がある

# SageMaker Spaces へのリモートアクセス


リモートアクセスを使用すると、ローカル Visual Studio コードを SageMaker HyperPod クラスターで実行されている開発スペースに直接接続できます。リモート接続は SSM を使用して、ローカルマシンと開発スペースの間に安全で暗号化されたトンネルを確立します。

## 前提条件


リモートアクセスを設定する前に、以下が完了していることを確認してください。
+ *SageMaker Spaces アドオンのインストール*: [SageMaker Spaces アドオンのインストール](https://docs.aws.amazon.com/sagemaker/latest/dg/operator-install.html)に従い、インストール中にリモートアクセスを有効にします (クイックインストールまたはリモートアクセス設定を有効にしたカスタムインストール）。
+ *EKS クラスターへのユーザーアクセス*: ユーザーには、適切なアクセス許可で設定された EKS アクセスエントリが必要です。[EKS アクセスエントリの設定の詳細については、「ユーザーの追加」および「サービスアカウントの設定](https://docs.aws.amazon.com/sagemaker/latest/dg/add-user.html)」を参照してください。
+ *開発スペース*: HyperPod クラスターで開発スペースを作成して開始する
+ *kubectl アクセス*: kubectl が EKS クラスターにアクセスするように設定されていることを確認します。

## VS Code リモート接続を生成する


### HyperPod CLI の使用


HyperPod CLI がインストールされている場合は、次の簡易コマンドを使用できます。

```
hyp create hyp-space-access --name <space-name> --connection-type vscode-remote
```

### kubectl を使用する


`kubectl` コマンドラインを使用して接続リクエストを作成することもできます。

```
kubectl create -f - -o yaml <<EOF
apiVersion: connection.workspace.jupyter.org/v1alpha1
kind: WorkspaceConnection
metadata:
  namespace: <space-namespace>
spec:
  workspaceName: <space-name>
  workspaceConnectionType: vscode-remote
EOF
```

URL は、このコマンド`status.workspaceConnectionUrl`の出力の にあります。

## VS Code との接続


1. 上記の方法のいずれかを使用して VS Code 接続 URL を生成する

1. レスポンスから VS Code URL をコピーする

1. URL をクリックするか、ブラウザに貼り付けます。

1. VS Code はリモート接続を開くように求めるプロンプトを表示します

1. 接続を確認してリモート開発環境を確立する

## サポートされている開発環境


ウェブ UI は、以下へのアクセスを提供します。
+ *Jupyter ラボ*
+ *コードエディタ*

## トラブルシューティング


**接続 URLsを生成できない**

*以下を確認してください。*
+ SageMaker Spaces アドオンが実行されています: kubectl get pods -n sagemaker-spaces-system
+ 開発スペースが実行中で正常である
+ アドオンのインストール中にリモートアクセスが有効になりました
+ ユーザーに適切な EKS アクセスエントリ許可がある