|
1 | 1 | #!/bin/bash
|
2 | 2 | set -e
|
3 | 3 |
|
| 4 | +EFS_MOUNT_POINT="/opt/amazon/sagemaker" |
| 5 | +EBS_MOUNT_POINT="/home/sagemaker-user" |
| 6 | + |
| 7 | +persistent_settings_folder="${EBS_MOUNT_POINT}/sagemaker-code-editor-server-data" |
| 8 | +default_settings_folder="${EFS_MOUNT_POINT}/sagemaker-code-editor-server-data" |
| 9 | + |
| 10 | +override_machine_settings() { |
| 11 | + # create a new settings file with preset defaults or merge the defaults into the existing settings file |
| 12 | + local settings_relative_path="data/Machine" |
| 13 | + local settings_file_path_suffix="${settings_relative_path}/settings.json" |
| 14 | + local persistent_machine_settings_file="${persistent_settings_folder}/${settings_file_path_suffix}" |
| 15 | + local default_machine_settings_file="${default_settings_folder}/${settings_file_path_suffix}" |
| 16 | + |
| 17 | + if [ ! -f "$persistent_machine_settings_file" ]; then |
| 18 | + # copy settings file to EBS if it doesn't exist in EBS |
| 19 | + mkdir -p "${persistent_settings_folder}/${settings_relative_path}" |
| 20 | + cp "$default_machine_settings_file" "$persistent_machine_settings_file" |
| 21 | + echo "Created persistent settings file with default settings at $persistent_machine_settings_file" |
| 22 | + else |
| 23 | + # if it does exist then merge settings |
| 24 | + echo "File already exists: ${persistent_machine_settings_file}. Merging default settings with existing settings." |
| 25 | + python3 /usr/local/bin/merge-settings-util.py "$persistent_machine_settings_file" "$default_machine_settings_file" |
| 26 | + fi |
| 27 | +} |
| 28 | + |
| 29 | +copy_user_settings() { |
| 30 | + local settings_relative_path="data/User" |
| 31 | + local settings_file_path_suffix="${settings_relative_path}/settings.json" |
| 32 | + local persistent_user_settings_file="${persistent_settings_folder}/${settings_file_path_suffix}" |
| 33 | + local default_user_settings_file="${default_settings_folder}/${settings_file_path_suffix}" |
| 34 | + if [ ! -f "$persistent_user_settings_file" ]; then |
| 35 | + # copy user settings file to EBS if it doesn't exist in EBS |
| 36 | + mkdir -p "${persistent_settings_folder}/${settings_relative_path}" |
| 37 | + cp "$default_user_settings_file" "$persistent_user_settings_file" |
| 38 | + echo "Created persistent settings file with default settings at $persistent_user_settings_file" |
| 39 | + fi |
| 40 | +} |
| 41 | + |
4 | 42 | eval "$(micromamba shell hook --shell=bash)"
|
5 | 43 |
|
6 | 44 | # Activate conda environment 'base', which is the default environment for sagemaker-distribution
|
7 | 45 | micromamba activate base
|
8 | 46 |
|
9 | 47 | # Start code-editor server
|
10 | 48 | if [ -n "$SAGEMAKER_APP_TYPE_LOWERCASE" ]; then
|
11 |
| - # SAGEMAKER_APP_TYPE is set, indicating the server is running within a SageMaker |
12 |
| - # app. Configure the base url to be `/<app-type-in-lower-case>/default`. |
| 49 | + # SAGEMAKER_APP_TYPE is set, indicating the server is running within a SageMaker app. |
| 50 | + override_machine_settings |
| 51 | + copy_user_settings |
| 52 | + # Configure the base url to be `/<app-type-in-lower-case>/default`. |
13 | 53 | sagemaker-code-editor --host 0.0.0.0 --port 8888 \
|
14 | 54 | --without-connection-token \
|
15 | 55 | --base-path "/$SAGEMAKER_APP_TYPE_LOWERCASE/default" \
|
16 |
| - --server-data-dir /opt/amazon/sagemaker/sagemaker-code-editor-server-data \ |
| 56 | + --server-data-dir $persistent_settings_folder \ |
17 | 57 | --extensions-dir /opt/amazon/sagemaker/sagemaker-code-editor-server-data/extensions \
|
18 | 58 | --user-data-dir /opt/amazon/sagemaker/sagemaker-code-editor-user-data
|
19 | 59 | else
|
|
0 commit comments