AWSでUbuntuインスタンスを立ち上げ、指定したバージョンのPythonをソースからインストール、Jupyter Labの設定も

##:dvd: この記事の目的

用途に合わせたPythonの環境をすばやく構築したい、そんな時のための手順を、備忘を兼ねて書き記します。
なお、本記事執筆時点(2021/02/27)での情報となります。AWSのサービス内容は常にアップデートされるため、内容が合致しない場合はご了承下さい。


##:dvd: AWSでUbuntuインスタンスを作成

本記事ではAWSの無料利用枠の範囲で設定を行います。
また、AWSのアカウント取得やログインについては割愛します。

####1. AWSでインスタンスを選択し設定を行う

(1)AWS画面の左上の「サービス」をクリックし、「コンピューティング」の「EC2」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/81ffd83b-e1fc-98d1-a698-6a99984b9b79.png)

(2)左枠メニュー項目から「インスタンス」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/ec0980fc-e01e-655b-44be-1b75f78bc777.png)

(3)インスタンス一覧画面が表示されたら、右上の「インスタンスを起動」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/241e2497-a992-ad6c-b3da-d01c1c7c35b0.png)

(4)まずは、左内枠の「無料利用枠のみ」にチェックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/0697850e-b0b3-df67-4917-cf44f021d17a.png)

(5)自分の好きなOSを選択して下さい。ここでは、「Ubuntu Server 18.04 LTS」を選択しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/c971c48d-ad39-da25-4ccc-abb99bf9a354.png)

(6)「次のステップ：インスタンスの詳細の設定」をクリックします。
無料利用枠の対象であることを確認し、次へ進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/14576db5-0da3-000a-00cc-0b81a121ee46.png)

(7)「次のステップ: ストレージの追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/5236866b-eaad-a93f-e8a0-263ab83ce3f1.png)

(8)「次のステップ: タグの追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/80a7c647-e079-251b-1e3c-06228a79a1d4.png)

(9)「次のステップ: セキュリティグループの設定」をクリックします。
タグは任意で設定して下さい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/39803c24-f80c-f5ef-c0b9-9658cd12d48c.png)

(10)セキュリティグループの設定を行います。
以下赤枠の通り、タイプに「**SSH**」「**HTTPS**」の設定を入れます。
ちなみに「カスタムTCP」のポートは"8888"Jupyter Notebookのための設定で、一般的には不要と思います。。
「確認と作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/aaf00f85-7d70-a3f6-aac9-4014eb1dd1c0.png)

(11)内容を確認し「起動」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/e158bd6f-3e5d-242a-fb72-b092b4eab0e0.png)

(12)既存のキーペアまたは新しいキーペアを選択し、インスタンスの作成を実行して下さい。
インスタンスの作成手続きは以上です。

####2. 必要なビルドツール・ライブラリをインストールする

(1)作成したインスタンスにログインします。
SSHツールを使用し作成したインスタンスへログインします。
ここではTera Termを使用しました。ログインの仕方はAWSの一般的な手順となりますのでここでは省略します。

インスタンスのOSがUbuntuなので、ユーザ名は「**ubuntu**」となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/239a844f-48cd-1372-77e0-41ed6afbe790.png)

(2)以下を実行して必要なライブラリをインストールします。

```ruby
sudo apt update
sudo apt install build-essential libbz2-dev libdb-dev libreadline-dev libffi-dev libgdbm-dev liblzma-dev libncursesw5-dev libsqlite3-dev libssl-dev zlib1g-dev uuid-dev tk-dev
```

##:dvd: バージョンを指定してPythonをソースからインストール

####1. Pythonのソースをダウンロードする

(1)Pythonの公式サイトへアクセスします。
AWSインスタンスではなく、ローカルPC端末のブラウザでアクセスします。

:desktop: Python公式サイト
https://www.python.org/

(2)Pythonサイトのメニュー「Download」を選択し、さらに「All releases」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/a994ae7b-d570-a6b8-33a1-52189bb3a867.png)

(3)ソースの一覧から欲しいバージョンのソースを選択しクリックします。
ここでは「Python 3.9.2」を選択しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/fe2b8fa7-410b-02ae-cc63-d1fb7afd9b22.png)

(4)ソースのURLを取得します。
ソースの選択画面で、欲しいソースのリンクを右クリックしてURLを取得します。
ここでは「Gzipped source tarball」を選択しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/1e8699d6-6704-dea8-0cdb-e7e626f59fc1.png)
右クリックし、「リンクのアドレスをコピー」します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/b74cc72e-b5c4-30df-1251-46643b3dcfca.png)

(5)AWSインスタンスのプロンプトで、取得したURLからソースをダウンロードします。
プロンプトでは以下のように実行してソースを取得します。

```ruby
wget https://www.python.org/ftp/python/3.9.2/Python-3.9.2.tgz
```

実行するとソースをダウンロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/2c36cf48-e60f-508e-2985-43dc981be1bf.png)

(6)ソースを解凍します。
取得したファイルを以下のコマンドで解凍します。

```ruby
tar -xvf Python-3.9.2.tgz
```

