AWSの学習のために、かなりシンプルなEC2インスタンス(ubuntu20.04)を起動し、
そこでjupyter-notebookサーバーをたててpython3.6の使用を試みた。
AWS上の作業自体はかなりシンプルです。どちらかと言うと、jupyter-notebookの設定用の
記事になっていると思います。
環境
クライアント
OS: macOS
shhクライアント:openssh
AWS
OS:ubuntu:20.04
python3
jupyternotebook
#この記事で行うこと(目次)
1.Ubuntu AMIでEC2インスタンスの構築
・ AWSマネジメントコンソールへのログイン
・ VPCの作成
・ サブネットの作成
・ インターネットゲートウェイの作成・アタッチ
・ セキュリティグループの編集
・ EC2インスタンスの作成
・ 起動したサーバーへssh接続
2.python3のインストールとjupyter環境の構築
・ 各種インストール(python3、jupyter notebook)
・ jupyter notebookの設定
・ jupyter notebookを起動
#この記事で行わないこと
- Anacondaのインストール
- AWSアカウントの作成
- ssl証明書の発行
- gitを使用したコードの管理
- GPU対応の機械学習環境構築
など
#本編
ネットワークのざっくりとした構成要素は以下の通り。全て網羅していないので、参考程度にお願いします。
実際のところ、AWSマネジメントコンソール内のデフォルトのものを使用しても今回の
ネットワークの構築自体は可能ですが、勉強の意味も込めてあえて手を動かして構築する方法をとります。
#1. Ubuntu AMIでEC2インスタンスの構築
#・ AWSマネジメントコンソールへのログイン
ルートユーザではなく、IAMユーザーを作成してログインする。
#・ VPCの作成
コンソール画面から、VPC
と検索→左の一覧からVPC
を選択→VPCを作成
へ進むと設定画面
(下画像)に遷移。
VPCの名前や、VPCのIPv4アドレスの範囲を Classless Inter-Domain Routing (CIDR) ブロックの形式で指定。
あとはデフォルトでVPCの作成
へ進む。
#・サブネットの作成
引き続き左の一覧からサブネットを作成
を選択→設定画面(下画像)に遷移。
-サブネットを設置するVPC
-サブネット名
-アベイラビリティゾーン
-サブネット内のVPCのIPv4アドレスの範囲
を指定。そのほかはデフォルト。サブネットを作成
へ進む。
#・ インターネットゲートウェイの作成・アタッチ
同様に、左一覧のインターネットゲートウェイ
を選択→インターネットゲートウェイの作成
を選択
→名前の指定→インターネットゲートウェイの作成
へ進む。
画面右上のVPCへアタッチ
を選択→作成したVPCを選択
・ルートテーブルの設定
作成したVPCにデフォルトでルートテーブルが設定されているが、デフォルトではインターネットに向けたルートが設定されていないので、設定を行う。下画像のルートの編集
へ進む。
ルートの追加
を選択し、送信先
に0.0.0.0/0
、ターゲット
に作成したインターネットゲートウェイを指定して、ルートの保存
。
#・ セキュリティグループの編集
作成したVPCにデフォルトでセキュリティグループが作成されているが、二つのインバウンドルール
・外部からssh接続を許可するルール
・サーバー内のjupyter-notebookサーバーに、外部から接続するためのルール
を追加する。
画面の下部のインバウンドルールを編集
を選択
インバウンドルールとして、画面のように2つのルールを指定する。jupyter-notebookのport番号は8080
とする。
(画像は8888になってますが、これ以降は8080で進めています。)
#・ EC2インスタンスの作成
コンソール画面からEC2
と検索→左一覧からインスタンス
を選択→インスタンスを起動
を選択。
AMIは、無料枠のUbuntu Server 20.04 LTS (HVM), SSD Volume Type
を選択
インスタンスタイプは、無料枠のt2.micro
。
インスタンスの詳細の設定では、ネットワーク
とサブネット
を自分が作成したVPCとサブネットを指定する。
他はデフォルトを選択。
ステップ6までデフォルト値を使用。
ステップ6の「セキュリティグループの設定」では、「セキュリティグループの割り当て」で、既存のセキュリティグループを選択する
にチェック。
ステップ7に進んで「起動」を選択。
キーペアの作成を求められるので、適当な名前をつけてダウンロードして、インスタンスの作成を行う。
#・ 起動したサーバーへssh接続
端末を起動して、起動したサーバーにssh接続を行う。
鍵の権限に問題あり(他の人にアクセス権限を与えないで)と言われるので、
chmod 400 [keyの名前].pem
として所有者のみ読み取り可能にする。
ssh接続のコマンドは以下の通り。
ssh [-i 鍵のファイル] [ユーザー名]:[パブリックIPv4アドレス]
ubuntuのEMIを起動したら、デフォルトのユーザーネームは「ubuntu」。
ssh -i ~/Desktop/test-keypair-ubuntu.pem ubuntu@54.238.161.253
初めての接続時には、確認を求められるので、「yes」と答える。
#2. python3のインストールとjupyter環境の構築
ここからは、接続先のサーバー(Ubuntu20.04)の中での作業。
まずはアップデート。
sudo apt update
#・ 各種インストール(python3、jupyter notebook)
# Python3のインストール
$ sudo apt install python3-pip python3-pandas python3-sklearn
# Jupyter Notebookのインストール
$ sudo apt install jupyter-notebook
#・ jupyter notebookの設定
jupyter-notebookの設定ファイルの作成
$ jupyter-notebook --generate-config
Writing default config to: /home/ubuntu/.jupyter/jupyter_notebook_config.py
/home/ubuntu/.jupyter/
に設定ファイルが作成された。
jupyter_notebook_config.py
を編集する前に、ログイン時のパスワードを設定するための
ハッシュ値を取得する。パスワードを2回入力してハッシュ値を取得。
$ python3 -c "import IPython;print(IPython.lib.passwd())"
Enter password:
Verify password:
sha1:2fc8faf488d0:575967cef992baf593e9cbeeed0e554147e2b88c
sha1:2fc8faf48...
をコピーしておく。
jupyter-ntoebookの設定ファイルの編集
$ vi /home/ubuntu/.jupyter/jupyter_notebook_config.py
設定ファイルを編集していく。vimの操作方法はここでは省略する。
デフォルトでは全てコメントアウトしてあるので該当箇所を探しながら設定を変更。
# ipアドレスの設定
c.NotebookApp.ip = '0.0.0.0'
# ブラウザを開くかどうか
c.NotebookApp.open_browser = False
# portの設定
c.NotebookApp.port = 8080
# さっきコピーしたハッシュ値をペースト
c.NotebookApp.token = u'sha1:2fc8faf488d0:575967cef992baf593e9cbeeed0e554147e2b88c'
#・ jupyter notebookを起動
$ jupyter-notebook
ブラウザのアドレスバーに[インスタンスのパブリックIPv4アドレス]:[ポート番号(8080)]
などと入力。
ログイン画面が開くので設定したパスワードを入力
設定ファイルを編集しなくても、jupyter-notebookの起動時にオプションを設定してログイン可能。
jupyter-notebook --ip=0.0.0.0 --port=8080 --no-browser
tokenはjupyterサーバー起動時に出力される。
ホームディレクトリの一覧が表示されれば完了。
numpyやpandas、その他機械学習ライブラリなど、必要に応じてインストールして終了。
#3. インスタンスの削除
今回は無料枠のみで構築しましたが、大掛かりなネットワークを作成した際は、放置しておくと
高額な料金が発生しかねないので、インスタンスの削除または停止をする。
#4. おわりに
今後はより複雑な構造のネットワークを構築や、GPUを使用した機械学習環境の構築
に挑戦したいです。
この記事はAWS初学者を導く体系的な動画学習サービス
「AWS CloudTech」の課題カリキュラムで作成しました。
https://aws-cloud-tech.com