本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
(可选)将数据从 Studio Classic 迁移到
Studio Classic 和 Studio 使用两种不同类型的存储卷。Studio Classic 使用单个亚马逊弹性文件系统(亚马逊EFS)卷来存储域中所有用户和共享空间的数据。在 Studio 中,每个空间都有自己的亚马逊 Elastic Block Store (AmazonEBS) 卷。当您更新现有域的默认体验时, SageMaker 会自动为域中的每个用户在 Amazon EFS 卷中挂载一个文件夹。因此,用户可以在他们的 Studio 应用程序中访问 Studio Classic 中的文件。有关更多信息,请参阅 亚马逊在 Studi EFS o 中自动挂载。
您也可以选择退出亚马逊的EFS自动挂载并手动迁移数据,让用户可以在 Studio 应用程序中访问来自 Studio Classic 的文件。为此,您必须将文件从用户主目录传输到与这些空间关联的 Amazon EBS 卷。以下部分提供了有关此工作流程的信息。有关选择退出 Amazon EFS 自动挂载的更多信息,请参阅。选择退出 Amazon EFS 自动挂载功能
从 Studio Classic 手动迁移所有数据
以下部分介绍如何将 Studio Classic 存储卷中的所有数据迁移到全新 Studio 体验。
将用户的数据、代码和构件从 Studio Classic 手动迁移到 Studio 时,我们建议采用以下方法之一:
-
使用自定义 Amazon EFS 卷
-
使用亚马逊简单存储服务 (Amazon S3) Simple Service
如果您在 Studio Classic 中使用了 Amazon SageMaker Data Wrangler 并想要迁移数据流文件,请选择以下迁移选项之一:
-
如果您想迁移 Studio Classic 存储卷中的所有数据,包括您的数据流文件,请转至从 Studio Classic 手动迁移所有数据并完成使用 Amazon S3 迁移数据部分。然后,跳到该将流程文件导入画布部分。
-
如果您只想迁移数据流文件,而不想迁移 Studio Classic 存储卷中的其他数据,请跳至该从 Data Wrangler 迁移数据流部分。
先决条件
在运行这些步骤之前,请完成中的先决条件完成迁移 Studio 体验的先决条件。您还必须完成中的步骤将界面从 Studio Classic 迁移。
选择一种方法
在选择迁移 Studio Classic 数据的方法时,请考虑以下几点。
使用自定义 Amazon EFS 卷的优缺点
在这种方法中,您可以使用 Amazon EFS-to-Amazon EFS AWS DataSync 任务(一次或节奏)来复制数据,然后将目标 Amazon EFS 卷挂载到用户的空间。这使用户可以在自己的 Studio 计算环境中访问来自 Studio Classic 的数据。
优点:
-
只有用户的主目录数据在用户的空间中可见。没有数据异花授粉。
-
从源 Amazon EFS 卷同步到目标 Amazon EFS 卷比 SageMaker 将由管理的源 Amazon EFS 卷直接安装到空间更安全。这样可以避免影响主目录用户文件的可能性。
-
用户可以灵活地继续在 Studio Classic 和 Studio 应用程序中工作,同时如果按常规节奏进行设置, AWS DataSync 则两个应用程序中的数据都可用。
-
使用 Amazon S3 无需重复推拉。
缺点:
-
没有对挂载到用户空间的目标 Amazon EFS 卷的写入权限。要获得对目标亚马逊EFS卷的写入权限,客户需要将目标亚马逊EFS卷挂载到亚马逊弹性计算云实例,并为用户提供写入亚马逊EFS前缀的相应权限。
-
需要修改由管理的安全组, SageMaker 以允许网络文件系统 (NFS) 的入站和出站流动。
-
成本比使用 Amazon S3 高。
-
如果在 Studio Classic 中从 Data Wrangler 迁移数据流,则必须按照手动导出流程文件的步骤进行操作。
使用 Amazon S3 的优缺点
在这种方法中,您可以使用 A EFS-to-Amazon mazon S3 AWS DataSync 任务(一次或节奏)来复制数据,然后创建生命周期配置,将用户的数据从 Amazon S3 复制到其私有空间的 Amazon EBS 卷。
优点:
-
如果已连接到域,LCC则用户可以选择使用将数据复制LCC到其空间,或者在不使用LCC脚本的情况下运行空间。这使用户可以选择仅将文件复制到他们需要的空间。
-
如果按节奏设置 AWS DataSync 任务,则用户可以重新启动他们的 Studio 应用程序以获取最新的文件。
-
由于数据已复制到 AmazonEBS,因此用户对文件具有写入权限。
-
亚马逊 S3 存储比亚马逊便宜EFS。
-
如果在 Studio Classic 中从 Data Wrangler 迁移数据流,则可以跳过手动导出步骤,直接将数据流从 Amazon S3 导入 SageMaker Canvas。
缺点:
-
如果管理员需要防止异花授粉,他们必须在用户级别创建 AWS Identity and Access Management 策略,确保用户只能访问包含其文件的 Amazon S3 前缀。
在这种方法中,您可以使用 Amazon EFS-to-Amazon EFS AWS DataSync 将 Studio Classic Amazon EFS 卷的内容复制到目标亚马逊EFS卷一次或按固定节奏复制到目标亚马逊卷,然后将目标亚马逊EFS卷挂载到用户的空间。这使用户可以在自己的 Studio 计算环境中访问来自 Studio Classic 的数据。
-
创建目标 Amazon EFS 卷。您将数据传输到此 Amazon EFS 卷,并使用前缀级挂载将其挂载到相应的用户空间。
export SOURCE_DOMAIN_ID="
domain-id
" export REGION="region
" export TARGET_EFS=$(aws efs create-file-system --performance-mode generalPurpose --throughput-mode bursting --encrypted --region $REGION | jq -r '.FileSystemId') echo "Target EFS volume Created: $TARGET_EFS" -
为当前连接到该域并供所有用户使用的源 Amazon EFS 卷添加变量。该域名的 Amazon Virtual Private Private Cloud 信息EFS是必需的,以确保目标亚马逊是在同一个亚马逊VPC和子网中创建的,并且具有相同的安全组配置。
export SOURCE_EFS=$(aws sagemaker describe-domain --domain-id $SOURCE_DOMAIN_ID | jq -r '.HomeEfsFileSystemId') export VPC_ID=$(aws sagemaker describe-domain --domain-id $SOURCE_DOMAIN_ID | jq -r '.VpcId') echo "EFS managed by SageMaker: $SOURCE_EFS | VPC: $VPC_ID"
-
使用相同的安全组配置,在与源 Amazon EFS 卷相同的亚马逊VPC和子网中创建 Amazon EFS 挂载目标。挂载目标需要几分钟才可用。
export EFS_VPC_ID=$(aws efs describe-mount-targets --file-system-id $SOURCE_EFS | jq -r ".MountTargets[0].VpcId") export EFS_AZ_NAME=$(aws efs describe-mount-targets --file-system-id $SOURCE_EFS | jq -r ".MountTargets[0].AvailabilityZoneName") export EFS_AZ_ID=$(aws efs describe-mount-targets --file-system-id $SOURCE_EFS | jq -r ".MountTargets[0].AvailabilityZoneId") export EFS_SUBNET_ID=$(aws efs describe-mount-targets --file-system-id $SOURCE_EFS | jq -r ".MountTargets[0].SubnetId") export EFS_MOUNT_TARG_ID=$(aws efs describe-mount-targets --file-system-id $SOURCE_EFS | jq -r ".MountTargets[0].MountTargetId") export EFS_SG_IDS=$(aws efs describe-mount-target-security-groups --mount-target-id $EFS_MOUNT_TARG_ID | jq -r '.SecurityGroups[]') aws efs create-mount-target \ --file-system-id $TARGET_EFS \ --subnet-id $EFS_SUBNET_ID \ --security-groups $EFS_SG_IDS
-
为 AWS DataSync 任务创建 Amazon EFS 来源和目标位置。
export SOURCE_EFS_ARN=$(aws efs describe-file-systems --file-system-id $SOURCE_EFS | jq -r ".FileSystems[0].FileSystemArn") export TARGET_EFS_ARN=$(aws efs describe-file-systems --file-system-id $TARGET_EFS | jq -r ".FileSystems[0].FileSystemArn") export EFS_SUBNET_ID_ARN=$(aws ec2 describe-subnets --subnet-ids $EFS_SUBNET_ID | jq -r ".Subnets[0].SubnetArn") export ACCOUNT_ID=$(aws ec2 describe-security-groups --group-id $EFS_SG_IDS | jq -r ".SecurityGroups[0].OwnerId") export EFS_SG_ID_ARN=arn:aws:ec2:$REGION:$ACCOUNT_ID:security-group/$EFS_SG_IDS export SOURCE_LOCATION_ARN=$(aws datasync create-location-efs --subdirectory "/" --efs-filesystem-arn $SOURCE_EFS_ARN --ec2-config SubnetArn=$EFS_SUBNET_ID_ARN,SecurityGroupArns=$EFS_SG_ID_ARN --region $REGION | jq -r ".LocationArn") export DESTINATION_LOCATION_ARN=$(aws datasync create-location-efs --subdirectory "/" --efs-filesystem-arn $TARGET_EFS_ARN --ec2-config SubnetArn=$EFS_SUBNET_ID_ARN,SecurityGroupArns=$EFS_SG_ID_ARN --region $REGION | jq -r ".LocationArn")
-
允许源网络文件系统和目标网络文件系统 (NFS) 挂载之间的流量。创建新域时, SageMaker 会创建 2 个安全组。
-
NFS仅包含入站流量的入站安全组。
-
NFS仅包含出站流量的出站安全组。
源和目标NFS位于同一个安全组中。您可以允许来自 AWS Management Console 或 AWS CLI的这些坐骑之间的流量。
-
允许来自的流量 AWS Management Console
登录 AWS Management Console 并打开 Amazon VPC 控制台,网址为https://console.aws.amazon.com/vpc/
。 -
选择 Security Groups。
-
在 “安全组” 页面上搜索现有域的 ID。
d-
xxxxxxx
结果应返回两个名称中包含域 ID 的安全组。
-
security-group-for-inbound-nfs-
domain-id
-
security-group-for-outbound-nfs-
domain-id
-
-
选择入站安全组 ID。这将打开一个新页面,其中包含有关安全组的详细信息。
-
选择 “出站规则” 选项卡。
-
选择 “编辑出站规则”。
-
更新现有出站规则或使用以下值添加新的出站规则:
-
类型:NFS
-
协议:TCP
-
端口范围:2049
-
目的地: security-group-for-outbound-nfs-
domain-id
|security-group-id
-
-
选择保存规则。
-
选择 “入站规则” 选项卡。
-
选择编辑入站规则。
-
更新现有入站规则或使用以下值添加新的出站规则:
-
类型:NFS
-
协议:TCP
-
端口范围:2049
-
目的地: security-group-for-outbound-nfs-
domain-id
|security-group-id
-
-
选择保存规则。
-
允许来自的流量 AWS CLI
-
使用以下值更新安全组入站和出站规则:
-
协议:TCP
-
端口范围:2049
-
组 ID:入站安全组 ID 或出站安全组 ID
export INBOUND_SG_ID=$(aws ec2 describe-security-groups --filters "Name=group-name,Values=security-group-for-inbound-nfs-$SOURCE_DOMAIN_ID" | jq -r ".SecurityGroups[0].GroupId") export OUTBOUND_SG_ID=$(aws ec2 describe-security-groups --filters "Name=group-name,Values=security-group-for-outbound-nfs-$SOURCE_DOMAIN_ID" | jq -r ".SecurityGroups[0].GroupId") echo "Outbound SG ID: $OUTBOUND_SG_ID | Inbound SG ID: $INBOUND_SG_ID" aws ec2 authorize-security-group-egress \ --group-id $INBOUND_SG_ID \ --protocol tcp --port 2049 \ --source-group $OUTBOUND_SG_ID aws ec2 authorize-security-group-ingress \ --group-id $OUTBOUND_SG_ID \ --protocol tcp --port 2049 \ --source-group $INBOUND_SG_ID
-
-
将入站和出站安全组添加到源和目标 Amazon EFS 挂载目标。这允许在 2 个 Amazon EFS 坐骑之间进行流量。
export SOURCE_EFS_MOUNT_TARGET=$(aws efs describe-mount-targets --file-system-id $SOURCE_EFS | jq -r ".MountTargets[0].MountTargetId") export TARGET_EFS_MOUNT_TARGET=$(aws efs describe-mount-targets --file-system-id $TARGET_EFS | jq -r ".MountTargets[0].MountTargetId") aws efs modify-mount-target-security-groups \ --mount-target-id $SOURCE_EFS_MOUNT_TARGET \ --security-groups $INBOUND_SG_ID $OUTBOUND_SG_ID aws efs modify-mount-target-security-groups \ --mount-target-id $TARGET_EFS_MOUNT_TARGET \ --security-groups $INBOUND_SG_ID $OUTBOUND_SG_ID
-
-
-
创建 AWS DataSync 任务。这将返回一个任务ARN,该任务可用于按需运行该任务或作为常规节奏的一部分。
export EXTRA_XFER_OPTIONS='VerifyMode=ONLY_FILES_TRANSFERRED,OverwriteMode=ALWAYS,Atime=NONE,Mtime=NONE,Uid=NONE,Gid=NONE,PreserveDeletedFiles=REMOVE,PreserveDevices=NONE,PosixPermissions=NONE,TaskQueueing=ENABLED,TransferMode=CHANGED,SecurityDescriptorCopyFlags=NONE,ObjectTags=NONE' export DATASYNC_TASK_ARN=$(aws datasync create-task --source-location-arn $SOURCE_LOCATION_ARN --destination-location-arn $DESTINATION_LOCATION_ARN --name "SMEFS_to_CustomEFS_Sync" --region $REGION --options $EXTRA_XFER_OPTIONS | jq -r ".TaskArn")
-
启动一项 AWS DataSync 任务,自动将数据从源 Amazon 复制EFS到目标 Amazon EFS 挂载。这不会保留文件的POSIX权限,允许用户从目标 Amazon EFS 挂载中读取数据,但不能写入该挂载。
aws datasync start-task-execution --task-arn $DATASYNC_TASK_ARN
-
在根级别将目标 Amazon EFS 卷挂载到域上。
aws sagemaker update-domain --domain-id $SOURCE_DOMAIN_ID \ --default-user-settings '{"CustomFileSystemConfigs": [{"EFSFileSystemConfig": {"FileSystemId": "'"$TARGET_EFS"'", "FileSystemPath": "/"}}]}'
-
使用
FileSystemPath
前缀覆盖每个用户配置文件。前缀包括用户的前缀UID,该前缀由创建 SageMaker。这样可以确保用户只能访问其数据,并防止异花授粉。在域中创建空间并将目标 Amazon EFS 卷挂载到应用程序时,用户的前缀会覆盖域前缀。因此, SageMaker 只能将/user-id
目录挂载到用户的应用程序上。aws sagemaker list-user-profiles --domain-id $SOURCE_DOMAIN_ID | jq -r '.UserProfiles[] | "\(.UserProfileName)"' | while read user; do export uid=$(aws sagemaker describe-user-profile --domain-id $SOURCE_DOMAIN_ID --user-profile-name $user | jq -r ".HomeEfsFileSystemUid") echo "$user $uid" aws sagemaker update-user-profile --domain-id $SOURCE_DOMAIN_ID --user-profile-name $user --user-settings '{"CustomFileSystemConfigs": [{"EFSFileSystemConfig":{"FileSystemId": "'"$TARGET_EFS"'", "FileSystemPath": "'"/$uid/"'"}}]}' done
-
然后,用户可以在启动应用程序时选择自定义 Amazon EFS 文件系统。有关更多信息,请参阅JupyterLab 用户指南 或在 Studio 中启动代码编辑器应用程序。
在这种方法中,您可以使用 A EFS-to-Amazon mazon S3 AWS DataSync 任务将 Studio Classic Amazon EFS 卷的内容一次性或定期复制到 Amazon S3 存储桶,然后创建生命周期配置,将用户的数据从 Amazon S3 复制到其私有空间的亚马逊EBS卷中。
注意
这种方法仅适用于可以访问互联网的域名。
-
从包含您要迁移的数据的域中设置源 Amazon EFS 卷 ID。
timestamp=$(date +%Y%m%d%H%M%S) export SOURCE_DOMAIN_ID="
domain-id
" export REGION="region
" export ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) export EFS_ID=$(aws sagemaker describe-domain --domain-id $SOURCE_DOMAIN_ID | jq -r '.HomeEfsFileSystemId') -
设置目标 Amazon S3 存储桶名称。有关创建 Amazon S3 存储桶的信息,请参阅创建存储桶。使用的存储桶必须有如中所述的CORS策略(可选)更新您的CORS策略以访问 Amazon S3 存储桶。该域中的用户还必须拥有访问 Amazon S3 存储桶的权限。
在此示例中,我们将文件复制到名为的前缀
studio-new
。如果您使用单个 Amazon S3 存储桶迁移多个域,请使用studio-new/<domain-id>
前缀来限制对文件的权限IAM。export BUCKET_NAME=
s3-bucket-name
export S3_DESTINATION_PATH=studio-new -
创建信任策略, AWS DataSync 授予担任账户执行角色的权限。
export TRUST_POLICY=$(cat <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "datasync.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "$ACCOUNT_ID" }, "ArnLike": { "aws:SourceArn": "arn:aws:datasync:$REGION:$ACCOUNT_ID:*" } } } ] } EOF )
-
创建IAM角色并附加信任策略。
export timestamp=$(date +%Y%m%d%H%M%S) export ROLE_NAME="DataSyncS3Role-$timestamp" aws iam create-role --role-name $ROLE_NAME --assume-role-policy-document "$TRUST_POLICY" aws iam attach-role-policy --role-name $ROLE_NAME --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess echo "Attached IAM Policy AmazonS3FullAccess" aws iam attach-role-policy --role-name $ROLE_NAME --policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess echo "Attached IAM Policy AmazonSageMakerFullAccess" export ROLE_ARN=$(aws iam get-role --role-name $ROLE_NAME --query 'Role.Arn' --output text) echo "Created IAM Role $ROLE_ARN"
-
创建一个安全组以授予对 Amazon EFS 营业地点的访问权限。
export EFS_ARN=$(aws efs describe-file-systems --file-system-id $EFS_ID | jq -r '.FileSystems[0].FileSystemArn' ) export EFS_SUBNET_ID=$(aws efs describe-mount-targets --file-system-id $EFS_ID | jq -r '.MountTargets[0].SubnetId') export EFS_VPC_ID=$(aws efs describe-mount-targets --file-system-id $EFS_ID | jq -r '.MountTargets[0].VpcId') export MOUNT_TARGET_ID=$(aws efs describe-mount-targets --file-system-id $EFS_ID | jq -r '.MountTargets[0].MountTargetId ') export EFS_SECURITY_GROUP_ID=$(aws efs describe-mount-target-security-groups --mount-target-id $MOUNT_TARGET_ID | jq -r '.SecurityGroups[0]') export EFS_SUBNET_ARN=$(aws ec2 describe-subnets --subnet-ids $EFS_SUBNET_ID | jq -r '.Subnets[0].SubnetArn') echo "Subnet ID: $EFS_SUBNET_ID" echo "Security Group ID: $EFS_SECURITY_GROUP_ID" echo "Subnet ARN: $EFS_SUBNET_ARN" timestamp=$(date +%Y%m%d%H%M%S) sg_name="datasync-sg-$timestamp" export DATASYNC_SG_ID=$(aws ec2 create-security-group --vpc-id $EFS_VPC_ID --group-name $sg_name --description "DataSync SG" --output text --query 'GroupId') aws ec2 authorize-security-group-egress --group-id $DATASYNC_SG_ID --protocol tcp --port 2049 --source-group $EFS_SECURITY_GROUP_ID aws ec2 authorize-security-group-ingress --group-id $EFS_SECURITY_GROUP_ID --protocol tcp --port 2049 --source-group $DATASYNC_SG_ID export DATASYNC_SG_ARN="arn:aws:ec2:$REGION:$ACCOUNT_ID:security-group/$DATASYNC_SG_ID" echo "Security Group ARN: $DATASYNC_SG_ARN"
-
为该 AWS DataSync 任务创建一个 Amaz EFS on 来源。
export SOURCE_ARN=$(aws datasync create-location-efs --efs-filesystem-arn $EFS_ARN --ec2-config "{\"SubnetArn\": \"$EFS_SUBNET_ARN\", \"SecurityGroupArns\": [\"$DATASYNC_SG_ARN\"]}" | jq -r '.LocationArn') echo "Source Location ARN: $SOURCE_ARN"
-
为该 AWS DataSync 任务创建目标 Amazon S3 地点。
export BUCKET_ARN="arn:aws:s3:::$BUCKET_NAME" export DESTINATION_ARN=$(aws datasync create-location-s3 --s3-bucket-arn $BUCKET_ARN --s3-config "{\"BucketAccessRoleArn\": \"$ROLE_ARN\"}" --subdirectory $S3_DESTINATION_PATH | jq -r '.LocationArn') echo "Destination Location ARN: $DESTINATION_ARN"
-
创建 AWS DataSync 任务。
export TASK_ARN=$(aws datasync create-task --source-location-arn $SOURCE_ARN --destination-location-arn $DESTINATION_ARN | jq -r '.TaskArn') echo "DataSync Task: $TASK_ARN"
-
启动 AWS DataSync 任务。此任务会自动将数据从源 Amazon EFS 卷复制到目标 Amazon S3 存储桶。等待任务完成。
aws datasync start-task-execution --task-arn $TASK_ARN
-
检查 AWS DataSync 任务的状态以验证其是否已完成。传递上一步中ARN返回的。
export TASK_EXEC_ARN=
datasync-task-arn
echo "Task execution ARN: $TASK_EXEC_ARN" export STATUS=$(aws datasync describe-task-execution --task-execution-arn $TASK_EXEC_ARN | jq -r '.Status') echo "Execution status: $STATUS" while [ "$STATUS" = "QUEUED" ] || [ "$STATUS" = "LAUNCHING" ] || [ "$STATUS" = "PREPARING" ] || [ "$STATUS" = "TRANSFERRING" ] || [ "$STATUS" = "VERIFYING" ]; do STATUS=$(aws datasync describe-task-execution --task-execution-arn $TASK_EXEC_ARN | jq -r '.Status') if [ $? -ne 0 ]; then echo "Error Running DataSync Task" exit 1 fi echo "Execution status: $STATUS" sleep 30 done -
AWS DataSync 任务完成后,清理先前创建的资源。
aws datasync delete-task --task-arn $TASK_ARN echo "Deleted task $TASK_ARN" aws datasync delete-location --location-arn $SOURCE_ARN echo "Deleted location source $SOURCE_ARN" aws datasync delete-location --location-arn $DESTINATION_ARN echo "Deleted location source $DESTINATION_ARN" aws iam detach-role-policy --role-name $ROLE_NAME --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess aws iam detach-role-policy --role-name $ROLE_NAME --policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess aws iam delete-role --role-name $ROLE_NAME echo "Deleted IAM Role $ROLE_NAME" echo "Wait 5 minutes for the elastic network interface to detach..." start_time=$(date +%s) while [[ $(($(date +%s) - start_time)) -lt 300 ]]; do sleep 1 done aws ec2 revoke-security-group-ingress --group-id $EFS_SECURITY_GROUP_ID --protocol tcp --port 2049 --source-group $DATASYNC_SG_ID echo "Revoked Ingress from $EFS_SECURITY_GROUP_ID" aws ec2 revoke-security-group-egress --group-id $DATASYNC_SG_ID --protocol tcp --port 2049 --source-group $EFS_SECURITY_GROUP_ID echo "Revoked Egress from $DATASYNC_SG_ID" aws ec2 delete-security-group --group-id $DATASYNC_SG_ID echo "Deleted DataSync SG $DATASYNC_SG_ID"
-
在本地计算机上,创建一个名为
on-start.sh
的文件,内容如下。此脚本将用户在 Amazon S3 中的亚马逊EFS主目录复制到 Studio 中用户的亚马逊EBS卷中,并为每个用户个人资料创建一个前缀。#!/bin/bash set -eo pipefail sudo apt-get install -y jq # Studio Variables DOMAIN_ID=$(cat /opt/ml/metadata/resource-metadata.json | jq -r '.DomainId') SPACE_NAME=$(cat /opt/ml/metadata/resource-metadata.json | jq -r '.SpaceName') USER_PROFILE_NAME=$(aws sagemaker describe-space --domain-id=$DOMAIN_ID --space-name=$SPACE_NAME | jq -r '.OwnershipSettings.OwnerUserProfileName') # S3 bucket to copy from BUCKET=
s3-bucket-name
# Subfolder in bucket to copy PREFIX=studio-new # Getting HomeEfsFileSystemUid for the current user-profile EFS_FOLDER_ID=$(aws sagemaker describe-user-profile --domain-id $DOMAIN_ID --user-profile-name $USER_PROFILE_NAME | jq -r '.HomeEfsFileSystemUid') # Local destination directory DEST=./studio-classic-efs-backup mkdir -p $DEST echo "Bucket: s3://$BUCKET/$PREFIX/$EFS_FOLDER_ID/" echo "Destination $DEST/" echo "Excluding .*" echo "Excluding .*/*" aws s3 cp s3://$BUCKET/$PREFIX/$EFS_FOLDER_ID/ $DEST/ \ --exclude ".*" \ --exclude "**/.*" \ --recursive -
将您的脚本转换为 base64 格式。此要求可防止因空格和换行编码而出现错误。脚本类型可以是
JupyterLab
或CodeEditor
。export LCC_SCRIPT_NAME='studio-classic-sync' export SCRIPT_FILE_NAME='on-start.sh' export SCRIPT_TYPE='
JupyterLab-or-CodeEditor
' LCC_CONTENT=`openssl base64 -A -in ${SCRIPT_FILE_NAME}` -
在使用脚本之前,请验证以下内容:
-
Amazon 的EBS容量足够大,足以存储您要导出的对象。
-
如果您不打算迁移隐藏的文件和文件夹,
.condarc
则不会迁移隐藏文件.bashrc
和文件夹。 -
与 Studio 用户配置文件关联的 AWS Identity and Access Management (IAM) 执行角色的策略配置为仅访问 Amazon S3 中相应的主目录。
-
-
使用您的脚本创建生命周期配置。
aws sagemaker create-studio-lifecycle-config \ --studio-lifecycle-config-name $LCC_SCRIPT_NAME \ --studio-lifecycle-config-content $LCC_CONTENT \ --studio-lifecycle-config-app-type $SCRIPT_TYPE
-
将其附加LCC到您的域中。
aws sagemaker update-domain \ --domain-id $SOURCE_DOMAIN_ID \ --default-user-settings ' {"JupyterLabAppSettings": {"LifecycleConfigArns": [ "
lifecycle-config-arn
" ] } }' -
然后,用户可以在启动应用程序时选择LCC脚本。有关更多信息,请参阅JupyterLab 用户指南 或在 Studio 中启动代码编辑器应用程序。这会自动将文件从 Amazon S3 同步到亚马逊EBS存储空间以供用户使用。
从 Data Wrangler 迁移数据流
如果您之前曾在 Amazon SageMaker SageMaker Studio Classic 中使用 Amazon Data Wrangler 执行数据准备任务,则可以迁移到新的亚马逊 SageMaker Studio,在 Amazon Canvas 中访问最新版本的 Data Wrangler。 SageMaker Can SageMaker vas 中的 Data Wrangler 可为您提供增强的用户体验并访问最新功能,例如自然语言界面和更快的性能。
你可以随时登录 SageMaker Canvas,开始使用全新 Data Wrangler 体验。有关更多信息,请参阅 开始使用 Amazon C SageMaker anvas。
如果您之前正在处理的数据流文件保存在 Studio Classic 中,则可以加载 Studio,然后将流程文件导入 Canvas。您可以选择以下迁移选项:
一键迁移:登录 Canvas 时,您可以使用一次性导入选项代您迁移所有流程文件。
手动迁移:您可以手动将流程文件导入 Canvas。在 Studio Classic 中,要么将文件导出到 Amazon S3,要么将其下载到本地计算机。然后,登录 SageMaker Canvas 应用程序,导入流程文件并继续执行数据准备任务。
以下指南描述了迁移的先决条件以及如何使用一键或手动选项迁移数据流文件。
先决条件
在开始迁移流程文件之前,请查看以下先决条件。
第 1 步。迁移域名并授予权限
在迁移数据流文件之前,您需要按照从亚马逊 SageMaker Studio 经典版迁移指南中的特定步骤进行操作,以确保您的用户配置文件的 AWS IAM执行角色具有所需的权限。将界面从 Studio Classic 迁移在继续操作之前,请遵循先决条件,其中描述了如何授予所需权限、将 Studio 配置为新体验以及如何迁移现有域。
具体而言,您必须拥有创建 SageMaker Canvas 应用程序和使用 C SageMaker anvas 数据准备功能的权限。要获得这些权限,您可以:
将 AmazonSageMakerCanvasDataPrepFullAccess策略添加到您的IAM角色中,或者
附加最低权限策略,如页面的 “(可选)从 Studio Classic 中的 Data Wrangler 迁移到 Can SageMaker vas” 部分所示。将界面从 Studio Classic 迁移
确保在 Studio 和 C SageMaker anvas 上使用相同的用户配置文件。
完成迁移指南中列出的先决条件后,您应该拥有一个具有通过 Studio 访问 SageMaker Canvas 所需权限的新域。
第 2 步。(可选)准备一个 Amazon S3 地点
如果您正在进行手动迁移,并计划使用 Amazon S3 来传输流程文件而不是使用本地下载选项,那么您的账户中应该有一个 Amazon S3 存储桶,用于存储流程文件。
一键迁移方法
SageMaker Canvas 提供一次性导入选项,用于将数据流从 Studio Classic 中的 Data Wrangler 迁移到 Canvas 中的数据牧马人。 SageMaker 只要您的 Studio Classic 和 Canvas 应用程序共享相同的亚马逊EFS存储量,您就可以从 Canvas 一键迁移。这种简化的流程无需手动导出和导入步骤,而且您可以一次性导入所有流程。
使用以下步骤迁移所有流程文件:
-
打开最新版本的 Studio。
-
在 Studio 的左侧导航窗格中,选择数据下拉菜单。
-
从导航选项中选择 D ata Wrangler。
-
在 Data Wrangler 页面上,选择在画布中运行。如果您已成功设置权限,则会为您创建一个 Canvas 应用程序。Canvas 应用程序可能需要几分钟才能准备就绪。
-
画布准备就绪后,选择 “在画布中打开”。
-
Canvas 会打开 Data Wrangler 页面,页面顶部会出现一个横幅,上面写着 “将
你的数据流从 Studio Classic 中的 Data Wrangler 导入到 Can vas”。这是一次性导入。了解更多
。在横幅中,选择 “全部导入”。警告
如果您关闭横幅通知,您将无法再重新打开它或使用一键迁移方法。
屏幕上会出现一条弹出通知,指示 Canvas 正在从 Studio Classic 导入您的流程文件。如果导入完全成功,您将收到另一条通知,告知已导入流程文件X
数量,并且可以在 Canvas 应用程序的 Data Wrangler 页面上看到您的流程文件。任何与 Canvas 应用程序中现有数据流同名的导入流程文件都将使用后缀重命名。您可以打开数据流以验证其外观是否符合预期。
如果您的任何流程文件未能成功导入,您会收到一条通知,告知导入要么部分成功,要么失败。在通知消息上选择 “查看错误”,查看各个错误消息,以获取有关如何重新格式化任何格式错误的流程文件的指导。
导入流程文件后,您现在应该可以继续使用 Data Wrangler 在 Canvas 中 SageMaker 准备数据。
手动迁移方法
以下各节介绍如何手动将流程文件导入 Canvas,以防一键迁移方法不起作用。
从 Studio 经典版导出流程文件
注意
如果您已经按照中的说明将 Studio Classic 数据迁移到 Amazon S3(可选)将数据从 Studio Classic 迁移到,则可以跳过此步骤,直接进入从存储 Studio Classic 数据的 Amazon S3 位置导入流程文件的将流程文件导入画布部分。
您可以通过将流程文件保存到 Amazon S3 或将其下载到本地计算机来导出。在下一步中将流程文件导入 SageMaker Canvas 时,如果您选择本地上传选项,则一次只能上传 20 个流程文件。如果您有大量流程文件要导入,我们建议您改用 Amazon S3。
按照方法 1:使用 Amazon S3 传输流程文件或中的说明方法 2:使用本地计算机传输流程文件继续操作。
方法 1:使用 Amazon S3 传输流程文件
使用这种方法,您可以使用 Amazon S3 作为 Studio Classic 中的 Data Wrangler 和 Can SageMaker vas 中的 Data Wrangler(可通过最新版本的 Studio 访问)之间的中介。您将流程文件从 Studio Classic 导出到 Amazon S3,然后在下一步中,通过 Studio 访问 Canvas 并从 Amazon S3 导入流程文件。
确保您已准备好一个 Amazon S3 存储桶作为流程文件的存储位置。
使用以下步骤将您的流程文件从 Studio Classic 导出到 Amazon S3:
-
开放式工作室经典版。
-
通过执行以下操作打开新终端:
-
在顶部导航栏上,选择文件。
-
在快捷菜单中,将鼠标悬停在 “新建” 上,然后选择 “终端”。
-
-
默认情况下,终端应在您的主目录中打开。导航到包含所有要迁移的流程文件的文件夹。
-
使用以下命令将所有流程文件同步到指定的 Amazon S3 位置。将
和{bucket-name}
替换为指向所需的 Amazon S3 位置的路径。有关命令和参数的更多信息,请参阅《命令参考》中的 sync AWS AWS CLI 命令。{folder}
aws s3 sync . s3://
{bucket-name}
/{folder}
/ --exclude "*.*" --include "*.flow"如果您使用的是自己的文件 AWS KMS key,请改用以下命令来同步文件并指定您的KMS密钥 ID。确保用户的IAM执行角色(应与步骤 1 中使用的角色相同)。 迁移域并授予上述先决条件的权限(前提条件)已被授予使用KMS密钥的权限。
aws s3 sync . s3://
{bucket-name}
/{folder}
/ --exclude "*.*" --include "*.flow" --sse-kms-key-id{your-key-id}
现在,您的流程文件应该已导出。您可以检查您的 Amazon S3 存储桶,以确保流程文件已成功同步。
要将这些文件导入最新版本的 Data Wrangler 中,请按照中的步骤操作。将流程文件导入画布
方法 2:使用本地计算机传输流程文件
使用此方法,您可以将流程文件从 Studio Classic 下载到本地计算机。您可以直接下载文件,也可以将其压缩为 zip 存档。然后,在本地解压压缩压缩压缩文件(如果适用),登录 Canvas,然后通过从本地计算机上传流程文件来导入这些文件。
使用以下步骤从 Studio Classic 下载您的流程文件:
-
开放式工作室经典版。
-
(可选)如果要将多个流程文件压缩成一个 zip 存档并同时下载所有文件,请执行以下操作:
-
在 Studio Classic 的顶部导航栏上,选择文件。
-
在快捷菜单中,将鼠标悬停在 “新建” 上,然后选择 “终端”。
-
默认情况下,终端将在您的主目录中打开。导航到包含所有要迁移的流程文件的文件夹。
-
使用以下命令将当前目录中的流程文件打包为 zip 文件。该命令排除所有隐藏的文件:
find . -not -path "*/.*" -name "*.flow" -print0 | xargs -0 zip my_archive.zip
-
-
通过执行以下操作,将 zip 存档文件或单个流程文件下载到本地计算机:
-
在 Studio Classic 的左侧导航窗格中,选择文件浏览器。
-
在文件浏览器中找到要下载的文件。
-
右键单击该文件,然后在上下文菜单中选择 “下载”。
-
该文件应下载到您的本地计算机上。如果您将它们打包为 zip 存档,请将文件解压缩到本地。提取文件后,要将这些文件导入最新版本的 Data Wrangler 中,请按照中的步骤操作。将流程文件导入画布
将流程文件导入画布
导出流程文件后,通过 Studio 访问 Canvas 并导入文件。
使用以下步骤将流程文件导入 Canvas:
-
打开最新版本的 Studio。
-
在 Studio 的左侧导航窗格中,选择数据下拉菜单。
-
从导航选项中选择 D ata Wrangler。
-
在 Data Wrangler 页面上,选择在画布中运行。如果您已成功设置权限,则会为您创建一个 Canvas 应用程序。Canvas 应用程序可能需要几分钟才能准备就绪。
-
画布准备就绪后,选择 “在画布中打开”。
-
Canvas 打开 “数据牧马人” 页面。在顶部窗格中,选择导入数据流。
-
对于数据源,请选择 Amazon S3 或本地上传。
-
从 Amazon S3 存储桶中选择您的流程文件,或者从本地计算机上传文件。
注意
对于本地上传,您一次最多可以上传 20 个流程文件。对于较大的进口商品,请使用 Amazon S3。如果您选择要导入的文件夹,则还会导入子文件夹中的所有流程文件。
-
选择导入数据。
如果导入成功,您会收到一条通知,告知已成功导入流程文件X
数量。
如果您的流程文件未能成功导入,则会在 SageMaker Canvas 应用程序中收到通知。在通知消息上选择 “查看错误”,查看各个错误消息,以获取有关如何重新格式化任何格式错误的流程文件的指导。
流程文件导入完成后,转到 Canva SageMaker s 应用程序的 Data Wrangler 页面查看您的数据流。您可以尝试打开数据流以验证其外观是否符合预期。