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

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

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

Studio Classic と Studio では、2 つの異なるタイプのストレージボリュームを使用します。Studio Classic は、単一の Amazon Elastic File System (Amazon EFS) ボリュームを使用して、ドメイン内のすべてのユーザーと共有スペースにデータを保存します。Studio では、各スペースに独自の Amazon Elastic Block Store (Amazon EBS) ボリュームが割り当てられます。既存のドメインのデフォルトエクスペリエンスを更新する場合、 SageMaker はこれら 2 種類のボリューム間でデータを自動的に転送しません。その結果、Amazon EBSまたは Amazon EFSボリュームに保存されているユーザーデータは、そのボリュームに残ります。Studio Classic のデータを持つユーザーが、デフォルトのエクスペリエンスの変更後に Studio にアクセスする場合、Code- JupyterLab、Visual Studio Code-Open Source アプリケーションに基づいて、、Amazon SageMaker CanvasOSS、または Code Editor にデータが自動的に表示されません。

ユーザーが Studio アプリケーションの Studio Classic からファイルにアクセスする必要がある場合は、ユーザーのホームディレクトリからそれらのスペースに関連付けられた Amazon EBSボリュームにファイルを転送する必要があります。

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

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

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

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

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

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

前提条件

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

アプローチの選択

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

カスタム Amazon EFSボリュームの使用のメリットとデメリット

このアプローチでは、Amazon EFSから 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から 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 SageMaker S3 から Canvas に直接データフローをインポートできます。 Amazon S3

デメリット:

  • 管理者が相互汚染を防ぐ必要がある場合は、ユーザーがファイルを含む Amazon S3 プレフィックスにのみアクセスできるように、ユーザーレベルで AWS Identity and Access Management ポリシーを作成する必要があります。

このアプローチでは、Amazon EFSから Amazon EFS AWS DataSync への を使用して Studio Classic Amazon EFSボリュームのコンテンツを 1 回または定期的にターゲット Amazon EFSボリュームにコピーし、ターゲット 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ボリュームがアプリケーションにマウントされると、ユーザーのプレフィックスがドメインプレフィックスを上書きします。その結果、 はユーザーのアプリケーション 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
  10. その後、ユーザーはアプリケーションを起動するときにカスタム Amazon EFS ファイルシステムを選択できます。詳細については、JupyterLab ユーザーガイド または Studio でコードエディタアプリケーションを起動する を参照してください。

このアプローチでは、Amazon EFSから 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。1 つの 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 でコードエディタアプリケーションを起動する を参照してください。これにより、Amazon S3 からユーザーのスペースの Amazon EBSストレージにファイルが自動的に同期されます。

Data Wrangler からデータフローを移行する

以前に Amazon SageMaker Studio Classic で Amazon SageMaker Data Wrangler をデータ準備タスクに使用したことがある場合は、新しい Amazon SageMaker Studio に移行し、Amazon Canvas で最新バージョンの Data Wrangler SageMaker にアクセスできます。Canvas の Data Wrangler SageMaker は、強化されたユーザーエクスペリエンスと、自然言語インターフェイスや高速パフォーマンスなどの最新の機能へのアクセスを提供します。

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

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

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

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

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

前提条件

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

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

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

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

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

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

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

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

ワンクリック移行方法

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

以下の手順に従って、すべてのフローファイルを移行します。

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

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

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

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

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

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

    警告

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

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

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

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

手動移行方法

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

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

注記

「」の手順に従って Studio Classic データを Amazon S3 に移行済みである場合はフェーズ 3: (オプション) 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 と Canvas の Data Wrangler (Studio の最新バージョンからアクセス) SageMaker の間の仲介として使用します。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}に置き換えます。コマンドとパラメータの詳細については、「 コマンドリファレンス」の「 sync コマンド 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 ページで、Canvas で実行 を選択します。アクセス許可を正常にセットアップすると、Canvas アプリケーションが作成されます。Canvas アプリケーションの準備が完了するまでに数分かかる場合があります。

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

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

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

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

    注記

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

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

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

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

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