####2. Pythonをインストールする

(1)解凍後、以下のコマンドでPythonフォルダへ移動します。

```ruby
cd Python-3.9.2/
```

(2)以下の各コマンドを順次実行し、インストールを行います。

```ruby
./configure
make
sudo make install
```

途中でエラーが発生せず、最後に「Successfully ...」と表示されたら完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/74a322c2-d7af-838e-e0ba-d20a12c1531c.png)

(3)pipを使用するため、以下のコマンドでpipライブラリをインストールします。

```ruby
sudo apt install python-pip
```

もし上記のコマンドでpipのインストールができない場合は、以下も試してみて下さい。

```ruby
python -m pip install pillow # ... (※)
```

上記(※)で以下のメッセージが出た場合、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/80365912-f9a7-c111-72cc-65ab77b570bb.png)
指示通り、次のコマンドで更新を行います。

```ruby
/home/ubuntu/Python-3.9.2/python -m pip install --upgrade pip
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/c1d70f0d-002a-2d0d-6078-e9849c8d4d7e.png)
さらに、/home/ubuntu/.local/binにパスを通します。

```ruby
PATH=$PATH:/home/ubuntu/.local/bin
```

以下、pipがインストールされました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/3f818c7e-cc89-ad9e-2038-ecb60013dc6a.png)


(4)以下のコマンドでPythonのバージョンを確認します。
想定通りのバージョンが表示されればOKです。

```ruby
./python -V
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/855956e0-cbca-10aa-ed60-f50b460611aa.png)

(5)最後に、pythonコマンドのパスを設定します。
ここではインストールしたpythonのディレクトリが以下ですので、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/acd8cdb3-5ab0-75ea-9100-37b005481cac.png)

次のようにコマンドを実行します。

```ruby
sudo ln -s /home/ubuntu/Python-3.9.2/python /usr/bin/python
```

上書きエラーが出る場合は、強制実行オプション[-f]を付けて実行します。


以上でインストールは完了です。
Pythonコマンドでバージョンの確認を行って下さい。


##:dvd: Jupyter Labのインストール

####1. Jupyter Labをインストールする

Jupyter Labは以下のコマンドでインストールします。

```ruby
pip install jupyterlab
```

以下のようにダウンロードとインストールが実行されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/14cae4ab-2a79-7f27-71f1-265660cf5f1f.png)
エラーが出ず終了すればOKです。

####2. ブラウザでJupyter Labにアクセスするための設定

AWSインスタンス上にJupyter Labをインストールした場合は、Jupyter Labを実行した後、例えば自宅などの外部ネットワークからアクセスすることになります。この場合、以下のような設定が必要になります。

(1)Jupyter Labの設定ファイルを作成します。
以下のコマンドを実行して下さい。 /home/ubuntu/.jupyter/フォルダ配下に「jupyter_lab_config.py」というファイルが作成されます。

```ruby
jupyter lab --generate-config
```

(2)設定ファイルを修正します。
viなどのエディタを使用して、上記の設定ファイルを開きます。

(3)受信するIPアドレスを修正します。
以下の段落の「c.ServerApp.ip = 'localhost'」をコメントアウトし、IPアドレスとして'0.0.0.0'を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/277c6216-81f7-c955-2452-6e024af8d859.png)
↓修正後
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/79af8c5e-b131-54dd-fc5e-38c34494f38e.png)

(4)内部プロセスがブラウザを起動しようとする処理を停止します。
Jupyter Labを起動すると、内部プロセスにおいてブラウザを起動しようとします。
この処理は不要なので、設定をFalseにします。

以下では、「c.ServerApp.open_browser = False」がコメントアウトされていたところを、#記号を削除して設定を有効にしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/fa0f1430-c454-1440-4d8b-3365775f1d0d.png)

(5)設定が終わったら、保存して閉じます。

####3. Jupyter Labを起動する

以下のコマンドでJupyter Labを起動します。

```ruby
jupyter lab --allow-root
```

無事起動しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/afe3f7d5-6077-e17d-b245-152e9c5fe093.png)

####4. Jupyter Labにアクセスする

Jupyter Labにアクセスするには、上記の画像の赤枠部分のURLを使用します。
ただし、このURLのドメイン部分はローカルドメインなので、AWSの「**パブリック IPv4 DNS**」などに置き換える必要があります。

「パブリック IPv4 DNS」とは、インスタンスの詳細画面の以下の赤枠部分のドメインです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/9344737a-7449-0656-edbf-2f2200cf8659.png)

ローカルPCでブラウザを開き、上記のURL及びパブリック IPv4 DNSから成るURLを入力し、画面を表示することで、Jupyter Labの画面を表示することができます。

**＜注意＞**
・プロトコルはhttpのままですので、セキュリティを確保するために**https**に変更することをお薦めします。
・AWSインスタンスのセキュリティグループにポート：8888の設定を入れておく必要があります。
・Jupyter Labへアクセスするための認証がかかっていない状態です。Jupyter Labの認証機能を有効にすることをお薦めします。


##:dvd: ご意見など

ご意見、間違い訂正などございましたらお寄せ下さい。