设置本地 Visual Studio Code - 亚马逊 SageMaker AI

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

设置本地 Visual Studio Code

管理员完成中的说明后通过远程访问将您的本地 Visual Studio 代码连接到 SageMaker 空间,您可以将本地 Visual Studio 代码连接到远程 SageMaker 空间。

设置本地环境

在本地计算机上安装 Visual Studio Code。有关要求的信息,请参阅通过远程访问将您的本地 Visual Studio 代码连接到 SageMaker 空间

连接到本地 VS Code

在建立从本地 Visual Studio Code 到远程 SageMaker 空间的连接之前,必须由管理员进行连接设置远程访问。您的管理员为您设置了一种特定的建立连接的方法。选择已为您设置的方法。

执行以下过程,使用深度链接建立连接。

  1. 启动 Amazon SageMaker Studio

  2. 在 Studio UI 中,导航到您的空间。

  3. 选择空间打开方式

  4. 选择 VS Code。在执行此操作时,系统可能会提示您打开 Visual Studio Code。当您选择执行此操作时,您的本地 VS Code 将打开,并弹出另一个确认窗口。完成后,远程连接即已建立。

方法 2:AWS Toolkit for Visual Studio Code

执行以下过程,使用 AWS Toolkit for Visual Studio Code 建立连接。

  1. 打开 VS Code。

  2. 打开AWS工具包扩展。

  3. 连接到 AWS

  4. 在AWS资源管理器中,展开 SageMaker AI

  5. 找到您的 Studio 空间。

  6. 选择该空间旁边的连接图标即可将其启动。

    注意
    • 停止并重新启动 Toolkit for Visual Studio 中的空间以启用远程访问(如果尚未连接)。

    • 如果空间未使用支持的实例大小,系统将要求您更改实例。

方法 3:通过 SSH CLI 从终端连接

选择以下平台选项之一,查看使用 SSH CLI 建立连接的过程。

注意
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
  2. 配置 $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凭据配置文件,请按如下方式更改代理命令:

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 } # BuildAWS CLIcommand $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