こんにちは。プラットフォームソリューション事業部のはらのです。
この記事は 『CRESCO Advent Calendar 2018』 22日目の記事です。
Advent Calendarも残りわずかとなってきて、そろそろ年末モードという感じですね。
今年「は」というか、今年「も」なのですがいろんな技術に触れ、いろんな人と関わ会う中で刺激を受け公私共に充実したの1年ではなかったかと思います。
さて、先日もre:Inventなどで様々なサービスのアップデートや発表があり
進化し続けているAWSですが、今回はJupyterNotebookというツールを利用した
AWSでの運用(AWSに限らずクラウド全般での運用)についてご紹介したいと思います。
JupyterNotebookとはNotebookと呼ばれる形式でコードを記述することができ、また作成したプログラムを動かしながら実行結果を残せるツールです。
データ解析ではよく用いられるツールですが、インフラ運用でも効果を発揮できるツールとして注目を浴びています。
Jupyterを使ったクラウド運用論(LC4RI)についてはこちらが参考になります。
運用時の作業と作業結果とメモを1つにできるため私はすごく気にいっており、
例とした以下のようなメリットがあると思います。
- 実行結果を後から見たいとき
分離されている手順書と証跡をまとめることで後から作業結果を確認しやすい - ExcelやWordの手順書から解放されたいとき
手順書からコピーや手入力をやめてInfraStructure as a codeで半自動化
運用者のスキルに偏らない(誰でもできる)手順書を作る - 手順書が見つからないとき
ファイルサーバーに無法地帯のように配置されている手順書を1か所にまとめて整理整頓 - 運用者間で引継ぎされたものが使用できるか不安なとき
シェルスクリプトなどのようなブラックボックス化したものからの解放
メモと実行手順と実行結果(実行ができる)を引き継ぐことでの安心感 - それでもやっぱり完全に自動化したいとき
初めはJupyterNotebookで作業実績を積み上げ、 慣れてきたらPapermillなどを利用してジョブ化することで自動化が可能。
運用の自動化については本記事の主旨と少しずれるためこちらを参考
ここではAWSのAmazon Linux2にJupyterNotebookをインストールしてみたいと思います。
#パッケージを最新化 |
sudo yum update -y |
# Python3とJupyterNotebookのインストール |
pip3 install jupyter |
# jupyter設定ファイルの作成 |
jupter notebook --generate-config |
# notebookを格納するためのディレクトリを作成 |
mkdir /home/ec2-user/notebook |
# Jupyterに設定するパスワードのハッシュ値を作成 |
python3 -c 'from notebook.auth import passwd;print(passwd())' |
password:******** |
vertify:******** |
# 設定ファイルの修正 |
c.NotebookApp.notebook_dir = '/home/ec2-user/notebook' #{JupyterNotebookを格納するディレクトリのルート階層} |
c.NotebookApp.ip = '0.0.0.0' # 接続許可をするIP範囲 |
c.NotebookApp.password = 'sha~' # ここに先ほど作成したハッシュ値を格納 |
# systemdで起動するように設定 |
touch /etc/systemd/system/notebook.service |
==notebook.serviceの中身ここから== |
[Unit] |
Description = Jupyter Notebook |
[Service] |
Type=simple |
PIDFile=/var/run/jupyter-notebook.pid |
ExecStart=/usr/local/bin/jupyter notebook |
WorkingDirecotry=/home/ec2-user/.jupyter |
User=ec2-user |
Group=ec2-user |
Restart=always |
[Install] |
WantedBy = multi-user.target |
==notebook.serviceの中身ここまで== |
# Jupyterのサービス起動と自動起動を設定 |
sudo systemctl daemon-reload |
sudo systemctl enable notebook.service |
sudo systemctl start notebook.service |
sudo systemctl list-unit-files --type service | grep notebook |
# ついでにAnsibleも設定 |
sudo pip3 install ansible |
以下のURLよりアクセスすることができます。
図 アクセスした際の画面
JupyterNotebookに拡張機能を設定してみます。
Jupyterには「nbextensions」というものがあり、色々な便利な機能を拡張することができます。
個人的に気に入っている機能もいくつか紹介していきたいと思います。
# 拡張機能のインストール |
cd ~ |
sudo pip3 install jupyter_contrib_nbextensions |
以下よりURLよりアクセスすることができます。
図2 拡張機能の画面
- 目次の自動生成機能
notebookに記載した大項目、中項目などにそって目次を自動生成してくれます。
番号を自動で振ってくれるため途中に項目を挿入しても自動で番号を再割り当てしてくれます。
- ②自動保存機能
notebookで間違って消してしまったり、10分前の状態に戻したいといった時の機能です。
- ③セルのロック機能
セル状態をロックし、実行できないようにする機能です。
こちらは別途インストールする必要があります。
# gitから拡張ライブラリを取得してインストール |
sudo yum install git |
cd ~ |
sudo git clone https://github.com/ipython-contrib/jupyter_contrib_nbextensions.git |
sudo pip3 install -e jupyter_contrib_nbextensions |
jupyter contrib nbextension install --user |
1つ目のセルではロックをかけているので実行ができないのですが、
2つ目のセルはロックがかかっていないので実行することができます。
例えば状態を更新するようなコマンドを羅列したセルはロックをかけておき、作業時に解除してから実行すると事故防止に役立ちそうですね!
今回は特定のセキュリティグループにアクセス許可を与えるという運用を想定したNotebookを作って実行してみたいと思います。
いかがでしたでしょうか?
セルにコードを入力するのに少しクセがありますが、慣れてしまえばすごく便利なツールかと思います。
JupyterNotebookを使えば少しは運用作業の負担を減らせるのではないでしょうか。
インストールから使った時のイメージまで簡単ではありますが、
この記事が読者の一助になれればと思います。