

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

# 設定遠端 IDE
<a name="remote-access-local-ide-setup"></a>

管理員完成 中的指示後[使用遠端存取將您的遠端 IDE 連接到 SageMaker 空間](remote-access.md)，您可以將遠端 IDE 連接到遠端 SageMaker 空間。

**Topics**
+ [設定您的本機環境](#remote-access-local-ide-setup-local-environment)
+ [連線至遠端 IDE](#remote-access-local-ide-setup-local-vs-code)
+ [使用沒有網際網路存取的子網路連線至 VPC](remote-access-local-ide-setup-vpc-no-internet.md)
+ [篩選您的 Studio 空間](remote-access-local-ide-setup-filter.md)

## 設定您的本機環境
<a name="remote-access-local-ide-setup-local-environment"></a>

在本機電腦上安裝您偏好的遠端 IDE：
+ [Visual Studio 程式碼](https://code.visualstudio.com/)
+ [開羅](https://kiro.dev/)
+ [游標](https://cursor.com/home)

如需版本需求的資訊，請參閱 [IDE 版本需求](remote-access.md#remote-access-ide-version-requirements)。

## 連線至遠端 IDE
<a name="remote-access-local-ide-setup-local-vs-code"></a>

在建立從遠端 IDE 到遠端 SageMaker 空間的連線之前，您的管理員必須 [設定遠端存取](remote-access-remote-setup.md)。您的管理員會為您設定特定方法來建立連線。選擇為您設定的方法。

**Topics**
+ [方法 1：來自 Studio UI 的深層連結](#remote-access-local-ide-setup-local-vs-code-method-1-deep-link-from-studio-ui)
+ [遠端 IDE 中的方法 2： AWS Toolkit](#remote-access-local-ide-setup-local-vs-code-method-2-aws-toolkit-in-vs-code)
+ [方法 3：透過 SSH CLI 從終端連線](#remote-access-local-ide-setup-local-vs-code-method-3-connect-from-the-terminal-via-ssh-cli)

### 方法 1：來自 Studio UI 的深層連結
<a name="remote-access-local-ide-setup-local-vs-code-method-1-deep-link-from-studio-ui"></a>

使用下列程序，使用深層連結建立連線。

1. [啟動 Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html#studio-updated-launch-console)。

1. 在 Studio UI 中，導覽至您的空間。

1. 針對您偏好的 IDE，選擇在 **VS 程式碼中開啟**、**在 Kiro** 中開啟或**在游標中開啟**按鈕。確保本機電腦上已安裝您偏好的 IDE。

1. 出現提示時，請確認 開啟您的 IDE。您的 IDE 會開啟另一個快顯視窗進行確認。完成後，即會建立遠端連線。

### 遠端 IDE 中的方法 2： AWS Toolkit
<a name="remote-access-local-ide-setup-local-vs-code-method-2-aws-toolkit-in-vs-code"></a>

使用下列程序，使用 AWS Toolkit for Visual Studio Code建立連線。此方法適用於 VS Code、Kiro 和 Cursor。

1. 開啟遠端 IDE (VS 程式碼、Kiro 或游標）。

1. 開啟 AWS Toolkit 擴充功能。

1. [連線到 AWS](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/connect.html)。

1. 在 AWS Explorer 中，展開 **SageMaker AI**，然後展開 **Studio**。

1. 尋找您的 Studio 空間。

1. 選擇空間旁邊的**連線**圖示來將其啟動。
**注意**  
如果尚未連線，請停止並重新啟動 Toolkit for Visual Studio 中的空間，以啟用遠端存取。
如果空間未使用支援的[執行個體大小](https://docs.aws.amazon.com/sagemaker/latest/dg/remote-access.html#remote-access-instance-requirements)，系統會要求您變更執行個體。

### 方法 3：透過 SSH CLI 從終端連線
<a name="remote-access-local-ide-setup-local-vs-code-method-3-connect-from-the-terminal-via-ssh-cli"></a>

選擇下列其中一個平台選項，以檢視使用 SSH CLI 建立連線的程序。

**注意**  
在遵循下列指示之前，請確定您[本機機器先決條件](remote-access.md#remote-access-local-prerequisites)已安裝最新版本的 。
如果您 [自帶映像 (BYOI)](studio-updated-byoi.md)，請確定已安裝 中列出的必要相依性，[映像要求](remote-access.md#remote-access-image-requirements)然後再繼續

------
#### [ Linux/macOS ]

建立 shell 指令碼 (例如 `/home/user/sagemaker_connect.sh`)：

```
#!/bin/bash
# Disable the -x option if printing each command is not needed.
set -exuo pipefail

SPACE_ARN="$1"
AWS_PROFILE="${2:-}"

# Validate ARN and extract region
if [[ "$SPACE_ARN" =~ ^arn:aws[-a-z]*:sagemaker:([a-z0-9-]+):[0-9]{12}:space\/[^\/]+\/[^\/]+$ ]]; then
    AWS_REGION="${BASH_REMATCH[1]}"
else
    echo "Error: Invalid SageMaker Studio Space ARN format."
    exit 1
fi

# Optional profile flag
PROFILE_ARG=()
if [[ -n "$AWS_PROFILE" ]]; then
    PROFILE_ARG=(--profile "$AWS_PROFILE")
fi

# Start session
START_SESSION_JSON=$(aws sagemaker start-session \
    --resource-identifier "$SPACE_ARN" \
    --region "${AWS_REGION}" \
    "${PROFILE_ARG[@]}")

# Extract fields using grep and sed
SESSION_ID=$(echo "$START_SESSION_JSON" | grep -o '"SessionId": "[^"]*"' | sed 's/.*: "//;s/"$//')
STREAM_URL=$(echo "$START_SESSION_JSON" | grep -o '"StreamUrl": "[^"]*"' | sed 's/.*: "//;s/"$//')
TOKEN=$(echo "$START_SESSION_JSON" | grep -o '"TokenValue": "[^"]*"' | sed 's/.*: "//;s/"$//')

# Validate extracted values
if [[ -z "$SESSION_ID" || -z "$STREAM_URL" || -z "$TOKEN" ]]; then
    echo "Error: Failed to extract session information from sagemaker start session response."
    exit 1
fi

# Call session-manager-plugin
session-manager-plugin \
    "{\"streamUrl\":\"$STREAM_URL\",\"tokenValue\":\"$TOKEN\",\"sessionId\":\"$SESSION_ID\"}" \
    "$AWS_REGION" "StartSession"
```

1. 讓指令碼可執行：

   ```
   chmod +x /home/user/sagemaker_connect.sh
   ```

1. 設定 `$HOME/.ssh/config` 以新增下列項目：

```
Host space-name
  HostName 'arn:PARTITION:sagemaker:us-east-1:111122223333:space/domain-id/space-name'
  ProxyCommand '/home/user/sagemaker_connect.sh' '%h'
  ForwardAgent yes
  AddKeysToAgent yes
  StrictHostKeyChecking accept-new
```

例如，`PARTITION` 可以是 `aws`。

如果您需要使用[具名 AWS 憑證描述檔](https://docs.aws.amazon.com/cli/v1/userguide/cli-configure-files.html#cli-configure-files-using-profiles)，請變更代理命令，如下所示：

```
  ProxyCommand '/home/user/sagemaker_connect.sh' '%h' YOUR_CREDENTIAL_PROFILE_NAME
```
+ 透過 SSH 連線或執行 SCP 命令：

```
ssh space-name
scp file_abc space-name:/tmp/
```

------
#### [ Windows ]

**Windows 的先決條件：**
+ PowerShell 5.1 或更新版本
+ SSH 用戶端 （建議使用 OpenSSH)

建立 PowerShell 指令碼 （例如 `C:\Users\user-name\sagemaker_connect.ps1`)：

```
# sagemaker_connect.ps1
param(
    [Parameter(Mandatory=$true)]
    [string]$SpaceArn,

    [Parameter(Mandatory=$false)]
    [string]$AwsProfile = ""
)

# Enable error handling
$ErrorActionPreference = "Stop"

# Validate ARN and extract region
if ($SpaceArn -match "^arn:aws[-a-z]*:sagemaker:([a-z0-9-]+):[0-9]{12}:space\/[^\/]+\/[^\/]+$") {
    $AwsRegion = $Matches[1]
} else {
    Write-Error "Error: Invalid SageMaker Studio Space ARN format."
    exit 1
}

# Build AWS CLI command
$awsCommand = @("sagemaker", "start-session", "--resource-identifier", $SpaceArn, "--region", $AwsRegion)

if ($AwsProfile) {
    $awsCommand += @("--profile", $AwsProfile)
}

try {
    # Start session and capture output
    Write-Host "Starting SageMaker session..." -ForegroundColor Green
    $startSessionOutput = & aws @awsCommand

    # Try to parse JSON response
    try {
        $sessionData = $startSessionOutput | ConvertFrom-Json
    } catch {
        Write-Error "Failed to parse JSON response: $_"
        Write-Host "Raw response was:" -ForegroundColor Yellow
        Write-Host $startSessionOutput
        exit 1
    }

    $sessionId = $sessionData.SessionId
    $streamUrl = $sessionData.StreamUrl
    $token = $sessionData.TokenValue

    # Validate extracted values
    if (-not $sessionId -or -not $streamUrl -or -not $token) {
        Write-Error "Error: Failed to extract session information from sagemaker start session response."
        Write-Host "Parsed response was:" -ForegroundColor Yellow
        Write-Host ($sessionData | ConvertTo-Json)
        exit 1
    }

    Write-Host "Session started successfully. Connecting..." -ForegroundColor Green

    # Create session manager plugin command
    $sessionJson = @{
        streamUrl = $streamUrl
        tokenValue = $token
        sessionId = $sessionId
    } | ConvertTo-Json -Compress

    # Escape the JSON string
    $escapedJson = $sessionJson -replace '"', '\"'

    # Call session-manager-plugin
    & session-manager-plugin "$escapedJson" $AwsRegion "StartSession"

} catch {
    Write-Error "Failed to start session: $_"
    exit 1
}
```
+ 設定 `C:\Users\user-name\.ssh\config` 以新增下列項目：

```
Host space-name                            
  HostName "arn:aws:sagemaker:us-east-1:111122223333:space/domain-id/space-name"
  ProxyCommand "C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe" -ExecutionPolicy RemoteSigned -File "C:\\Users\\user-name\\sagemaker_connect.ps1" "%h"
  ForwardAgent yes
  AddKeysToAgent yes
  User sagemaker-user
  StrictHostKeyChecking accept-new
```

------