翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
(オプション) Studio Classic から Studio にデータを移行する
Studio Classic と Studio は、それぞれ異なるタイプのストレージボリュームを使用します。Studio Classic は 1 つの Amazon Elastic File System (Amazon EFS) ボリュームを使用し、ドメイン内のすべてのユーザーと共有スペースのデータを保存します。Studio では、各スペースに独自の Amazon Elastic Block Store (Amazon EBS) ボリュームが割り当てられます。既存のドメインのデフォルトエクスペリエンスを更新すると、SageMaker AI はドメイン内の各ユーザーの Amazon EFS ボリュームにフォルダを自動的にマウントします。そのため、ユーザーは 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 に手動で移行する場合は、次のいずれかのアプローチをお勧めします。
-
カスタム Amazon EFS ボリュームを使用する
-
Amazon Simple Storage Service (Amazon S3) を使用する
Studio Classic で Amazon SageMaker Data Wrangler を使用し、データフローファイルを移行する場合は、次のいずれかの移行オプションを選択します。
-
データフローファイルを含むすべてのデータを Studio Classic ストレージボリュームから移行する場合は、「Studio Classic からすべてのデータを手動で移行する」に進み、「Amazon S3 を使用してデータを移行する」セクションを完了します。その後、「フローファイルを Canvas にインポートする」のセクションに進んでください。
-
Studio Classic ストレージボリュームからデータフローファイルのみを移行し、他のデータを移行しない場合は、「Data Wrangler からデータフローを移行する」セクションに進んでください。
前提条件
以降の手順を実行する前に、「Studio エクスペリエンスを移行するための前提条件を満たす」の前提条件を満たしてください。また、「Studio Classic から Studio に UI を移行する」の手順も完了する必要があります。
アプローチの選択
Studio Classic のデータを移行する際に、次の点を考慮してアプローチを選択してください。
カスタム Amazon EFS ボリュームを使用するメリットとデメリット
このアプローチでは、Amazon EFS-to-Amazonタスク (1 回または頻度) を使用してデータをコピーし、ターゲットの Amazon EFS ボリュームをユーザーのスペースにマウントします。 EFS AWS DataSync これにより、ユーザーは Studio コンピューティング環境で Studio Classic のデータにアクセスできます。
メリット:
-
ユーザーのホームディレクトリデータのみがユーザーのスペースに表示されます。データのクロスポーリングはありません。
-
ソース Amazon EFS ボリュームからターゲット Amazon EFS ボリュームへの同期は、SageMaker AI によって管理されるソース Amazon EFS ボリュームをスペースに直接マウントするよりも安全です。ホームディレクトリのユーザーファイルに影響を与えるリスクを回避できます。
-
ユーザーは Studio Classic と Studio アプリケーションで柔軟に処理を続けることができ、かつ、 AWS DataSync が定期的なケイデンスで設定されている場合は、データを両方のアプリケーションで使用できます。
-
Amazon S3 でプッシュとプルを繰り返す必要はありません。
デメリット:
-
ユーザーのスペースにマウントされたターゲットの Amazon EFS ボリュームへの書き込みのアクセス許可がありません。ターゲットの Amazon EFS ボリュームへの書き込みのアクセス許可を取得するために、ターゲットの Amazon EFS ボリュームを Amazon Elastic Compute Cloud インスタンスにマウントし、Amazon EFS プレフィックスへの書き込みに必要なアクセス許可を付与する必要があります。
-
ネットワークファイルシステム (NFS) のインバウンドフローとアウトバウンドフローを許可するには、SageMaker AI によって管理されるセキュリティグループを変更する必要があります。
-
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 EFS AWS DataSync への変換を使用して Studio Classic Amazon EFS ボリュームの内容をターゲット Amazon EFS ボリュームに 1 回または定期的にコピーし、ターゲット 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 情報は、ターゲットの 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"
-
Amazon EFS のマウントターゲットを、ソースの Amazon EFS ボリュームと同じ Amazon VPC およびサブネットで、かつ同じセキュリティグループ設定で作成します。マウントターゲットが使用可能になるまでに数分かかります。
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 AI は 2 つのセキュリティグループを作成します。
-
インバウンドトラフィックのみの NFS インバウンドセキュリティグループ。
-
アウトバウンドトラフィックのみの NFS アウトバウンドセキュリティグループ。
ソースとターゲットの NFS を、同じセキュリティグループに配置します。これらのマウント間のトラフィックは、 AWS Management Console または から許可できます AWS CLI。
-
からのトラフィックを許可する AWS Management Console
にサインイン AWS Management Console し、https://console.aws.amazon.com/vpc/
で Amazon VPC コンソールを開きます。 -
[Security Groups] (セキュリティグループ) をクリックします。
-
セキュリティグループページで既存のドメインの ID を検索します。
d-
xxxxxxx
名前にドメイン ID が含まれる 2 つのセキュリティグループが返されるはずです。
-
security-group-for-inbound-nfs-
domain-id
-
security-group-for-outbound-nfs-
domain-id
-
-
インバウンドセキュリティグループ ID を選択します。セキュリティグループの詳細が記載された新しいページが開きます。
-
[アウトバウンドルール] タブを選択します。
-
[インバウンドルールを編集] を選択します。
-
既存のアウトバウンドルールを更新するか、次の値を使用して新しいアウトバウンドルールを追加します:
-
[タイプ]: NFS
-
[Protocol]: TCP
-
[ポート範囲]: 2049
-
送信先: security-group-for-outbound-nfs-
domain-id
|security-group-id
-
-
[Save Rules] (ルールの保存) を選択してください。
-
[インバウンドルール] タブを選択します。
-
[Edit inbound rules] (インバウンドルールを編集) を選択します。
-
既存のインバウンドルールを更新するか、次の値を使用して新しいアウトバウンドルールを追加します:
-
[タイプ]: NFS
-
[Protocol]: TCP
-
[ポート範囲]: 2049
-
送信先: security-group-for-outbound-nfs-
domain-id
|security-group-id
-
-
[Save Rules] (ルールの保存) を選択してください。
-
からのトラフィックを許可する AWS CLI
-
インバウンドおよびアウトバウンドのセキュリティグループルールを次の値で更新します:
-
[Protocol]: 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")
-
ソース Amazon EFS からターゲット Amazon 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
プレフィックスで上書きします。プレフィックスには、SageMaker AI によって作成されたユーザーの UID が含まれます。これにより、ユーザーは自身のデータにのみアクセスが許可されるため、クロスポーリングを防止できます。ドメインにスペースが作成され、ターゲットの Amazon EFS ボリュームがアプリケーションにマウントされると、ユーザーのプレフィックスでドメインのプレフィックスが上書きされます。その結果、SageMaker AI はユーザーのアプリケーションにのみ/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 で Code Editor アプリケーションを起動する」を参照してください。
このアプローチでは、Amazon EFS-to-Amazon S3 AWS DataSync タスクを使用して Studio Classic Amazon EFS ボリュームのコンテンツを Amazon S3 バケットに 1 回または定期的にコピーし、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 バケットを作成する方法については、「Creating a bucket」を参照してください。使用するバケットには、「(オプション) CORS ポリシーを更新して Amazon S3 バケットにアクセスする」で説明したように CORS ポリシーが必要です。ドメイン内のユーザーには、Amazon S3 バケットへのアクセス許可も必要です。
この例では、
studio-new
というプレフィックスにファイルをコピーしています。1 つの 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 からの移行ガイドの特定のステップに従って、ユーザープロファイルの IAM AWS 実行ロールに必要なアクセス許可があることを確認する必要があります。前提条件および「Studio Classic から Studio に UI を移行する」に記載された、必要なアクセス許可を付与し、Studio の新しいエクスペリエンスを設定し、既存のドメインを移行する方法に従ってから、次に進んでください。
具体的には、SageMaker Canvas アプリケーションを作成し、SageMaker Canvas データ準備機能を使用するためのアクセス許可が必要になります。これらのアクセス許可を取得するには、次のいずれかを実行します:
AmazonSageMakerCanvasDataPrepFullAccess ポリシーを IAM ロールに追加する、または
「Studio Classic から Studio に UI を移行する」のページの「(Optional) Migrate from Data Wrangler in Studio Classic to SageMaker Canvas」セクションの説明に従って、最小アクセス許可ポリシーをアタッチします。
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 で実行] を選択します。
-
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 のデータを、「(オプション) Studio Classic から Studio にデータを移行する」の手順に従って Amazon S3 に既に移行している場合は、この手順をスキップして「フローファイルを Canvas にインポートする」セクションに進み、Studio Classic データが保存されている Amazon S3 の場所からフローファイルをインポートしてください。
フローファイルは、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 にフローファイルをエクスポートするには、次の手順に従います。
-
Studio Classic を開きます。
-
次の操作を行って、新しいターミナルを開きます:
-
上部のナビゲーションバーで、[ファイル] を選択します。
-
コンテキストメニューで、[新規] にカーソルを合わせて [ターミナル] を選択します。
-
-
デフォルトでは、ターミナルはホームディレクトリで開く必要があります。移行するすべてのフローファイルを含むフォルダに移動します。
-
次のコマンドを使用して、すべてのフローファイルを指定された Amazon S3 の場所と同期します。
および{bucket-name}
を、Amazon S3 の場所へのパスに置き換えます。コマンドとパラメータの詳細については、 AWS AWS CLI コマンドリファレンスの sync コマンドを参照してください。{folder}
aws s3 sync . s3://
{bucket-name}
/{folder}
/ --exclude "*.*" --include "*.flow"独自の を使用している場合は AWS KMS key、代わりに次のコマンドを使用してファイルを同期し、KMS キー ID を指定します。ユーザーの IAM 実行ロール (前述の「前提条件」の「Step 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 アーカイブに圧縮した場合は、ファイルをローカルに展開します。ファイルが展開されたら、「フローファイルを Canvas にインポートする」の手順に従ってこれらのファイルを最新バージョンの Data Wrangler でインポートします。
フローファイルを Canvas にインポートする
フローファイルをエクスポートした後、Studio から Canvas にアクセスしてファイルをインポートします。
フローファイルを Canvas にインポートするには、次の手順に従います。
-
最新バージョンの Studio を開きます。
-
Studio の左側のナビゲーションペインで、[データ] ドロップダウンメニューを選択します。
-
ナビゲーションオプションから、[Data Wrangler] を選択します。
-
Data Wrangler ページで、[Canvas で実行] を選択します。アクセス許可の設定が完了すると、Canvas アプリケーションが作成されます。Canvas アプリケーションの作成が完了するまでに数分かかる場合があります。
-
Canvas の準備ができたら、[Canvas で実行] を選択します。
-
Canvas に Data Wrangler ページが開きます。上部のペインで、[データフローのインポート] を選択します。
-
[データソース] で、[Amazon S3] または [ローカルアップロード] を選択します。
-
Amazon S3 バケットからフローファイルを選択するか、ローカルマシンからファイルをアップロードします。
注記
ローカルからアップロードする場合は、一度にアップロードできるフローファイルの数が 20 に限定されます。大規模なインポートには Amazon S3 を使用してください。インポートするフォルダを選択すると、サブフォルダ内のフローファイルもインポートされます。
-
[データをインポート] を選択します。
インポートが成功すると、X
件のフローファイルがインポートされたという通知が表示されます。
フローファイルがインポートに失敗した場合は、SageMaker Canvas アプリケーションに通知が表示されます。通知メッセージで [エラーを表示] を選択し、エラーメッセージをそれぞれ確認して、フローファイルの形式が正しくない場合は修正します。
フローファイルのインポートが完了したら、SageMaker Canvas アプリケーションの Data Wrangler ページに移動して、データフローを確認します。データフローを開いて、結果が予想どおりであることを確認します。