Fase 3: Migrar dados - Amazon SageMaker

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Fase 3: Migrar dados

O Studio Classic e o Studio usam dois tipos diferentes de volumes de armazenamento. O Studio Classic usa um único volume do Amazon Elastic File System (Amazon EFS) para armazenar dados de todos os usuários e espaços compartilhados no domínio. No Studio, cada espaço tem seu próprio volume do Amazon Elastic Block Store (Amazon EBS). Quando você atualiza a experiência padrão de um domínio existente, SageMaker não transfere dados automaticamente entre esses dois tipos de volumes. Como resultado, os dados do usuário armazenados em um volume do Amazon EBS ou do Amazon EFS permanecem nesse volume. Se um usuário com dados no Studio Classic acessar o Studio após as alterações da experiência padrão, ele não verá automaticamente seus dados no JupyterLab ou Code Editor, com base nos aplicativos Code-OSS, Visual Studio Code - Open Source.

Se os usuários precisarem acessar arquivos do Studio Classic nos aplicativos do Studio, você deverá transferir os arquivos dos diretórios iniciais do usuário para os volumes do Amazon EBS associados a esses espaços.

Ao migrar os dados, o código e os artefatos de um usuário do Studio Classic para o Studio, recomendamos uma das seguintes abordagens:

  1. Usando um volume personalizado do Amazon EFS

  2. Usando o Amazon Simple Storage Service (Amazon S3)

Pré-requisitos

Antes de executar essas etapas, preencha os pré-requisitos em. Pré-requisitos Você também deve concluir as etapas emFase 1: Migrar a interface do usuário do Studio Classic para o Studio.

Escolhendo uma abordagem

Considere o seguinte ao escolher uma abordagem para migrar seus dados.

Prós e contras de usar um volume personalizado do Amazon EFS

Nessa abordagem, você usa uma tarefa do Amazon EFS para o Amazon AWS DataSync EFS (uma vez ou cadência) para copiar dados e, em seguida, montar o volume de destino do Amazon EFS nos espaços de um usuário. Isso dá aos usuários acesso aos dados do Studio Classic em seus ambientes de computação do Studio.

Prós:

  • Somente os dados do diretório inicial do usuário são visíveis nos espaços do usuário. Não há polinização cruzada de dados.

  • A sincronização do volume de origem do Amazon EFS com um volume de destino do Amazon EFS é mais segura do que montar diretamente o volume de origem do Amazon EFS gerenciado pelo SageMaker em espaços. Isso evita o potencial de impactar os arquivos do usuário do diretório inicial.

  • Os usuários têm a flexibilidade de continuar trabalhando nos aplicativos Studio Classic e Studio, ao mesmo tempo em que têm seus dados disponíveis em ambos os aplicativos, AWS DataSync se estiverem configurados regularmente.

  • Não há necessidade de empurrar e puxar repetidamente com o Amazon S3.

Contras:

  • Sem acesso de gravação ao volume de destino do Amazon EFS montado nos espaços do usuário. Para obter acesso de gravação ao volume de destino do Amazon EFS, os clientes precisariam montar o volume alvo do Amazon EFS em uma instância do Amazon Elastic Compute Cloud e fornecer as permissões apropriadas para os usuários gravarem no prefixo do Amazon EFS.

  • Requer modificação nos grupos de segurança gerenciados pelo SageMaker para permitir o fluxo de entrada e saída do sistema de arquivos de rede (NFS).

  • Custa mais do que usar o Amazon S3.

Prós e contras de usar o Amazon S3

Nessa abordagem, você usa uma AWS DataSync tarefa do Amazon EFS para o Amazon S3 (uma vez ou cadência) para copiar dados e, em seguida, cria uma configuração de ciclo de vida para copiar os dados do usuário do Amazon S3 para o volume Amazon EBS de seu espaço privado.

Prós:

  • Se a LCC estiver anexada ao domínio, os usuários poderão optar por usar a LCC para copiar dados para seu espaço ou executar o espaço sem o script da LCC. Isso dá aos usuários a opção de copiar seus arquivos somente nos espaços de que precisam.

  • Se uma AWS DataSync tarefa for configurada em uma cadência, os usuários poderão reiniciar o aplicativo Studio para obter os arquivos mais recentes.

  • Como os dados são copiados para o Amazon EBS, os usuários têm permissões de gravação nos arquivos.

  • O armazenamento do Amazon S3 é mais barato que o Amazon EFS.

Contras:

  • Se os administradores precisarem evitar a polinização cruzada, eles devem criar AWS Identity and Access Management políticas no nível do usuário para garantir que os usuários só possam acessar o prefixo do Amazon S3 que contém seus arquivos.

