[やってみた]Sagemaker Studioにautoshutdownを導入してみた 

# Sagemaker Studio のUIが変わったらしいので画面を比較する

## はじめに

re:Inventで俺たちのSagemaker Studioが新しくなったと聞いたので中身を見ました。
どうやらUIが変わったようです。

https://aws.amazon.com/jp/blogs/aws/new-redesigned-ui-for-amazon-sagemaker-studio/

で、社会人初めての夏休み(51日間)でSagemaker Studioに関する手順書を書いたことがあるのですが、「UIが変わって使えなくなっていないよね」と不安に感じました。

ということで今回は
インスタンスの自動シャットダウン機能を導入しながらUIを比較して優勝していくことにするわね。🐍

## まずは俺たちのSagemaker Studioにログインします

設定済みであることを前提に話を進めます。(AWS IAM Identity Center!!)

![sso.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/2b095634-75fe-de5f-6812-04e332bf5092.png)

(51日間の夏休みに格闘したSalesforceちゃんがいますが気にしないでください。)

## ログイン後のUI(変更前)

![sagemaker_old.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/24942259-67cb-a6a0-5d40-955712968c12.png)

## ログイン後のUI(変更後)

![sagemaker_new.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/fa81bbd6-2f6e-fcf3-dd0f-a2324c447c05.png)

なんか少しダークになった？？？
全体的に文字が太くなっているような。。。。
そして、家のマークがフォルダマークの上に配置されていることにお気づきでしょうか。

![スクリーンショット 2022-12-02 4.53.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/6f673856-12c3-6d53-34be-7375eafa76a5.png)

色々変化に気づいたところでここから先は手順を通してUIを見ていきます。

## 前提

次のバージョンで動作確認をしています。

- sagemaker_studio_autoshutdown
  - 0.1.5
- JupyterLab
  - 3.6.0a1

## 参考資料

- [自動シャットダウン拡張機能を利用した Amazon SageMaker Studio のコスト削減方法](https://aws.amazon.com/jp/blogs/news/save-costs-by-automatically-shutting-down-idle-resources-within-amazon-sagemaker-studio/)
  - AWS公式の資料
- [Sagemaker-Studio-Autoshutdown-Extension](https://github.com/aws-samples/sagemaker-studio-auto-shutdown-extension)
  - 導入する拡張機能のGitHub リポジトリ
- [JupyterLab extensions](https://jupyterlab.readthedocs.io/en/stable/user/extensions.html)
  - JupyterLab 公式

## Sagemkaer Studio を起動

## ターミナルを起動

`File -> New -> Terminal` からターミナルを起動します。

![new_terminal.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/83f887db-a6b7-40b0-216a-ed393003d24d.png)

![open_terminal.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/19283199-dd94-5839-8125-f71929c8d867.png)


## conda を起動

以下のコマンドをコピペして実行します。

```bash
conda activate studio
```

## JupyterLabのバージョンを確認

以下のコマンドをコピペして実行します。

```bash
jupyter lab --version
```

バージョンが`3.6.0a1`であることを確認します。

## GitHub からリポジトリを取得

```bash
git clone https://github.com/ymd65536/sagemaker-auto-shutdown.git
```

カレントディレクトリを変更します。

```bash
cd sagemaker-auto-shutdown
```

## auto-shutdownのextensionをセットアップ - シェルスクリプトを実行

以下のコマンドをコピペして実行します。

```bash
cp ./on-jupyter-server-start.sh ../
cp ./check_idle_timeout_configuration.py ../
cd ..
chmod 755 ./on-jupyter-server-start.sh
./on-jupyter-server-start.sh
```

実行が終わると現在利用しているターミナルが閉じます。

## ターミナルを新しく起動する

`File -> New -> Terminal` からターミナルを起動します。

![new_terminal.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/83f887db-a6b7-40b0-216a-ed393003d24d.png)

![open_terminal.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/09dbc424-ef9a-a323-fb04-4f180b8c3eba.png)


## タイムアウト時間を設定 - シェルスクリプトを実行

以下のコマンドをコピペして実行します。

```bash
conda activate studio
./.auto-shutdown/set-time-interval.sh
```

実行すると以下のように実行結果が表示されます。

![set-time-interval.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/6f285053-36e1-163b-104a-3b559800ef18.png)

```bash
sagemaker-user@studio$ conda activate studio
(studio) sagemaker-user@studio$ ./.auto-shutdown/set-time-interval.sh
Succeeded, idle timeout set to 180 minutes
(studio) sagemaker-user@studio$
```

なお、デフォルトのタイムアウト時間は180分に設定していますが、この`set-time-interval.sh`を修正して再度このコマンドを実行することで
タイムアウト時間（秒単位）の再設定が可能です。

`set-time-interval.sh`は`on-jupyter-server-start.sh`によって自動で作成されるファイルです。
一時的にタイムアウト時間を変更する場合は`set-time-interval.sh`の`TIMEOUT`変数を修正するようにしてください。

## 設定されているかどうかの確認

以下のコマンドをコピペして実行します。

```bash
python check_idle_timeout_configuration.py
```

実行すると以下のように実行結果が表示されます。

```bash
(studio) sagemaker-user@studio$ python check_idle_timeout_configuration.py
<Response [200]>
{‘idle_time’: 10800, ‘keep_terminals’: False, ‘count’: 10}
(studio) sagemaker-user@studio$
```

これで設定は以上になります。

## 切り戻し手順

ここから先はうまくいかなかった時のリセット手順です。

### カレントディレクトリの確認

以下のコマンドをコピペして実行します。

```bash
pwd
```

実行すると以下のように実行結果が表示されます。

```bash
(studio) sagemaker-user@studio$ pwd
/home/sagemaker-user
(studio) sagemaker-user@studio$
```

カレントディレクトリが`/home/sagemaker-user`であることを確認します。

### ディレクトリの削除

以下のコマンドをコピペして実行します。

```bash
rm -rf .auto-shutdown
rm -rf check_idle_timeout_configuration.py
rm -rf on-jupyter-server-start.sh
```

これでインストール前の状態に戻りました。

## まとめ(所感)

UIが変更されましたが、ほぼ同じ感覚で使うことができました。
ですが、バージョンで見ると私がこの手順書を書いた時(2022年08月頃)はjupyterのバージョンは`3.3.4`でしたが、2022年12月2日時点ではjupyterのバージョンは`3.6.0a1`でした。変化が早いので手順書があっという間に廃れそうですね。

余談ですが、個人的にはこういうインフラ作業における手順書の書き方には結構こだわりがあったりします。
リクエストがあったらそういう部分についても語りたいと思います。

今回扱ったSagemaker Studioですが、好きなサービスの一つでシングルサインオンで扱える部分が素敵だなと思っています。ただ、機械学習系の技術スタックにはそんなに強くないので、jupyter環境の利用がメインです。

開発環境を用意しなくても良いことと認証面を全て`AWS IAM Identity Center`に統一できるところは個人学習には向いているなと思うので興味のある方はぜひ、今回のAutoShutdownを導入して安全にSagemaker Studioを使ってみてください。

## おわり