Cloud9のPython環境を作る

最初「Cloud9を作成する」と書いて思いました。Cloud9を作っているのはAWSでぽんすけにそんな能力は塵ほどもありません。作るのは「Cloud9の環境」です。

Cloud9の環境を作る

  1. AWSのマネジメントコンソール > [Cloud9] > [Create enviroment]ボタン
    • f:id:ponsuke_tarou:20210220083300p:plain
  2. [Name]に環境名を入力 > [Next step]ボタン
  3. 設定項目を選択(VPCやSubnetも設定できる) > [Next step]ボタン
  4. 内容を確認 > [Create enviroment]ボタン > しばし待つ
    • f:id:ponsuke_tarou:20210220084539p:plain
  5. できた!
    • f:id:ponsuke_tarou:20210220084832p:plain

設定項目例

設定項目 設定値 参考になりそうなサイト
Environment type Create a new EC2 instance for environment (direct access)
Instance type t2.micro (1 GiB RAM + 1 vCPU)
Platform Amazon Linux 2
下の表を参考に決める
Amazon Linux は何系のディストリビューションに該当するのか – Amazon Web Service(AWS)導入開発支援
Cost-saving setting After 30 minutes(default) 【AWS Cloud9 の使い方】最初に覚えておくべき機能まとめ | 初心者向け完全無料プログラミング入門
Platform 似たようなOS デフォルトのPython
Amazon Linux RHEL5-6 / CentOS5-6 Python3.6
Amazon Linux 2 RHEL7 / CentOS7 Python3.7
Ubuntu Server Ubuntu わかったら書く

f:id:ponsuke_tarou:20210222174017j:plain
豊島区の山の湯

Pythonとpipのバージョンを設定する

Cloud9の環境によってPythonやpipのバージョンは違うので、使いたいバージョンに設定していきます。

f:id:ponsuke_tarou:20201207222034p:plain
右上歯車マークで設定を見られる

# Pythonのバージョンは3.8がいいな
$ python -V
Python 3.7.9

# pipも古いな・・・・
$ python -m pip -V
pip 9.0.3 from /usr/lib/python3.7/site-packages (python 3.7)

pyenv使ってバージョンをPython3.8にする

参考 : pyenvのインストール、使い方、pythonのバージョン切り替えできない時の対処法 - Qiita

# pyenvをGitHubからCloneする
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
Cloning into '/home/ec2-user/.pyenv'...
remote: Enumerating objects: 67, done.
remote: Counting objects: 100% (67/67), done.
remote: Compressing objects: 100% (54/54), done.
remote: Total 18814 (delta 26), reused 20 (delta 7), pack-reused 18747
Receiving objects: 100% (18814/18814), 3.80 MiB | 16.20 MiB/s, done.
Resolving deltas: 100% (12760/12760), done.

# バージョンを確認する
$ ~/.pyenv/bin/pyenv --version
pyenv 1.2.23

# .bashrcに
$ vi ~/.bashrc
# PATHを通す & pythonの実行パスの差し替えられるように設定して、
$ cat ~/.bashrc | grep pyenv
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
# 反映する
$ source ~/.bashrc

# PATHを確認して
$ printenv PATH | sed -e 's/:/:\n/g' | grep pyenv
/home/ec2-user/.pyenv/shims:
/home/ec2-user/.pyenv/bin:
# バージョンを確認する
$ pyenv --version
pyenv 1.2.23

# インストールできるPython3.8を確認する
$ pyenv install -l | grep 3.8.
  3.8.0
  3.8-dev
  3.8.1
  3.8.2
  3.8.3
  3.8.4
  3.8.5
  3.8.6
  3.8.7
  miniconda-3.8.3
  miniconda3-3.8.3
  miniconda3-3.8-4.8.2
  miniconda3-3.8-4.8.3
  miniconda3-3.8-4.9.2

# Python3.8.7をインストールする
$ pyenv install 3.8.7
Downloading Python-3.8.7.tar.xz...
-> https://www.python.org/ftp/python/3.8.7/Python-3.8.7.tar.xz
Installing Python-3.8.7...
WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?
Installed Python-3.8.7 to /home/ec2-user/.pyenv/versions/3.8.7

# Yumをアップデートして、
$ sudo yum -y update
...省略...
Complete!
# PythonのインストールでWARNINGになった不足なものをインストールする
$ sudo yum -y install bzip2
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
229 packages excluded due to repository priority protections
Package bzip2-1.0.6-13.amzn2.0.2.x86_64 already installed and latest version
Nothing to do