Nessa abordagem, você usa um Amazon EFS AWS DataSync para o Amazon EFS para copiar o conteúdo de um volume Studio Classic do Amazon EFS para um volume de destino do Amazon EFS uma vez ou em um ritmo regular e, em seguida, montar o volume de destino do Amazon EFS nos espaços de um usuário. Isso dá aos usuários acesso aos dados do Studio Classic em seus ambientes de computação do Studio.

  1. Crie um volume alvo do Amazon EFS. Você transferirá dados para esse volume do Amazon EFS e o montará no espaço de um usuário correspondente usando a montagem em nível de prefixo.

    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. Adicione variáveis para o volume de origem do Amazon EFS atualmente anexado ao domínio e usado por todos os usuários. As informações do Amazon Virtual Private Cloud do domínio são necessárias para garantir que o Amazon EFS de destino seja criado na mesma Amazon VPC e sub-rede, com a mesma configuração de grupo de segurança.

    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. Crie um destino de montagem do Amazon EFS na mesma Amazon VPC e sub-rede do volume de origem do Amazon EFS, com a mesma configuração de grupo de segurança. O alvo de montagem leva alguns minutos para ficar disponível.

    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. Crie locais de origem e destino do Amazon EFS para a AWS DataSync tarefa.

    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. Permita o tráfego entre as montagens do sistema de arquivos de rede (NFS) de origem e de destino. Quando um novo domínio é criado, SageMaker cria dois grupos de segurança.

    • Grupo de segurança de entrada NFS com apenas tráfego de entrada.

    • Grupo de segurança de saída NFS com somente tráfego de saída.

    O NFS de origem e de destino são colocados dentro dos mesmos grupos de segurança. Você pode permitir o tráfego entre esses suportes a partir do AWS Management Console ou AWS CLI.

    • Permitir tráfego a partir do AWS Management Console

      1. Faça login AWS Management Console e abra o console da Amazon VPC em https://console.aws.amazon.com/vpc/.

      2. Escolha Grupos de segurança.

      3. Pesquise o ID do domínio existente na página Grupos de Segurança.

        d-xxxxxxx

        Os resultados devem retornar dois grupos de segurança que incluam o ID do domínio no nome.

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

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

      4. Selecione a ID do grupo de segurança de entrada. Isso abre uma nova página com detalhes sobre o grupo de segurança.

      5. Selecione a guia Regras de saída.

      6. Selecione Editar regras de saída.

      7. Atualize as regras de saída existentes ou adicione uma nova regra de saída com os seguintes valores:

        • Type (Tipo): NFS

        • Protocolo: TCP

        • Intervalo de portas: 2049

        • Destino: security-group-for-outbound -nfs- domain-id | security-group-id

      8. Escolha Salvar regras.

      9. Selecione a guia Regras de entrada.

      10. Selecione Editar regras de entrada.

      11. Atualize as regras de entrada existentes ou adicione uma nova regra de saída com os seguintes valores:

        • Type (Tipo): NFS

        • Protocolo: TCP

        • Intervalo de portas: 2049

        • Destino: security-group-for-outbound -nfs- domain-id | security-group-id

      12. Escolha Salvar regras.

    • Permitir tráfego a partir do AWS CLI

      1. Atualize as regras de entrada e saída do grupo de segurança com os seguintes valores:

        • Protocolo: TCP

        • Intervalo de portas: 2049

        • ID do grupo: ID do grupo de segurança de entrada ou ID do grupo de segurança de saída

        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. Adicione os grupos de segurança de entrada e saída aos alvos de montagem do Amazon EFS de origem e de destino. Isso permite o tráfego entre as duas montagens do 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. Crie uma AWS DataSync tarefa. Isso retorna um ARN de tarefa que pode ser usado para executar a tarefa sob demanda ou como parte de uma cadência regular.

    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. Inicie uma AWS DataSync tarefa para copiar automaticamente os dados da origem do Amazon EFS para a montagem do Amazon EFS de destino. Isso não retém as permissões POSIX do arquivo, o que permite que os usuários leiam a partir da montagem de destino do Amazon EFS, mas não gravem nela.

    aws datasync start-task-execution --task-arn $DATASYNC_TASK_ARN
  8. Monte o volume de destino do Amazon EFS no domínio no nível raiz.

    aws sagemaker update-domain --domain-id $SOURCE_DOMAIN_ID \ --default-user-settings '{"CustomFileSystemConfigs": [{"EFSFileSystemConfig": {"FileSystemId": "'"$TARGET_EFS"'", "FileSystemPath": "/"}}]}'
  9. Substitua cada perfil de usuário por um FileSystemPath prefixo. O prefixo inclui o UID do usuário, que é criado por. SageMaker Isso garante que os usuários tenham acesso apenas aos seus dados e evita a polinização cruzada. Quando um espaço é criado no domínio e o volume de destino do Amazon EFS é montado no aplicativo, o prefixo do usuário substitui o prefixo do domínio. Como resultado, monta SageMaker somente o /user-id diretório no aplicativo do usuário.

    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. Em seguida, os usuários podem selecionar o sistema de arquivos personalizado do Amazon EFS ao iniciar um aplicativo. Para obter mais informações, consulte JupyterLab guia do usuário ou Inicie um aplicativo de editor de código no Studio.

