LoginSignup
26

More than 3 years have passed since last update.

posted at

【AWS】決定版!最速でpython3.7仮想環境を1から構築

はじめに

今回初めてVPCとEC2を触り、python3.7仮想環境を作成するところまで実施したため、皆さんにナレッジを共有します。(全て無料枠内です。)

ちなみにアーキテクトは以下です。超絶シンプル。
Untitled Diagram.drawio-3.png

アジェンダ

  1. VPC作成&設定
  2. EC2作成&設定
  3. EC2にPython3.7仮想環境構築

1. VPC作成&設定

大まかな流れとしては、以下です。
①VPC作成
②VPC内にパブリックサブネットを作成
③インターネットゲートウェイを作成し、VPCに結びつける
④ルートテーブルを作成し、パブリックサブネットに割り当て
⑤ルートテーブルのデフォルトゲートウェイを、インターネットゲートウェイに設定

①VPC作成

・VPC(Virtual Private Cloud)とは?
AWS上に作るプライベートなネットワーク環境。

(1)AWSマネジメントコンソールからVPCを開いて、以下の手順を実施。
makeVPC1.png

(2)以下を入力。

項目
名前タグ 任意の名前
IPv4 CIDR ブロック 192.168.0.0/16(プライベートIPアドレス1なら他でもOK)
IPv6 CIDR ブロック デフォルト
テナンシー デフォルト

makeVPC1.png

(3)完成!!
makeVPC1.png

②VPC内にパブリックサブネットを作成

・サブネットとは?
ネットワークをさらに分割したネットワークのこと。

(1)以下の手順を実施。
全画面_2019_10_15_20_30.png

(2)サブネットのCIDRブロック等を入力。以下を参考。

項目
名前タグ 任意の名前
VPC 先ほど作成したVPC
アベイラビリティーゾーン デフォルト
IPv4 CIDR ブロック 192.168.1.0/24(VPCのIPアドレスを分割した値であればOK)

全画面_2019_10_15_20_38.png

(3)完成!!
全画面_2019_10_15_21_29.png

③インターネットゲートウェイを作成し、VPCに結びつける

・インターネットゲートウェイとは?
VPC内のインスタンスとインターネットとの間の通信を可能にするVPCのコンポーネント。

(1)インターネットゲートウェイを作成。
全画面_2019_10_21_14_31.png
全画面_2019_10_21_14_36.png

(2)インターネットゲートウェイをVPCに結びつける。
全画面_2019_10_21_14_39.png
aaa.png

(3)完成!!
全画面_2019_10_21_14_50.png

④ルートテーブルを作成し、パブリックサブネットに割り当てる。

・ルートテーブルとは?
通信をどこに流すかを定義するための情報。AWSではルートテーブルを各サブネットに関連付けする。

サブネットにはデフォルトで、VPCのデフォルトのルートテーブルのみ適用されている。(今回では、192.168.0.0/16のみ送信可能の状態。)
そのため、ここではインターネットゲートウェイにパケットを送信するように設定する。

(1)VPCにルートテーブルを作成。
全画面_2019_10_21_15_12.png

項目
名前タグ 任意の名前
VPC 先ほど作成したVPC

全画面_2019_10_21_15_15.png
全画面_2019_10_21_15_17.png

(2)ルートテーブルをパブリックサブネットに割り当てる。
全画面_2019_10_21_15_21.png
全画面_2019_10_21_15_27.png
全画面_2019_10_21_15_30.png

⑤ルートテーブルのデフォルトゲートウェイを、インターネットゲートウェイに設定

・デフォルトゲートウェイとは?
ネットワークから外部のネットワークに接続する際、通信の出入り口となるもの。

(1)ルートテーブルのルートを編集。
全画面_2019_10_21_15_35.png

(2)送信先に全てのIPアドレス範囲を示す「0.0.0.0/0」、ターゲットにインターネットゲートウェイ(igw-XXX)を指定。
全画面_2019_10_21_15_40.png

(3)完成!!
全画面_2019_10_21_15_46.png
全画面_2019_10_21_15_47.png

2. EC2作成&設定

大まかな流れとしては、以下です。
①AMIを選択
②インスタンスタイプを選択
③インスタンスの詳細情報を設定
④ストレージを設定
⑤インスタンスの名前付け
⑥セキュリティグループの設定
⑦設定を確認し、EC2ログインするための秘密鍵をダウンロード

①AMIを選択

・AMIとは?
ソフトウェア構成(オペレーティングシステム、アプリケーションサーバー、アプリケーションなど)を記録したテンプレート。

AWSマネジメントコンソールからEC2を開いて、以下の手順を実施。
全画面_2019_10_21_18_15.png
今回はLinux2を選択。
全画面_2019_10_21_18_17.png

②インスタンスタイプを選択

全画面_2019_10_21_18_18.png

③インスタンスの詳細情報を設定

以下の項目を入力。残りの項目はデフォルトのままでOK。

項目
ネットワーク 作成したVPC
サブネット 作成したパブリックサブネット
自動割り当てパブリックIP 有効化2
プライマリIP(→プライベートIPアドレス) 192.168.1.10

merge.png

④ストレージを設定

デフォルトのままで何も変更しない。
全画面_2019_10_21_18_53.png

⑤インスタンスの名前付け

任意のキー名/値でOK。
全画面_2019_10_21_18_55.png

⑥セキュリティグループの設定

・セキュリティグループとは?
所謂、ファイアウォールのこと。デフォルトでは、SSH(22)というプロトコルでどこからでも接続可能になっている。
SSHは後続でPython環境構築する際、PCからEC2にアクセスする時に用いる。

