(オプション) Studio Classic から Studio にデータを移行する - Amazon SageMaker

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

(オプション) Studio Classic から Studio にデータを移行する

Studio Classic と Studio は、2 つの異なるタイプのストレージボリュームを使用します。Studio Classic は、単一の Amazon Elastic File System (Amazon EFS) ボリュームを使用して、ドメイン内のすべてのユーザーと共有スペースにデータを保存します。Studio では、各スペースに独自の Amazon Elastic Block Store (Amazon EBS) ボリュームが割り当てられます。既存のドメインのデフォルトエクスペリエンスを更新すると、 はドメイン内の各ユーザーの Amazon EFSボリュームにフォルダ SageMaker を自動的にマウントします。その結果、ユーザーは Studio Classic から Studio アプリケーションでファイルにアクセスできます。詳細については、「Studio での Amazon EFS 自動マウント」を参照してください。

Amazon EFS 自動マウントをオプトアウトし、手動でデータを移行して、Studio アプリケーションの Studio Classic からファイルへのアクセスをユーザーに許可することもできます。これを行うには、ユーザーのホームディレクトリからそれらのスペースに関連付けられた Amazon EBSボリュームにファイルを転送する必要があります。次のセクションでは、このワークフローについて説明します。Amazon EFS 自動マウントのオプトアウトの詳細については、「」を参照してくださいAmazon EFS 自動マウントのオプトアウト

Studio Classic からすべてのデータを手動で移行する

次のセクションでは、Studio Classic ストレージボリュームから新しい Studio エクスペリエンスにすべてのデータを移行する方法について説明します。

Studio Classic から Studio にユーザーのデータ、コード、アーティファクトを手動で移行する場合は、次のいずれかのアプローチをお勧めします。

  1. カスタム Amazon EFSボリュームの使用

  2. Amazon Simple Storage Service (Amazon S3) の使用

Studio Classic で Amazon SageMaker Data Wrangler を使用し、データフローファイルを移行する場合は、次のいずれかの移行オプションを選択します。

  • データフローファイルを含む Studio Classic ストレージボリュームからすべてのデータを移行する場合は、Amazon S3 を使用してデータ を移行する」セクションに移動Studio Classic からすべてのデータを手動で移行するして完了します。次に、 フローファイルを Canvas にインポートするセクションに進みます。

  • データフローファイルのみを移行し、Studio Classic ストレージボリュームから他のデータを移行しない場合は、Data Wrangler からデータフローを移行する「」セクションに進んでください。

前提条件

これらのステップを実行する前に、「」の前提条件を完了してくださいStudio エクスペリエンスを移行するための前提条件を完了する。また、 のステップを完了する必要がありますStudio Classic から Studio に UI を移行する

アプローチの選択

Studio Classic データを移行するアプローチを選択するときは、次の点を考慮してください。

カスタム Amazon EFSボリュームを使用する利点と欠点

このアプローチでは、Amazon EFS-to-Amazon EFS AWS DataSync タスク (1 回または頻度) を使用してデータをコピーし、ターゲット Amazon EFSボリュームをユーザーのスペースにマウントします。これにより、ユーザーは Studio コンピューティング環境で Studio Classic のデータにアクセスできます。