# Python3.8に切り替える
$ pyenv versions
* system (set by /home/ec2-user/.pyenv/version)
  3.8.7
$ pyenv global 3.8.7

# 使いたいバージョンに設定できた!
$ python -V
Python 3.8.7
$ python -m pip -V
pip 20.2.3 from /home/ec2-user/.pyenv/versions/3.8.7/lib/python3.8/site-packages/pip (python 3.8)

f:id:ponsuke_tarou:20210222174238j:plain
北区滝野川の万理ラーメン

プロジェクト設定をする

  1. 歯車マーク > [Preferences] > [Project Settings]
    • f:id:ponsuke_tarou:20210223222945p:plain
  2. [Code Editor (Ace)]
    • [Soft Tabs]:ONにするとタブキーで指定された数のスペースが挿入される
    • [On Save, Strip Whitespace]:ONにすると保存でファイルから不要なスペースとタブを削除する
  3. [Python Support]
    • [Enable advanced (jedi) Python code completion]:ONにするとコードが補完を有効になる

基本のライブラリをインストールする

どこでも使いそうな以下をインストールしておきます。

ライブラリ 概要 参考になるサイト
wheel Pythonのパッケージの形式であるwheel(ホイール) Wheel vs Egg — Python Packaging User Guide ドキュメント
ikp3db Python3でデバックするのに使う ikp3db · PyPI
$ python -m pip install wheel
Collecting wheel
  Downloading wheel-0.36.2-py2.py3-none-any.whl (35 kB)
Installing collected packages: wheel
Successfully installed wheel-0.36.2

$ python -m pip install ikp3db
Collecting ikp3db
  Using cached ikp3db-1.4.1.tar.gz (24 kB)
Building wheels for collected packages: ikp3db
  Building wheel for ikp3db (setup.py) ... done
  Created wheel for ikp3db: filename=ikp3db-1.4.1-cp38-cp38-linux_x86_64.whl size=40854 sha256=ce8b91f29f673387c3b155c9c0d519803df67e34d7eaec552d11038c401203d2
  Stored in directory: /home/ec2-user/.cache/pip/wheels/32/db/4b/66c26f1ee8960dc38bf6d62a4d79eb91d8e360e7b1a7ca2137
Successfully built ikp3db
Installing collected packages: ikp3db
Successfully installed ikp3db-1.4.1

$ python -m pip list
Package    Version
---------- -------
ikp3db     1.4.1
pip        20.2.3
setuptools 49.2.1
wheel      0.36.2

Lambda関数をインポートする

Lambda関数をCloud9で実装していくためにCloud9の外部で作ったLambda関数をインポートします。

AWS Resourcesを使う場合

[AWS Resources]が表示されない場合は、設定をすることで表示することができます。Cloud9からAWS Resources消失 - Qiitaでやり方を確認してください。

  1. [AWS Resources] > [Lambda] > [Remote Functions] > 対象のLambda関数を選択して右クリック > [import...]
    • f:id:ponsuke_tarou:20210225085156p:plain
  2. f:id:ponsuke_tarou:20210225085459p:plain
    [Local Functions]に追加されました
  3. f:id:ponsuke_tarou:20210225085613p:plain
    [Enviroment]にも追加されました

AWS Toolkitを使う場合

  1. [AWS] > 対象のリージョン > [Lambda]
  2. f:id:ponsuke_tarou:20210223125857p:plain
    対象の関数を右クリックして[import...]でLambda関数をインポートする
  3. f:id:ponsuke_tarou:20210223215059p:plain
    [Enviroment]のビューを表示するとLambda関数名のディレクトリができている

Lambda関数用にモジュールをインストールする

Lambda関数用にモジュールをインストールする場合は、関数のディレクトリないにインストールします。そうすれば、インストールしたモジュールもろともLambda関数をデプロイすることができます。

# Lambdaのディレクトリに移動する
$ cd backlog_none_assignee/

# 場所を指定してパッケージをインストールする(ここではrequests)
$ python -m pip install --target=./ requests

# 仮想環境にインストールされているパッケージを確認する
$ pip freeze
certifi==2020.12.5
chardet==4.0.0
idna==2.10
requests==2.25.1
urllib3==1.26.3