はじめに
こんにちは。アプリケーションサービス部の水垣です。
自分たちの課では、よく Python でプログラミングしたコードを serverless framework を利用して AWS Lambda にデプロイすることがあります。
開発・デプロイ環境の選択肢はいくつかあるのですが、今回は比較的手軽に用意できる Amazon EC2 に環境を構築したいと思います。
これから OJT で回ってくる新人の方たちの環境構築に役立てばうれしいです。
なお、表示されるバージョンおよび手順は執筆時点(2021/8)時点のものとなります。
メリット・デメリット
開発環境を EC2 上に構築することのメリット・デメリットを挙げておきます。
メリット
- Lambda の OS である Amazon Linux2 と OS を合わせることができる
- ローカルPC が Mac・Windows でも、環境を統一できる
- Visual Studio Code(VSCode) の Remote-SSH を利用することで、VSCode をインターフェイスに Linux 上でプログラミングできる
- ローカルPCでコーディングして、別ツールでサーバーにアップロードの手間が省けます
デメリット
- 起動中は若干お金がかかる
- 利用しない時間は停止するなどの対応がベターです
構築する環境例
Amazon EC2
スペックは開発内容に合わせて変更してください。
- Amazon Linux 2 AMI (HVM), SSD Volume Type
- t3.small(2vCPU, メモリ2GiB)
- PublicIP:有効(Elastic IPで固定化すると楽です)
- IAM Role:AdministratorAccess権限
- ストレージ:8GB
言語環境
- anyenv
- pyenv:Pythonのバージョン管理ツール
- Python 3.8.11
- pipenv
- nodenv:Node.jsのバージョン管理ツール
- Node.js 14.17.4 LTS
- serverless framework(プロジェクトのフォルダ配下にインストールします)
- pyenv:Pythonのバージョン管理ツール
その他
- Git
EC2
EC2 インスタンスの起動についての記事はたくさんありますので、ここでは割愛させていただきます。
注意点としては、以下になります。
- ローカルPCから SSH 接続ができること
- セキュリティグループで接続元が管理されていること
- 例えば会社のVPNや自宅のグローバル IP からのみなど
- IAM Roleの権限が AdministratorAccess ポリシー相当
- 開発向けに権限は広げていますので、必要に応じて絞ってください
インスタンスが起動できましたら、SSH 接続し以降の操作を行ってください。
Git
まずは、開発環境には必須な Git をインストールします。以降の anyenv 等のインストールでも利用しますので、忘れずにインストールしてください。
$ sudo yum install -y git ... 完了しました! $ git --version git version 2.32.0
anyenv
プログラム言語のバージョン管理を可能にする 〜env 系を一括で管理してくれるツールです。
今回は、pyenv(Python)・nodenv(Node.js)を利用するので、anyenv で一括管理させます。
インストールは、公式サイトを参考にインストールします。
https://github.com/anyenv/anyenv
サイト内の以下の箇所を参考ください。
参考
$ pwd /home/ec2-user $ git clone https://github.com/anyenv/anyenv ~/.anyenv ... $ echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.bashrc $ ~/.anyenv/bin/anyenv init # the following to ~/.bash_profile: eval "$(anyenv init -)" $ echo 'eval "$(anyenv init -)"' >> ~/.bashrc $ . ~/.bashrc ANYENV_DEFINITION_ROOT(/home/ec2-user/.config/anyenv/anyenv-install) doesn't exist. You can initialize it by: > anyenv install --init $ anyenv install --init Manifest directory doesn't exist: /home/ec2-user/.config/anyenv/anyenv-install Do you want to checkout https://github.com/anyenv/anyenv-install.git? [y/N]: y ... Completed! $ anyenv --version anyenv 1.1.4 # 管理する〜envを一括でアップデートするプラグインもインストールしておきます $ mkdir -p $(anyenv root)/plugins $ git clone https://github.com/znz/anyenv-update.git $(anyenv root)/plugins/anyenv-update ... $ anyenv update
pyenv
Python の言語バージョンを管理するツールです。anyenv を利用してインストールします。
複数のバージョンをインストールでき、言語のバージョンをシステム全体で切り替え(global)や、特定フォルダ配下のみに適用(local)ができます。
https://github.com/pyenv/pyenv
参考
$ anyenv install pyenv ... Install pyenv succeeded! Please reload your profile (exec $SHELL -l) or open a new session. $ exec $SHELL -l $ pyenv --version pyenv 2.0.4-8-gd209e061
nodenv
pyenv 同様に、Node.js の言語バージョンを管理するツールです。
https://github.com/nodenv/nodenv
参考
$ anyenv install nodenv ... Install nodenv succeeded! Please reload your profile (exec $SHELL -l) or open a new session. $ exec $SHELL -l nodenv --version nodenv 1.4.0+3.631d0b6
Pythonをインストールするための準備
pyenv で Python3 をインストールしますが、インストール時に必要になるライブラリ群を EC2 にインストールします。
$ sudo yum groupinstall "Development Tools" -y $ sudo yum-builddep python3 -y ... 完了しました!
Pythonをインストールする
pyenv を利用して、Python3.8.11 をインストールします。
さらに、システム全体で 3.8.11 が利用できるようにバージョンを設定します。
参考
# インストール可能なバージョンを確認する $ pyenv install --list ... 3.8.11 ... stackless-3.7.5 # インストール(5〜10分ほどかかります) $ pyenv install 3.8.11 ... Installed Python-3.8.11 to /home/ec2-user/.anyenv/envs/pyenv/versions/3.8.11 $ pyenv versions * system (set by /home/ec2-user/.anyenv/envs/pyenv/version) 3.8.11 # システム全体で 3.8.11 を利用するように切り替える $ pyenv global 3.8.11 $ pyenv versions system * 3.8.11 (set by /home/ec2-user/.anyenv/envs/pyenv/version) $ python --version Python 3.8.11
pipenv をインストールする
Python で仮想環境・パッケージの管理をするために、pipenv を利用したいのでインストールします。
また、pipenv で仮想環境を作成した際に、プロジェクトフォルダ配下に .venv を作成するように設定します。
https://pipenv.pypa.io/en/latest/
参考
# pipをアップデートします $ pip install -U pip ... Successfully installed pip-21.2.3 # pipenv をインストールします $ pip install pipenv $ pipenv --version pipenv, version 2021.5.29 # プロジェクトフォルダ配下に .venv を作成させる設定を .bashrc に追加します $ echo 'export PIPENV_VENV_IN_PROJECT=true' >> ~/.bashrc $ . ~/.bashrc
Node.js をインストールする
nodenv を利用して、Node.js 14.17.4(LTS) をインストールします。
さらに、システム全体で 14.17.4 が利用できるようにバージョンを設定します。
参考
# インストール可能なバージョンを確認する $ nodenv install --list ... 14.17.4 ... v8-canary # インストール $ nodenv install 14.17.4 ... Installed node-v14.17.4-linux-x64 to /home/ec2-user/.anyenv/envs/nodenv/versions/14.17.4 $ nodenv versions nodenv versions 14.17.4 # システム全体で 14.17.4 を利用するように切り替える $ nodenv global 14.17.4 $ nodenv versions * 14.17.4 (set by /home/ec2-user/.anyenv/envs/nodenv/version) $ node --version v14.17.4
serverless framework をインストールする
Serverless Applicationを構築するさいに便利な、構成管理・デプロイのためのNode.js製ツールです。
他には、AWS 製のAWS サーバーレスアプリケーションモデル(SAM)等があります。 https://aws.amazon.com/jp/serverless/sam/
今回は、serverless framework をシステム全体にではなくプロジェクトフォルダの配下にインストールを行います。
そのためプロジェクトを作成するつど、 serverless framework のインストールは必要になります。
参考
# プロジェクトフォルダ(sample-lambda)を作成して移動する $ mkdir sample-lambda; cd $_ # package.jsonを作成する $ npm init ...すべてEnterで、最後にyes(正式にプロジェクトを作成する際は適切な値を入力) # serverless frameworkをインストールする $ npm install serverless ... found 0 vulnerabilities $ npx serverless --version Framework Core: 2.53.1 (local) Plugin: 5.4.3 SDK: 4.2.6 Components: 3.14.2
VSCode からの Remote-SSH
VSCode から Remote-SSH を利用して、EC2に接続する方法については、以下の弊社ブログに記事がありますので参考にしてみてください。
VSCode の Remote - SSH 機能を使って EC2 上で開発する
最後に
おつかれさまでした。これで、開発環境の構築ができました。
少々手間がかかるのと、ツールが複数でてきて最初は混乱するかと思います。まずはザックリでよいので、各ツールのサイトに目を通して役割と使い方を把握できればOKです。
また、一旦この状態で AMI を採取しておくことで、開発環境の用意が簡単になります。
この AMI から EC2 インスタンスを起動すれば、この手順を繰り返さなくても開発を始めるための環境が出来上がります。
その他に開発環境の構築という点では、以下が考えられます。
また機会があれば、環境構築シリーズとして書いていけたらと思います。
- Docker(VSCode の Remote-Containers利用)
- AWS Cloud9
- AWS CloudShell
ちなみに個人的には比較的手軽に Docker が使える VSCode の Remote-Containers がおすすめです!
Atsushi Morimoto(@74th) さんの VS Code Dev Container Guidebookとかは、手元に置いておきたい一冊でおすすめです。