メリット:

  • ユーザーのホームディレクトリデータのみがユーザーのスペースに表示されます。データのクロスポーリングはありません。

  • ソース Amazon EFSボリュームからターゲット Amazon EFSボリュームへの同期は、 が管理するソース Amazon EFSボリュームを SageMaker スペースに直接マウントするよりも安全です。これにより、ホームディレクトリのユーザーファイルに影響を与える可能性を回避できます。

  • が定期的な頻度で AWS DataSync 設定されている場合、ユーザーは Studio Classic および Studio アプリケーションでの作業を柔軟に継続できます。また、両方のアプリケーションでデータを使用できます。

  • 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 タスク (1 回または頻度) を使用してデータをコピーし、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-Amazon を使用して Studio Classic Amazon EFSボリュームのコンテンツをターゲット Amazon EFSボリュームに 1 回または定期的にEFS AWS DataSync コピーし、ターゲット Amazon EFSボリュームをユーザーのスペースにマウントします。これにより、ユーザーは Studio コンピューティング環境で Studio Classic のデータにアクセスできます。

  1. ターゲット 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"
  2. 現在ドメインにアタッチされ、すべてのユーザーが使用するソース Amazon EFSボリュームの変数を追加します。ドメインの Amazon Virtual Private Cloud 情報は、ターゲット Amazon EFSが同じ 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"
  3. ソース 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
  4. 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")
  5. ソースとターゲットのネットワークファイルシステム (NFS) マウント間のトラフィックを許可します。新しいドメインが作成されると、 は 2 つのセキュリティグループ SageMaker を作成します。

    • NFS インバウンドトラフィックのみを持つインバウンドセキュリティグループ。

    • NFS アウトバウンドトラフィックのみを持つアウトバウンドセキュリティグループ。

    ソースとターゲットNFSは、同じセキュリティグループに配置されます。これらのマウント間のトラフィックは、 AWS Management Console または から許可できます AWS CLI。

    • からのトラフィックを許可する AWS Management Console

      1. にサインイン AWS Management Console し、 で Amazon VPCコンソールを開きますhttps://console.aws.amazon.com/vpc/

      2. [Security Groups] (セキュリティグループ) をクリックします。

      3. セキュリティグループページで既存のドメインの ID を検索します。

        d-xxxxxxx

        結果は、名前にドメイン ID を含む 2 つのセキュリティグループを返します。

        • security-group-for-inbound-nfs-domain-id

        • security-group-for-outbound-nfs-domain-id

      4. インバウンドセキュリティグループ ID を選択します。これにより、セキュリティグループの詳細を含む新しいページが開きます。

      5. アウトバウンドルールタブを選択します。

      6. アウトバウンドルールの編集 を選択します。

      7. 既存のアウトバウンドルールを更新するか、次の値を使用して新しいアウトバウンドルールを追加します。

        • タイプ : NFS

        • プロトコル : TCP

        • ポート範囲: 2049

        • 送信先 : security-group-for-outbound-nfs-domain-id | security-group-id

      8. [Save Rules] (ルールの保存) を選択します。

      9. インバウンドルールタブを選択します。

      10. [Edit inbound rules] (インバウンドルールを編集) を選択します。

      11. 既存のインバウンドルールを更新するか、次の値を使用して新しいアウトバウンドルールを追加します。

        • タイプ : NFS

        • プロトコル : TCP

        • ポート範囲: 2049

        • 送信先 : security-group-for-outbound-nfs-domain-id | security-group-id

      12. [Save Rules] (ルールの保存) を選択します。

    • からのトラフィックを許可する AWS CLI

      1. セキュリティグループのインバウンドルールとアウトバウンドルールを次の値で更新します。

        • プロトコル : 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
      2. インバウンドセキュリティグループとアウトバウンドセキュリティグループの両方をソースとターゲットの 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
  6. 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")
  7. ソース Amazon からターゲット Amazon EFSマウントEFSにデータを自動的にコピーする AWS DataSync タスクを開始します。これにより、ファイルのPOSIXアクセス許可は保持されません。これにより、ユーザーはターゲットの Amazon EFSマウントから読み取ることはできますが、書き込みはできなくなります。

    aws datasync start-task-execution --task-arn $DATASYNC_TASK_ARN
  8. ターゲット Amazon EFSボリュームをルートレベルでドメインにマウントします。

    aws sagemaker update-domain --domain-id $SOURCE_DOMAIN_ID \ --default-user-settings '{"CustomFileSystemConfigs": [{"EFSFileSystemConfig": {"FileSystemId": "'"$TARGET_EFS"'", "FileSystemPath": "/"}}]}'
  9. すべてのユーザープロファイルを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
  10. その後、ユーザーはアプリケーションを起動するときにカスタム Amazon EFS ファイルシステムを選択できます。詳細については、JupyterLab ユーザーガイド または Studio で Code Editor アプリケーションを起動する を参照してください。

