기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
(선택 사항) Studio Classic에서 Studio로 데이터 마이그레이션
Studio Classic과 Studio는 두 가지 유형의 스토리지 볼륨을 사용합니다. Studio Classic은 단일 Amazon Elastic File System(Amazon EFS) 볼륨을 사용하여 도메인의 모든 사용자 및 공유 공간에 데이터를 저장합니다. Studio에서 각 공간은 자체 Amazon Elastic Block Store(Amazon EBS) 볼륨을 가져옵니다. 기존 도메인의 기본 환경을 업데이트하면 는 도메인의 각 사용자에 대해 Amazon EFS 볼륨에 폴더를 SageMaker 자동으로 마운트합니다. 따라서 사용자는 Studio 애플리케이션의 Studio Classic에서 파일에 액세스할 수 있습니다. 자세한 내용은 스튜디오에서 아마존 EFS 자동 마운팅 단원을 참조하십시오.
또한 Amazon EFS 자동 탑재를 옵트아웃하고 데이터를 수동으로 마이그레이션하여 Studio Classic in Studio 애플리케이션의 파일에 대한 액세스 권한을 사용자에게 제공할 수 있습니다. 이렇게 하려면 사용자 홈 디렉터리의 파일을 해당 공백과 연결된 Amazon EBS 볼륨으로 전송해야 합니다. 다음 섹션에서는 이 워크플로에 대한 정보를 제공합니다. Amazon EFS 자동 탑재를 옵트아웃하는 방법에 대한 자세한 내용은 섹션을 참조하세요Amazon EFS 자동 탑재 옵트아웃.
Studio Classic에서 모든 데이터를 수동으로 마이그레이션
다음 섹션에서는 Studio Classic 스토리지 볼륨의 모든 데이터를 새 Studio 환경으로 마이그레이션하는 방법을 설명합니다.
사용자의 데이터, 코드 및 아티팩트를 Studio Classic에서 Studio로 수동으로 마이그레이션할 때는 다음 방법 중 하나를 사용하는 것이 좋습니다.
-
사용자 지정 Amazon EFS 볼륨 사용
-
Amazon Simple Storage Service 사용(Amazon S3)
Studio Classic에서 Amazon SageMaker Data Wrangler를 사용하고 데이터 흐름 파일을 마이그레이션하려는 경우 마이그레이션을 위해 다음 옵션 중 하나를 선택합니다.
-
데이터 흐름 파일을 포함하여 Studio Classic 스토리지 볼륨에서 모든 데이터를 마이그레이션하려면 로 이동하여 Amazon S3를 사용하여 데이터 마이그레이션 섹션을 Studio Classic에서 모든 데이터를 수동으로 마이그레이션 완료합니다. 그런 다음 Canvas로 흐름 파일 가져오기 섹션으로 건너뜁니다.
-
데이터 흐름 파일만 마이그레이션하고 Studio Classic 스토리지 볼륨의 다른 데이터는 마이그레이션하지 않으려면 Data Wrangler에서 데이터 흐름 마이그레이션 섹션으로 건너뜁니다.
사전 조건
이러한 단계를 실행하기 전에 의 사전 조건을 완료합니다Studio 환경을 마이그레이션하기 위한 사전 조건 완료. 또한 의 단계를 완료해야 합니다UI를 Studio Classic에서 Studio로 마이그레이션.
접근 방식 선택
Studio Classic 데이터를 마이그레이션하기 위한 접근 방식을 선택할 때는 다음 사항을 고려하세요.
사용자 지정 Amazon EFS 볼륨 사용의 장단점
이 접근 방식에서는 Amazon EFS-to-Amazon EFS AWS DataSync 작업(일회성 또는 주기성)을 사용하여 데이터를 복사한 다음 대상 Amazon EFS 볼륨을 사용자의 공간에 탑재합니다. 이를 통해 사용자는 Studio 컴퓨팅 환경에서 Studio Classic의 데이터에 액세스할 수 있습니다.
장점:
-
사용자의 홈 디렉터리 데이터만 사용자 공간에 표시됩니다. 데이터 교차 폴링은 없습니다.
-
소스 Amazon EFS 볼륨에서 대상 Amazon EFS 볼륨으로 동기화하는 것은 에서 관리하는 소스 Amazon EFS 볼륨을 공백 SageMaker 에 직접 탑재하는 것보다 안전합니다. 이렇게 하면 홈 디렉터리 사용자 파일에 영향을 미칠 가능성이 없습니다.
-
사용자는 Studio Classic 및 Studio 애플리케이션에서 작업을 계속할 수 있는 유연성이 있으며 가 정기적으로 AWS DataSync 설정된 경우 두 애플리케이션에서 데이터를 사용할 수 있습니다.
-
Amazon S3를 사용하여 푸시 앤 풀을 반복할 필요가 없습니다.
단점:
-
사용자 공간에 탑재된 대상 Amazon EFS 볼륨에 대한 쓰기 액세스 권한이 없습니다. 대상 Amazon EFS 볼륨에 대한 쓰기 액세스 권한을 얻으려면 고객은 대상 Amazon EFS 볼륨을 Amazon Elastic Compute Cloud 인스턴스에 마운트하고 사용자가 Amazon EFS 접두사에 쓸 수 있는 적절한 권한을 제공해야 합니다.
-
네트워크 파일 시스템(NFS) 인바운드 및 아웃바운드 흐름을 허용 SageMaker 하려면 에서 관리하는 보안 그룹을 수정해야 합니다.
-
Amazon S3를 사용하는 것보다 비용이 많이 듭니다.
-
Studio Classic 의 Data Wrangler에서 데이터 흐름을 마이그레이션하는 경우 흐름 파일을 수동으로 내보내는 단계를 따라야 합니다.
Amazon S3 사용의 장단점
이 접근 방식에서는 Amazon EFS-to-Amazon S3 AWS DataSync 태스크(일회성 또는 주기성)를 사용하여 데이터를 복사한 다음 수명 주기 구성을 생성하여 Amazon S3의 사용자 데이터를 프라이빗 스페이스의 Amazon EBS 볼륨으로 복사합니다.
장점:
-
LCC 가 도메인에 연결된 경우 사용자는 LCC를 사용하여 데이터를 자신의 공간에 복사하거나 LCC 스크립트 없이 공간을 실행하도록 선택할 수 있습니다. 이를 통해 사용자는 필요한 공간에만 파일을 복사할 수 있습니다.
-
AWS DataSync 태스크가 케이던스에 설정된 경우 사용자는 Studio 애플리케이션을 다시 시작하여 최신 파일을 가져올 수 있습니다.
-
데이터가 Amazon 로 복사되므로 EBS사용자는 파일에 대한 쓰기 권한이 있습니다.
-
Amazon S3 스토리지는 Amazon 보다 저렴합니다EFS.
-
Studio Classic 의 Data Wrangler에서 데이터 흐름을 마이그레이션하는 경우 수동 내보내기 단계를 건너뛰고 Amazon S3에서 SageMaker Canvas로 데이터 흐름을 직접 가져올 수 있습니다.
단점:
-
관리자가 교차 배포를 방지해야 하는 경우 사용자가 파일이 포함된 Amazon S3 접두사에만 액세스할 수 있도록 사용자 수준에서 AWS Identity and Access Management 정책을 생성해야 합니다.
이 접근 방식에서는 Amazon EFS-to-AmazonEFS AWS DataSync 을 사용하여 Studio Classic Amazon EFS 볼륨의 콘텐츠를 한 번 또는 정기적으로 대상 Amazon EFS 볼륨에 복사한 다음 대상 Amazon 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 Cloud 정보는 대상 AmazonEFS이 동일한 Amazon 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 볼륨과 동일한 Amazon 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) 마운트 간의 트래픽을 허용합니다. 새 도메인이 생성되면 는 2개의 보안 그룹을 SageMaker 생성합니다.
-
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 탑재 대상에 인바운드 및 아웃바운드 보안 그룹을 모두 추가합니다. 이렇게 하면 두 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")
-
작업을 시작하여 소스 Amazon에서 대상 Amazon EFS 마운트EFS로 데이터를 AWS DataSync 자동으로 복사합니다. 이렇게 해도 파일의 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 볼륨이 애플리케이션에 탑재되면 사용자의 접두사가 도메인 접두사를 덮어씁니다. 따라서 는 사용자의 애플리케이션에/user-id
디렉터리 SageMaker 만 탑재합니다.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에서 Code Editor 애플리케이션 시작을 참조하세요.
이 접근 방식에서는 Amazon EFS-to-Amazon S3 AWS DataSync 태스크를 사용하여 Studio Classic Amazon EFS 볼륨의 콘텐츠를 Amazon S3 버킷에 한 번 또는 정기적으로 복사한 다음 수명 주기 구성을 생성하여 Amazon S3의 사용자 데이터를 프라이빗 스페이스의 Amazon 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 작업에 대한 소스 Amazon EFS 위치를 생성합니다.
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에 있는 사용자의 Amazon EFS 홈 디렉터리를 Studio에 있는 사용자의 Amazon 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 볼륨은 내보내는 객체를 저장할 만큼 충분히 큽니다.
-
.bashrc
및 와 같은 숨겨진 파일 및 폴더를 마이그레이션할 의도가 없는.condarc
경우 마이그레이션하지 않습니다. -
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에서 Code Editor 애플리케이션 시작을 참조하세요. 이렇게 하면 Amazon S3의 파일이 사용자 공간의 Amazon EBS 스토리지에 자동으로 동기화됩니다.
Data Wrangler에서 데이터 흐름 마이그레이션
이전에 데이터 준비 작업에 Amazon SageMaker Studio Classic에서 Amazon SageMaker Data Wrangler를 사용한 경우 새 Amazon SageMaker Studio로 마이그레이션하고 Amazon SageMaker Canvas에서 최신 버전의 Data Wrangler에 액세스할 수 있습니다. SageMaker Canvas의 Data Wrangler는 향상된 사용자 경험과 자연어 인터페이스 및 더 빠른 성능과 같은 최신 기능에 대한 액세스를 제공합니다.
언제든지 SageMaker Canvas에 온보딩하여 새로운 Data Wrangler 환경을 사용할 수 있습니다. 자세한 내용은 Amazon SageMaker Canvas 사용 시작하기 단원을 참조하십시오.
이전에 작업했던 Studio Classic에 저장된 데이터 흐름 파일이 있는 경우 Studio에 온보딩한 다음 흐름 파일을 Canvas로 가져올 수 있습니다. 마이그레이션에는 다음과 같은 옵션이 있습니다.
원클릭 마이그레이션: Canvas에 로그인하면 사용자를 대신하여 모든 흐름 파일을 마이그레이션하는 일회성 가져오기 옵션을 사용할 수 있습니다.
수동 마이그레이션: Canvas로 흐름 파일을 수동으로 가져올 수 있습니다. Studio Classic에서 파일을 Amazon S3로 내보내거나 로컬 시스템에 다운로드합니다. 그런 다음 SageMaker Canvas 애플리케이션에 로그인하여 흐름 파일을 가져오고 데이터 준비 작업을 계속합니다.
다음 가이드에서는 마이그레이션의 사전 조건과 원클릭 또는 수동 옵션을 사용하여 데이터 흐름 파일을 마이그레이션하는 방법을 설명합니다.
사전 조건
흐름 파일 마이그레이션을 시작하기 전에 다음 사전 조건을 검토하세요.
단계 1. 도메인 마이그레이션 및 권한 부여
데이터 흐름 파일을 마이그레이션하기 전에 Amazon SageMaker Studio Classic에서 마이그레이션 가이드의 특정 단계에 따라 사용자 프로필의 AWS IAM 실행 역할에 필요한 권한이 있는지 확인해야 합니다. 필수 권한을 부여하고 Studio를 새 환경으로 구성하고 기존 도메인을 마이그레이션하는 방법을 설명하는 사전 조건 및 UI를 Studio Classic에서 Studio로 마이그레이션 를 따릅니다.
특히 SageMaker Canvas 애플리케이션을 생성하고 SageMaker Canvas 데이터 준비 기능을 사용할 수 있는 권한이 있어야 합니다. 이러한 권한을 얻으려면 다음 중 하나를 수행할 수 있습니다.
IAM 역할에 AmazonSageMakerCanvasDataPrepFullAccess 정책을 추가하거나
페이지의 (선택 사항) Studio Classic의 Data Wrangler에서 SageMaker Canvas로 마이그레이션 섹션에 표시된 대로 최소 권한 정책을 연결합니다UI를 Studio Classic에서 Studio로 마이그레이션.
Studio와 SageMaker Canvas 모두에 동일한 사용자 프로필을 사용해야 합니다.
마이그레이션 가이드에 설명된 사전 조건을 완료한 후에는 Studio를 통해 SageMaker Canvas에 액세스하는 데 필요한 권한이 있는 새 도메인이 있어야 합니다.
단계 2. (선택 사항) Amazon S3 위치 준비
수동 마이그레이션을 수행하고 로컬 다운로드 옵션을 사용하는 대신 Amazon S3를 사용하여 흐름 파일을 전송할 계획이라면 계정에 흐름 파일을 저장하는 데 사용할 Amazon S3 버킷이 있어야 합니다.
원클릭 마이그레이션 방법
SageMaker Canvas는 Studio Classic의 Data Wrangler에서 SageMaker Canvas의 Data Wrangler로 데이터 흐름을 마이그레이션하기 위한 일회성 가져오기 옵션을 제공합니다. Studio Classic 및 Canvas 애플리케이션이 동일한 Amazon EFS 스토리지 볼륨을 공유하는 한 Canvas에서 한 번의 클릭으로 마이그레이션할 수 있습니다. 이 간소화된 프로세스를 사용하면 수동 내보내기 및 가져오기 단계가 필요하지 않으며 모든 흐름을 한 번에 가져올 수 있습니다.
다음 절차에 따라 모든 흐름 파일을 마이그레이션합니다.
-
최신 버전의 Studio를 엽니다.
-
Studio의 왼쪽 탐색 창에서 데이터 드롭다운 메뉴를 선택합니다.
-
탐색 옵션에서 Data Wrangler 를 선택합니다.
-
Data Wrangler 페이지에서 캔버스에서 실행 을 선택합니다. 권한을 성공적으로 설정하면 Canvas 애플리케이션이 생성됩니다. Canvas 애플리케이션이 준비되기까지 몇 분 정도 걸릴 수 있습니다.
-
Canvas가 준비되면 Canvas에서 열기를 선택합니다.
-
Canvas가 Data Wrangler 페이지로 열리고
Studio Classic의 Data Wrangler에서 Canvas로 데이터 흐름 가져오기라는 배너가 페이지 상단에 나타납니다. 이는 일회성 가져오기입니다. 자세히 알아보기
배너에서 모두 가져오기를 선택합니다.주의
배너 알림을 닫으면 배너 알림을 다시 열거나 원클릭 마이그레이션 방법을 더 이상 사용할 수 없습니다.
Canvas가 Studio Classic에서 흐름 파일을 가져오고 있음을 나타내는 팝업 알림이 나타납니다. 가져오기가 완전히 성공하면 플로우 파일 X
수를 가져왔다는 또 다른 알림을 받게 되며 Canvas 애플리케이션의 Data Wrangler 페이지에서 플로우 파일을 볼 수 있습니다. Canvas 애플리케이션의 기존 데이터 흐름과 이름이 동일한 가져온 흐름 파일의 이름은 접두사로 변경됩니다. 데이터 흐름을 열어 예상대로 보이는지 확인할 수 있습니다.
흐름 파일을 성공적으로 가져오지 못한 경우 가져오기가 부분적으로 성공했거나 실패했다는 알림을 받게 됩니다. 알림 메시지에서 오류 보기를 선택하여 잘못된 형식의 흐름 파일을 다시 포맷하는 방법에 대한 지침은 개별 오류 메시지를 확인합니다.
이제 흐름 파일을 가져온 후 Data Wrangler를 계속 사용하여 SageMaker Canvas에서 데이터를 준비할 수 있습니다.
수동 마이그레이션 방법
다음 섹션에서는 원클릭 마이그레이션 방법이 작동하지 않는 경우 Canvas로 흐름 파일을 수동으로 가져오는 방법을 설명합니다.
Studio Classic에서 흐름 파일 내보내기
참고
의 지침에 따라 Studio Classic 데이터를 Amazon S3로 이미 마이그레이션한 경우 이 단계를 건너뛰고 Studio Classic 데이터가 저장된 Amazon S3 위치에서 흐름 파일을 가져오는 Canvas로 흐름 파일 가져오기 섹션으로 바로 이동할 (선택 사항) Studio Classic에서 Studio로 데이터 마이그레이션수 있습니다.
Amazon S3에 파일을 저장하거나 로컬 시스템에 다운로드하여 흐름 파일을 내보낼 수 있습니다. 다음 단계에서 SageMaker Canvas로 흐름 파일을 가져올 때 로컬 업로드 옵션을 선택하면 한 번에 20개의 흐름 파일만 업로드할 수 있습니다. 가져올 흐름 파일이 많은 경우 Amazon S3를 대신 사용하는 것이 좋습니다.
방법 1: Amazon S3를 사용하여 흐름 파일 전송 또는 의 지침에 따라 방법 2: 로컬 시스템을 사용하여 흐름 파일 전송 계속 진행합니다.
방법 1: Amazon S3를 사용하여 흐름 파일 전송
이 방법을 사용하면 Studio Classic의 Data Wrangler와 SageMaker Canvas의 Data Wrangler(최신 버전의 Studio를 통해 액세스됨) 간의 중개자로 Amazon S3를 사용합니다. Studio Classic에서 Amazon S3로 흐름 파일을 내보낸 다음 다음 단계에서 Studio를 통해 Canvas에 액세스하고 Amazon S3에서 흐름 파일을 가져옵니다.
흐름 파일의 스토리지 위치로 준비된 Amazon S3 버킷이 있는지 확인합니다.
다음 절차에 따라 Studio Classic에서 Amazon S3로 흐름 파일을 내보냅니다.
-
Studio Classic을 엽니다.
-
다음을 수행하여 새 터미널을 엽니다.
-
상단 탐색 모음에서 파일 을 선택합니다.
-
컨텍스트 메뉴에서 새로 만들기 위에 마우스를 올려 놓고 터미널 을 선택합니다.
-
-
기본적으로 터미널은 홈 디렉터리에서 열려야 합니다. 마이그레이션하려는 모든 흐름 파일이 포함된 폴더로 이동합니다.
-
다음 명령을 사용하여 모든 흐름 파일을 지정된 Amazon S3 위치에 동기화합니다.
및 를 원하는 Amazon S3 위치의 경로{bucket-name}
로 바꿉니다. 명령 및 파라미터에 대한 자세한 내용은 명령 참조의 동기화 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로 가져오려면 의 단계를 따릅니다Canvas로 흐름 파일 가져오기.
방법 2: 로컬 시스템을 사용하여 흐름 파일 전송
이 방법을 사용하면 Studio Classic에서 로컬 시스템으로 흐름 파일을 다운로드합니다. 파일을 직접 다운로드하거나 zip 아카이브로 압축할 수 있습니다. 그런 다음 로컬에서 zip 파일의 압축을 풀고(해당하는 경우), Canvas에 로그인한 다음 로컬 시스템에서 업로드하여 흐름 파일을 가져옵니다.
Studio Classic에서 흐름 파일을 다운로드하려면 다음 절차를 따르세요.
-
Studio Classic을 엽니다.
-
(선택 사항) 여러 흐름 파일을 zip 아카이브로 압축하고 한 번에 모두 다운로드하려면 다음을 수행합니다.
-
Studio Classic의 상단 탐색 모음에서 파일 을 선택합니다.
-
컨텍스트 메뉴에서 새로 만들기 위에 마우스를 올려 놓고 터미널 을 선택합니다.
-
기본적으로 터미널은 홈 디렉터리에 열립니다. 마이그레이션하려는 모든 흐름 파일이 포함된 폴더로 이동합니다.
-
다음 명령을 사용하여 현재 디렉터리의 흐름 파일을 zip으로 패키징합니다. 명령은 숨겨진 파일을 제외합니다.
find . -not -path "*/.*" -name "*.flow" -print0 | xargs -0 zip my_archive.zip
-
-
다음을 수행하여 로컬 시스템에 zip 아카이브 또는 개별 흐름 파일을 다운로드합니다.
-
Studio Classic의 왼쪽 탐색 창에서 파일 브라우저 를 선택합니다.
-
파일 브라우저에서 다운로드하려는 파일을 찾습니다.
-
파일을 마우스 오른쪽 버튼으로 클릭하고 컨텍스트 메뉴에서 다운로드를 선택합니다.
-
파일은 로컬 시스템에 다운로드해야 합니다. zip 아카이브로 압축한 경우 파일을 로컬에서 추출합니다. 파일을 추출한 후 이러한 파일을 최신 버전의 Data Wrangler로 가져오려면 의 단계를 따릅니다Canvas로 흐름 파일 가져오기.
Canvas로 흐름 파일 가져오기
흐름 파일을 내보낸 후 Studio를 통해 Canvas에 액세스하고 파일을 가져옵니다.
다음 절차에 따라 흐름 파일을 Canvas로 가져옵니다.
-
최신 버전의 Studio를 엽니다.
-
Studio의 왼쪽 탐색 창에서 데이터 드롭다운 메뉴를 선택합니다.
-
탐색 옵션에서 Data Wrangler 를 선택합니다.
-
Data Wrangler 페이지에서 캔버스에서 실행 을 선택합니다. 권한을 성공적으로 설정하면 Canvas 애플리케이션이 생성됩니다. Canvas 애플리케이션이 준비되기까지 몇 분 정도 걸릴 수 있습니다.
-
Canvas가 준비되면 Canvas에서 열기를 선택합니다.
-
Canvas가 Data Wrangler 페이지로 열립니다. 상단 창에서 데이터 흐름 가져오기를 선택합니다.
-
데이터 소스 에서 Amazon S3 또는 로컬 업로드 를 선택합니다.
-
Amazon S3 버킷에서 흐름 파일을 선택하거나 로컬 시스템에서 파일을 업로드합니다.
참고
로컬 업로드의 경우 한 번에 최대 20개의 흐름 파일을 업로드할 수 있습니다. 더 큰 가져오기의 경우 Amazon S3를 사용합니다. 가져올 폴더를 선택하면 하위 폴더의 모든 흐름 파일도 가져옵니다.
-
데이터 가져오기를 선택합니다.
가져오기에 성공하면 흐름 파일 X
수를 성공적으로 가져왔다는 알림이 표시됩니다.
흐름 파일을 성공적으로 가져오지 못하면 SageMaker Canvas 애플리케이션에서 알림을 받게 됩니다. 알림 메시지에서 오류 보기를 선택하여 잘못된 형식의 흐름 파일을 다시 포맷하는 방법에 대한 지침은 개별 오류 메시지를 확인합니다.
흐름 파일 가져오기가 완료되면 SageMaker Canvas 애플리케이션의 Data Wrangler 페이지로 이동하여 데이터 흐름을 확인합니다. 데이터 흐름을 열어 예상대로 보이는지 확인할 수 있습니다.