Nessa abordagem, você usa uma AWS DataSync tarefa do Amazon EFS para o Amazon S3 para copiar o conteúdo de um volume do Studio Classic Amazon EFS para um bucket do Amazon S3 uma vez ou em um ritmo regular e, em seguida, criar uma configuração de ciclo de vida para copiar os dados do usuário do Amazon S3 para o volume Amazon EBS de seu espaço privado.

nota

Essa abordagem só funciona para domínios que têm acesso à Internet.

  1. Defina o ID do volume de origem do Amazon EFS a partir do domínio que contém os dados que você está migrando.

    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. Defina o nome do bucket do Amazon S3 de destino. Para obter informações sobre a criação de um bucket do Amazon S3, consulte Criação de um bucket. O bucket usado deve ter uma política de CORS, conforme descrito emAtualize sua política de CORS para acessar os buckets do Amazon S3. Os usuários no domínio também devem ter permissões para acessar o bucket do Amazon S3.

    Neste exemplo, estamos copiando arquivos para um prefixo chamadostudio-new. Se você estiver usando um único bucket do Amazon S3 para migrar vários domínios, use o studio-new/<domain-id> prefixo para restringir as permissões aos arquivos usando o IAM.

    export BUCKET_NAME=s3-bucket-name export S3_DESTINATION_PATH=studio-new
  3. Crie uma política de confiança que dê AWS DataSync permissões para assumir a função de execução da sua conta.

    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. Crie uma função do IAM e anexe a política de confiança.

    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. Crie um grupo de segurança para dar acesso à localização do 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. Crie um local de origem do Amazon EFS para a AWS DataSync tarefa.

    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. Crie um local de destino do Amazon S3 para a AWS DataSync tarefa.

    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. Crie uma AWS DataSync tarefa.

    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. Inicie a AWS DataSync tarefa. Essa tarefa copia automaticamente os dados do volume de origem do Amazon EFS para o bucket do Amazon S3 de destino. Aguarde até que a tarefa seja concluída.

    aws datasync start-task-execution --task-arn $TASK_ARN
  10. Verifique o status da AWS DataSync tarefa para verificar se ela foi concluída. Passe o ARN retornado na etapa anterior.

    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. Depois que a AWS DataSync tarefa for concluída, limpe os recursos criados anteriormente.

    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. De sua máquina local, crie um arquivo denominado on-start.sh com o conteúdo a seguir. Esse script copia o diretório inicial do Amazon EFS do usuário no Amazon S3 para o volume do Amazon EBS do usuário no Studio e cria um prefixo para cada perfil de usuário.

    #!/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. Converta seu script no formato base64. Esse requisito evita erros que ocorram devido à codificação de espaçamento e quebra de linha. O tipo de script pode ser JupyterLab ouCodeEditor.

    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. Verifique o seguinte antes de usar o script:

    • O volume do Amazon EBS é grande o suficiente para armazenar os objetos que você está exportando.

    • Você não está migrando arquivos e pastas ocultos, como .bashrc e .condarc se não tiver a intenção de fazer isso.

    • A função de execução AWS Identity and Access Management (IAM) associada aos perfis de usuário do Studio tem as políticas configuradas para acessar somente o respectivo diretório inicial no Amazon S3.

  15. Crie uma configuração de ciclo de vida usando seu script.

    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. Anexe a LCC ao seu domínio.

    aws sagemaker update-domain \ --domain-id $SOURCE_DOMAIN_ID \ --default-user-settings ' {"JupyterLabAppSettings": {"LifecycleConfigArns": [ "lifecycle-config-arn" ] } }'
  17. Em seguida, os usuários podem selecionar o script da LCC ao iniciar um aplicativo. Para obter mais informações, consulte JupyterLab guia do usuário ou Inicie um aplicativo de editor de código no Studio. Isso sincroniza automaticamente os arquivos do Amazon S3 com o armazenamento do Amazon EBS para o espaço do usuário.