Файл конфигурации жизненного цикла не может автоматически завершить работу экземпляра студии amazon sagemaker

Я пытаюсь настроить файл конфигурации жизненного цикла (LCC), чтобы реализовать функцию автоматического завершения работы при достижении порога простоя для редактора кода sagemaker. Я следил за решением этого вопроса. Я могу увидеть и выбрать файл LCC в пользовательском интерфейсе студии amazon sagemaker после успешного выполнения шагов, но экземпляры не отключаются после 1 часа простоя (пример ниже составляет 60 секунд для тестирования).

Это файл LCC:

# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: MIT-0

#!/bin/bash
set -eux
ASI_VERSION=0.3.0

# User variables [update as needed]
IDLE_TIME_IN_SECONDS=60  # in seconds, change this to desired idleness time before app shuts down

# System variables [do not change if not needed]
CONDA_HOME=/opt/conda/bin
LOG_FILE=/var/log/apps/app_container.log # Writing to app_container.log delivers logs to CW logs.
SOLUTION_DIR=/var/tmp/auto-stop-idle # Do not use /home/sagemaker-user
PYTHON_PACKAGE=sagemaker_code_editor_auto_shut_down-$ASI_VERSION.tar.gz
PYTHON_SCRIPT_PATH=$SOLUTION_DIR/sagemaker_code_editor_auto_shut_down/auto_stop_idle.py

# Installing cron
sudo apt-get update -y
sudo sh -c 'printf "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d'
sudo apt-get install -y cron

# Creating solution directory.
sudo mkdir -p $SOLUTION_DIR

# Downloading autostop idle Python package.
echo "Downloading autostop idle Python package..."
curl -LO --output-dir /var/tmp/ https://github.com/aws-samples/sagemaker-studio-apps-lifecycle-config-examples/releases/download/v$ASI_VERSION/$PYTHON_PACKAGE
sudo $CONDA_HOME/pip install -U -t $SOLUTION_DIR /var/tmp/$PYTHON_PACKAGE

# Touch file to ensure idleness timer is reset to 0
echo "Touching file to reset idleness timer"
touch /opt/amazon/sagemaker/sagemaker-code-editor-server-data/data/User/History/startup_timestamp

# Setting container credential URI variable to /etc/environment to make it available to cron
sudo /bin/bash -c "echo 'AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI' >> /etc/environment"

# Add script to crontab for root.
echo "Adding autostop idle Python script to crontab..."
echo "*/2 * * * * /bin/bash -ic '$CONDA_HOME/python $PYTHON_SCRIPT_PATH --time $IDLE_TIME_IN_SECONDS --region $AWS_DEFAULT_REGION >> $LOG_FILE'" | sudo crontab -
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
88
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ваш общий подход верен, если вы собираетесь использовать CodeEditor.

В вашем последнем вопросе вы имеете в виду JupyterLab. Я бы предложил убедиться, что вы действительно используете CodeEditor, а не JupyterLab. SageMaker Studio предоставляет оба редактора, и для каждого из этих редакторов необходимо зарегистрировать разные LCC.

Для JupyterLab вы можете найти сценарий LCC и инструкции по его регистрации здесь: https://github.com/aws-samples/sagemaker-studio-apps-lifecycle-config-examples/tree/main/jupyterlab /авто-стоп-холостой ход

Если вы намерены использовать CodeEditor, а LCC не работает, я бы посоветовал проверить журналы CloudWatch. Сценарий LCC устанавливает задание cron, которое проверяет состояние простоя каждые две минуты и записывает это в CloudWatch.

У вас также есть возможность вручную вызвать скрипт в приложении CodeEditor. Откройте терминал в CodeEditor (Терминал > Новый терминал) и выполните:

# this example uses 1800 seconds as idle time threshold
/opt/conda/bin/python /var/tmp/auto-stop-idle/sagemaker_code_editor_auto_shut_down/auto_stop_idle.py --time 1800 --region $AWS_DEFAULT_REGION

Это должно обеспечить вывод вроде:

2024-04-16T06:16:55.359295z - [auto-stop-idle] - Logging time difference between current time and time files were last changed 80.18277621269226.
2024-04-16T06:16:55.359445z - [auto-stop-idle] - Logging time difference between current time and time files were last changed inf.
2024-04-16T06:16:55.359476z - [auto-stop-idle] - SageMaker Code Editor app is not idle. Passing check.

Если время простоя превышено, запуск сценария фактически завершит работу вашего приложения CodeEditor. Это должен быть быстрый способ проверить, работает ли сценарий в вашей среде.

Спасибо. Мне удалось проверить журналы CloudWatch, и я не вижу ничего подозрительного, Adding autostop idle Python script to crontab... но все равно нет завершения работы, если редактор не работает.

Cyrus Mohammadian 19.04.2024 20:24

Я должен упомянуть, спасибо за приведенный выше код, я могу подтвердить, что сценарий автоматически завершает работу при запуске с терминала, но он не завершается автоматически, возможно, что-то не так с заданием cron (хотя журналы ничего не предполагают), я действительно в замешательстве. Совершенно нежизнеспособный продукт от AWS, если этот базовый функционал глючит.

Cyrus Mohammadian 19.04.2024 21:14
Ответ принят как подходящий

Судя по всему, в последнем образе дистрибутива sagemaker (1.6, похоже, было решено в версии 1.7) есть ошибка , которая не позволяет установить cron.

Замена этого:

sudo apt-get install -y cron

с этим:

# Check if cron needs to be installed
status = "$(dpkg-query -W --showformat='${db:Status-Status}' "cron" 2>&1)"
if [ ! $? = 0 ] || [ ! "$status" = installed ]; then
    # Fixing invoke-rc.d: policy-rc.d denied execution of restart.
    sudo /bin/bash -c "echo '#!/bin/sh
    exit 0' > /usr/sbin/policy-rc.d"

    # Installing cron.
    echo "Installing cron..."
    sudo apt install cron
else
    echo "Package cron is already installed."
    sudo cron
fi

...решил мою проблему.

Другие вопросы по теме