このアプローチでは、Amazon EFS-to-Amazon S3 AWS DataSync タスクを使用して Studio Classic Amazon EFSボリュームの内容を Amazon S3 バケットに 1 回または定期的にコピーし、ユーザーのデータを Amazon S3 からプライベートスペースの Amazon EBSボリュームにコピーするライフサイクル設定を作成します。

注記

このアプローチは、インターネットアクセスがあるドメインでのみ機能します。

  1. 移行するデータを含むドメインからソース 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')
  2. ターゲット 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
  3. アカウントの実行ロールを引き受ける 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 )
  4. 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"
  5. 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"
  6. 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"
  7. 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"
  8. 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"
  9. AWS DataSync タスクを開始します。このタスクは、ソース Amazon EFSボリュームからターゲット Amazon S3 バケットにデータを自動的にコピーします。タスクが完了するまで待ちます。

    aws datasync start-task-execution --task-arn $TASK_ARN
  10. 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
  11. 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"
  12. ローカルマシンで、次の内容の 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
  13. スクリプトを 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}`
  14. スクリプトを使用する前に、以下を確認してください。

    • Amazon EBSボリュームは、エクスポートするオブジェクトを保存するのに十分な大きさです。

    • 非表示のファイルやフォルダを移行する予定.condarcがない場合、 .bashrc や などは移行しません。

    • Studio ユーザープロファイルに関連付けられている AWS Identity and Access Management (IAM) 実行ロールには、Amazon S3 内のそれぞれのホームディレクトリにのみアクセスするように設定されたポリシーがあります。

  15. スクリプトを使用してライフサイクル設定を作成します。

    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
  16. をドメインLCCにアタッチします。

    aws sagemaker update-domain \ --domain-id $SOURCE_DOMAIN_ID \ --default-user-settings ' {"JupyterLabAppSettings": {"LifecycleConfigArns": [ "lifecycle-config-arn" ] } }'
  17. その後、ユーザーはアプリケーションを起動するときに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 では、ユーザーエクスペリエンスが向上し、自然言語インターフェイスや高速パフォーマンスなどの最新の機能にアクセスできます。

新しい Data Wrangler エクスペリエンスの使用を開始するには、Canvas SageMaker にいつでもオンボードできます。詳細については、「Amazon SageMaker Canvas の使用を開始する」を参照してください。

以前に作業していたデータフローファイルが Studio Classic に保存されている場合は、Studio にオンボードしてから、フローファイルを Canvas にインポートできます。移行には次のオプションがあります。

  • ワンクリック移行: Canvas にサインインすると、ユーザーに代わってすべてのフローファイルを移行する 1 回限りのインポートオプションを使用できます。

  • 手動移行: フローファイルを Canvas に手動でインポートできます。Studio Classic から、ファイルを Amazon S3 にエクスポートするか、ローカルマシンにダウンロードします。次に、 SageMaker Canvas アプリケーションにサインインし、フローファイルをインポートして、データ準備タスクを続行します。

次のガイドでは、移行の前提条件と、ワンクリックまたは手動オプションを使用してデータフローファイルを移行する方法について説明します。

前提条件

フローファイルの移行を開始する前に、以下の前提条件を確認してください。

Step 1. ドメインを移行し、アクセス許可を付与する

データフローファイルを移行する前に、Amazon SageMaker Studio Classic からの移行ガイドの特定のステップに従って、ユーザープロファイル AWS IAMの実行ロールに必要なアクセス許可があることを確認する必要があります。続行するStudio Classic から Studio に UI を移行する前に、前提条件 と に従ってください。この前提条件では、必要なアクセス許可の付与、Studio を新しいエクスペリエンスとして設定する方法、および既存のドメインを移行する方法について説明します。

具体的には、Canvas SageMaker アプリケーションを作成し、 SageMaker Canvas データ準備機能を使用するためのアクセス許可が必要です。これらのアクセス許可を取得するには、次のいずれかを実行します。

Studio と SageMaker Canvas の両方に同じユーザープロファイルを使用してください。

移行ガイドで説明されている前提条件を完了したら、Studio 経由で SageMaker Canvas にアクセスするために必要なアクセス許可を持つ新しいドメインが必要です。

Step 2. (オプション) Amazon S3 の場所を準備する

手動移行を行い、ローカルダウンロードオプションを使用する代わりに Amazon S3 を使用してフローファイルを転送する場合は、フローファイルの保存に使用する Amazon S3 バケットをアカウントに用意する必要があります。

ワンクリック移行方法

SageMaker Canvas には、Studio Classic の Data Wrangler から SageMaker Canvas の Data Wrangler にデータフローを移行するための 1 回限りのインポートオプションが用意されています。Studio Classic アプリケーションと Canvas アプリケーションが同じ Amazon EFSストレージボリュームを共有している限り、Canvas からワンクリックで移行できます。この合理化されたプロセスにより、手動のエクスポートおよびインポート手順が不要になり、すべてのフローを一度にインポートできます。

すべてのフローファイルを移行するには、次の手順に従います。

  1. Studio の最新バージョンを開きます。

  2. Studio の左側のナビゲーションペインで、データドロップダウンメニューを選択します。

  3. ナビゲーションオプションから、Data Wrangler を選択します。

  4. Data Wrangler ページで、Run in Canvas を選択します。アクセス許可を正常に設定すると、Canvas アプリケーションが作成されます。Canvas アプリケーションの準備が完了するまでに数分かかる場合があります。

  5. Canvas の準備ができたら、Open in Canvas を選択します。

  6. Canvas が Data Wrangler ページに開き、ページの上部に、Studio Classic の Data Wrangler から Canvas にデータフローをインポートするというバナーが表示されます。これは 1 回限りのインポートです。詳細はこちら。バナーで、すべてインポート を選択します。

    警告

    バナー通知を閉じると、再度開くことも、ワンクリック移行方法を使用できなくなります。

Canvas が Studio Classic からフローファイルをインポートしていることを示すポップアップ通知が表示されます。インポートが完全に成功すると、フローファイルX数がインポートされたという別の通知が届きます。フローファイルは Canvas アプリケーションの Data Wrangler ページに表示されます。Canvas アプリケーションの既存のデータフローと同じ名前のインポートされたフローファイルは、プレフィックスで名前が変更されます。データフローを開いて、想定どおりに見えることを確認することができます。

フローファイルのいずれかが正常にインポートされない場合、インポートが部分的に成功または失敗したという通知を受け取ります。通知メッセージのエラーを表示する を選択して、フォーマットが正しくないフローファイルを再フォーマットする方法に関するガイダンスについて、個々のエラーメッセージを確認します。

フローファイルをインポートした後、Data Wrangler を使用して SageMaker Canvas でデータの準備を続行できるようになりました。

手動移行方法

以下のセクションでは、ワンクリック移行方法が機能しない場合に備えて、フローファイルを Canvas に手動でインポートする方法について説明します。

Studio Classic からフローファイルをエクスポートする

注記

の手順に従って Studio Classic データを Amazon S3 に移行している場合は(オプション) Studio Classic から Studio にデータを移行する、このステップをスキップして、Studio Classic データが保存されている Amazon S3 の場所からフローファイルをインポートするフローファイルを Canvas にインポートするセクションに直接移動できます。

フローファイルは、Amazon S3 に保存するか、ローカルマシンにダウンロードすることでエクスポートできます。次のステップでフローファイルを SageMaker Canvas にインポートする場合、ローカルアップロードオプションを選択した場合、一度にアップロードできるフローファイルは 20 個のみです。インポートするフローファイルが多数ある場合は、代わりに Amazon S3 を使用することをお勧めします。

方法 1: Amazon S3 を使用してフローファイルを転送する または の指示に従って方法 2: ローカルマシンを使用してフローファイルを転送します続行します。

方法 1: Amazon S3 を使用してフローファイルを転送する

この方法では、Amazon S3 を Studio Classic の Data Wrangler と SageMaker Canvas の Data Wrangler (Studio の最新バージョンからアクセス) 間の仲介として使用します。Studio Classic から Amazon S3 にフローファイルをエクスポートし、次のステップで Studio から Canvas にアクセスし、Amazon S3 からフローファイルをインポートします。

フローファイルの保管場所として Amazon S3 バケットが準備されていることを確認します。

Studio Classic から Amazon S3 にフローファイルをエクスポートするには、次の手順に従います。

  1. Studio Classic を開きます。

  2. 次の操作を実行して、新しいターミナルを開きます。

    1. 上部のナビゲーションバーで、ファイル を選択します。

    2. コンテキストメニューで、新しい にカーソルを合わせ、ターミナル を選択します。

  3. デフォルトでは、ターミナルはホームディレクトリで開く必要があります。移行するすべてのフローファイルを含むフォルダに移動します。

  4. 次のコマンドを使用して、すべてのフローファイルを指定された Amazon S3 ロケーションに同期します。{bucket-name} と を、希望する Amazon S3 の場所へのパス{folder}に置き換えます。コマンドとパラメータの詳細については、 AWS AWS CLI コマンドリファレンスの「同期コマンド」を参照してください。

    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 からフローファイルをダウンロードするには、次の手順に従います。

  1. Studio Classic を開きます。

  2. (オプション) 複数のフローファイルを zip アーカイブに圧縮し、それらを一度にすべてダウンロードする場合は、以下を実行します。

    1. Studio Classic の上部のナビゲーションバーで、ファイル を選択します。

    2. コンテキストメニューで、新しい にカーソルを合わせ、ターミナル を選択します。

    3. デフォルトでは、ターミナルはホームディレクトリで開きます。移行するすべてのフローファイルを含むフォルダに移動します。

    4. 次のコマンドを使用して、現在のディレクトリにフローファイルを zip としてパックします。コマンドでは、非表示のファイルは除外されます。

      find . -not -path "*/.*" -name "*.flow" -print0 | xargs -0 zip my_archive.zip
  3. 以下を実行して、zip アーカイブまたは個々のフローファイルをローカルマシンにダウンロードします。

    1. Studio Classic の左側のナビゲーションペインで、ファイルブラウザ を選択します。

    2. ダウンロードするファイルは、ファイルブラウザで検索します。

    3. ファイルを右クリックし、コンテキストメニューで ダウンロード を選択します。

ファイルはローカルマシンにダウンロードする必要があります。zip アーカイブとしてパックした場合は、ファイルをローカルで抽出します。ファイルが抽出されたら、これらのファイルを最新バージョンの Data Wrangler にインポートするには、「」のステップに従いますフローファイルを Canvas にインポートする

フローファイルを Canvas にインポートする

フローファイルをエクスポートしたら、Studio から Canvas にアクセスしてファイルをインポートします。

フローファイルを Canvas にインポートするには、次の手順に従います。

  1. Studio の最新バージョンを開きます。

  2. Studio の左側のナビゲーションペインで、データドロップダウンメニューを選択します。

  3. ナビゲーションオプションから、Data Wrangler を選択します。

  4. Data Wrangler ページで、Run in Canvas を選択します。アクセス許可を正常に設定すると、Canvas アプリケーションが作成されます。Canvas アプリケーションの準備が完了するまでに数分かかる場合があります。

  5. Canvas の準備ができたら、Open in Canvas を選択します。

  6. Canvas が Data Wrangler ページを開きます。上部ペインで、データフローのインポート を選択します。

  7. データソース の場合は、Amazon S3 またはローカルアップロード を選択します。

  8. Amazon S3 バケットからフローファイルを選択するか、ローカルマシンからファイルをアップロードします。

    注記

    ローカルアップロードでは、一度に最大 20 個のフローファイルをアップロードできます。より大きなインポートには、Amazon S3 を使用します。インポートするフォルダを選択すると、サブフォルダ内のフローファイルもインポートされます。

  9. [データをインポート] を選択します。

インポートが成功すると、フローファイルXが正常にインポートされたという通知が届きます。

フローファイルが正常にインポートされない場合は、 SageMaker Canvas アプリケーションで通知を受け取ります。通知メッセージでエラーを表示する を選択して、フォーマットが正しくないフローファイルを再フォーマットする方法に関するガイダンスについて、個々のエラーメッセージを確認します。

フローファイルのインポートが完了したら、 SageMaker Canvas アプリケーションの Data Wrangler ページに移動してデータフローを表示します。データフローを開いて、想定どおりに見えることを確認することができます。