##はじめに
今回初めてVPCとEC2を触り、python3.7仮想環境を作成するところまで実施したため、皆さんにナレッジを共有します。(全て無料枠内です。)
##アジェンダ
- VPC作成&設定
- EC2作成&設定
- EC2にPython3.7仮想環境構築
1. VPC作成&設定
大まかな流れとしては、以下です。
①VPC作成
②VPC内にパブリックサブネットを作成
③インターネットゲートウェイを作成し、VPCに結びつける
④ルートテーブルを作成し、パブリックサブネットに割り当て
⑤ルートテーブルのデフォルトゲートウェイを、インターネットゲートウェイに設定
###①VPC作成
・VPC(Virtual Private Cloud)とは?
AWS上に作るプライベートなネットワーク環境。
(1)AWSマネジメントコンソールからVPCを開いて、以下の手順を実施。
(2)以下を入力。
項目 | 値 |
---|---|
名前タグ | 任意の名前 |
IPv4 CIDR ブロック | 192.168.0.0/16(プライベートIPアドレス1なら他でもOK) |
IPv6 CIDR ブロック | デフォルト |
テナンシー | デフォルト |
###②VPC内にパブリックサブネットを作成
・サブネットとは?
ネットワークをさらに分割したネットワークのこと。
(2)サブネットのCIDRブロック等を入力。以下を参考。
項目 | 値 |
---|---|
名前タグ | 任意の名前 |
VPC | 先ほど作成したVPC |
アベイラビリティーゾーン | デフォルト |
IPv4 CIDR ブロック | 192.168.1.0/24(VPCのIPアドレスを分割した値であればOK) |
###③インターネットゲートウェイを作成し、VPCに結びつける
・インターネットゲートウェイとは?
VPC内のインスタンスとインターネットとの間の通信を可能にするVPCのコンポーネント。
###④ルートテーブルを作成し、パブリックサブネットに割り当てる。
・ルートテーブルとは?
通信をどこに流すかを定義するための情報。AWSではルートテーブルを各サブネットに関連付けする。
サブネットにはデフォルトで、VPCのデフォルトのルートテーブルのみ適用されている。(今回では、192.168.0.0/16のみ送信可能の状態。)
そのため、ここではインターネットゲートウェイにパケットを送信するように設定する。
項目 | 値 |
---|---|
名前タグ | 任意の名前 |
VPC | 先ほど作成したVPC |
###⑤ルートテーブルのデフォルトゲートウェイを、インターネットゲートウェイに設定
・デフォルトゲートウェイとは?
ネットワークから外部のネットワークに接続する際、通信の出入り口となるもの。
(2)送信先に全てのIPアドレス範囲を示す「0.0.0.0/0」、ターゲットにインターネットゲートウェイ(igw-XXX)を指定。
##2. EC2作成&設定
大まかな流れとしては、以下です。
①AMIを選択
②インスタンスタイプを選択
③インスタンスの詳細情報を設定
④ストレージを設定
⑤インスタンスの名前付け
⑥セキュリティグループの設定
⑦設定を確認し、EC2ログインするための秘密鍵をダウンロード
###①AMIを選択
・AMIとは?
ソフトウェア構成(オペレーティングシステム、アプリケーションサーバー、アプリケーションなど)を記録したテンプレート。
AWSマネジメントコンソールからEC2を開いて、以下の手順を実施。
今回はLinux2を選択。
###③インスタンスの詳細情報を設定
以下の項目を入力。残りの項目はデフォルトのままでOK。
項目 | 値 |
---|---|
ネットワーク | 作成したVPC |
サブネット | 作成したパブリックサブネット |
自動割り当てパブリックIP | 有効化2 |
プライマリIP(→プライベートIPアドレス) | 192.168.1.10 |
###④ストレージを設定
デフォルトのままで何も変更しない。
###⑥セキュリティグループの設定
・セキュリティグループとは?
所謂、ファイアウォールのこと。デフォルトでは、SSH(22)というプロトコルでどこからでも接続可能になっている。
SSHは後続でPython環境構築する際、PCからEC2にアクセスする時に用いる。
###⑦設定を確認し、EC2ログインするための秘密鍵をダウンロード
任意のキーペア名でOK。秘密鍵は一度失くすと再発行不可のため大切に保管する。
1度秘密鍵を作ると、他にEC2を立ち上げる時も共有で利用可能。
##3. Python3.7仮想環境作成
Amazon Linux2ではデフォルトで python2.7系がインストールされていますが、
今回はpython3.7の仮想環境を作成していきます。
大まかな流れとしては、以下です。
①秘密鍵を使い、AWSのEC2にSSH接続
②環境構築に必要なパッケージをインストール
③pyenvのインストール
④pyenv-virtualenvのインストール
⑤ライブラリをインストール(任意)
###①秘密鍵を使い、AWSのEC2にSSH接続
そして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開発環境構築