任意のセキュリティグループ名でOK。
全画面_2019_10_21_18_57.png

⑦設定を確認し、EC2ログインするための秘密鍵をダウンロード

全画面_2019_10_21_18_59.png
任意のキーペア名でOK。秘密鍵は一度失くすと再発行不可のため大切に保管する。
1度秘密鍵を作ると、他にEC2を立ち上げる時も共有で利用可能。
全画面_2019_10_21_19_01.png

設定完了!!
全画面_2019_10_21_19_05.png
全画面_2019_10_21_19_09.png

3. Python3.7仮想環境作成

Amazon Linux2ではデフォルトで python2.7系がインストールされていますが、
今回はpython3.7の仮想環境を作成していきます。

大まかな流れとしては、以下です。
①秘密鍵を使い、AWSのEC2にSSH接続
②環境構築に必要なパッケージをインストール
③pyenvのインストール
④pyenv-virtualenvのインストール
⑤ライブラリをインストール(任意)

①秘密鍵を使い、AWSのEC2にSSH接続

まずはEC2のパブリックIPアドレスを確認。
全画面_2019_10_22_14_22.png

そしてsshコマンドで接続する。


//1.秘密鍵をホームユーザー配下に格納
$ mv test-my-key.pem.txt ~/.ssh

//2.秘密鍵の権限変更
$ chmod 400 ~/.ssh/test-my-key.pem.txt 

//3.sshでEC2に接続
$ sudo ssh -i ~/.ssh/test-my-key.pem.txt ec2-user@EC2のパブリックIPアドレス

Amazon Linux2のデフォルトのユーザー名は「ec2-user」のため、ec2-userを指定。
sshに成功したら以下が表示される。


$ sudo ssh -i ~/.ssh/test-my-key.pem.txt ec2-user@EC2のパブリックIPアドレス

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
15 package(s) needed for security, out of 31 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-192-168-1-10 ~]$

②環境構築に必要なパッケージをインストール

コンパイラ、暗号化、圧縮、コマンドラインなどのライブラリをインストールします。


$ sudo yum -y install gcc gcc-c++ make git openssl-devel bzip2-devel zlib-devel readline-devel sqlite-devel libffi-devel

③pyenvのインストール

・pyenvとは?
Pythonのバージョン管理を行なうコマンドラインツールで、複数のバージョンのPythonのインストールや切り替えが容易に可能。

Gitからインストール。


$ sudo git clone https://github.com/yyuu/pyenv.git /usr/bin/.pyenv
$ sudo mkdir /usr/bin/.pyenv/shims
$ sudo mkdir /usr/bin/.pyenv/versions
$ sudo chown -R ec2-user:ec2-user /usr/bin/.pyenv

環境変数の設定を行う。


$ vi ~/.bashrc
---------------------以下を追記
export PYENV_ROOT="/usr/bin/.pyenv"
export PATH=${PYENV_ROOT}/bin:$PATH
eval "$(pyenv init -)"
-----------------------------

//設定変更を反映
$ source ~/.bashrc

python3.7.3のインストール。


//インストール可能なバージョンを確認
$ pyenv install --list

//今回は3.7.3をインストール
$ pyenv install 3.7.3

//インストール済みのバージョン一覧
$ pyenv versions

//pythonのバージョン確認。インストールしても2.7のまま。
$ python -V
Python 2.7.16

ちなみに以下で、EC2で利用するデフォルトのバージョンの設定が可能。


//3.7.3バージョンへ切り替え
$ pyenv global 3.7.3

④pyenv-virtualenvのインストール

・pyenv-virtualenvとは?
分離されたPython環境を作成するツール。環境ごとに違うパッケージを入れることが可能。

Gitからインストール。


$ git clone https://github.com/yyuu/pyenv-virtualenv.git /usr/bin/.pyenv/plugins/pyenv-virtualenv

環境変数の設定を行う。


$ vi ~/.bashrc
---------------------以下を追記
eval "$(pyenv virtualenv-init -)"
-----------------------------

//設定変更を反映
$ source ~/.bashrc

python3.7.3仮想環境を作成


//バージョンpython3.7.3の仮想環境(名前:python3.7)を作成
$ pyenv virtualenv 3.7.3 python3.7

//カレントディレクトリにpython3.7.3の仮想環境を適用
$ pyenv local python3.7

//バージョン確認
(python3.7)$ python --version
Python 3.7.3

//仮想環境を設定していないディレクトリに移動すると、EC2デフォルトのバージョン
(python3.7)$ cd ~
$ python --version
Python 2.7.16

ちなみに仮想環境の削除は以下。


$ pyenv uninstall python3.7

⑤ライブラリをインストール(任意)


//EC2のデフォルトではpipのバージョンが古いためアップグレード
$ pip install --upgrade pip

//任意のパッケージをインストール
$ pip3 install numpy
$ pip3 install sklearn

//ライブラリの格納先確認
$ pip3 show numpy

終わりに

基本的かつ単純なアーキテクトなので、まだVPCとEC2に触ってみたことがない人はぜひ挑戦してみて下さい。
このアーキテクトに、プライベートサブネットを追加してEC2にDBをインストールするなど、色々と自分でカスタマイズもできます。

参考文献
Amazon Web Services 基礎からのネットワーク&サーバー構築
Python開発環境構築


  1. 10.0.0.0~10.255.255.255
    172.16.0.0~172.31.255.255
    192.168.0.0~192.168.255.255 

  2. EC2が起動されるたびに、ランダムでIPアドレスが変わる。
    Elastic IP(静的IP)で、IPアドレスを固定化できるが、EC2が止まっている時に別途費用がかかる。 

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
26