Serverless Operations, inc

>_cd /blog/id_o9t08eelff0a

title

AWS Cloud9の代わりに使えるAmazon Linux 2023を使ったPython環境設定手順

summary

AWSがAWS Cloud9を含むいくつかのサービスで新規受付を終了したことをAWSのチーフエヴァンジェリストのJeff BarrがXにて投稿しました。これらのサービスを既に利用しているAWSアカウントでは引き続き利用が出来ますが、利用していないアカウントでは新規の利用ができなくなっています。本記事では主に生成AIやAIモデルを作成するための環境としてPythonを使った開発環境をAWS Cloud9の代わりにAmazon Linux 2023を使って構築する方法をまとめています。

環境を構築してスナップショットまたは共有AMIを作成しておけば、以降は便利に再現環境を作って活用することが可能です。VSCode の Remote SSH を使って遠隔から接続することで、Cloud9 と同じようは使い方ができるので、セットアップ済みの開発環境の展開が容易になり、特にハンズオンでも利用できておすすめです。

01) IAM Policyを作成してインスタンスロールにアタッチする

IAM Policyの作成

まずはインラインポリシーを作成します。あなたの開発環境から接続するAWSサービスのアクションを許可していきましょう。例えばAmazon SageMakerでAIモデルのトレーニングを行い、Amazon S3にトレーニング済みのAIモデルを格納するようなプロジェクトの場合だと以下のようなポリシーが必要になります。ポリシー名はec2-sandbox-polocy-{org_name}-{user_name} など分かりやすい命名規則にしましょう

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::your-bucket-name/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "sagemaker:*"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "*"
        }
    ]
}

IAM Roleの作成

sts:AssumeRole ポリシーを含めて IAM Role を作成し、上記で作成したIAM Policyをアタッチします。ロール名はここではec2-sandbox-role-{org_name}-{user_name} とします。

02) インスタンス作成

Amazon EC2 インスタンスを作成していきます。画像処理やAI関連では x86 プロセッサーの選択をおすすめします。現段階ではGravitonの場合、未サポートや動作が不安定なAI関連のライブラリが結構あります

インスタンス名・タイプ・サイズ

  • x86 プロセッサーの場合
    • インスタンス名
      • ec2-sandbox-{org_name}-{user_name}-x86_64
    • 推奨インスタンスタイプ・サイズ
      • t3.larget3.xlarge
    • 用途
      • 画像処理・AI 関連・「複雑なデータ分析処理」などではこちらを選択
  • Graviton プロセッサーの場合
    • インスタンス名
      • ec2-sandbox-{org_name}-{user_name}-aarch64
    • 推奨インスタンスサイズ・タイプ
      • t4g.larget4g.xlarge
    • 用途
      • WebAPI、バッチ処理、ETLなど「大量処理」が必要な場合は場合はこちらを選択

インスタンスロールの指定

一番最初に作成したインスタンスロールを指定します。

  • ec2-sandbox-role-{org_name}-{user_name}

キーペア名

以下のようなフォーマットにしてファイル名も同様にしておくのがおすすめです。リージョン名を含めておくと便利です。

  • {org_name}-{user_name}-ec2-sandbox-{region_name}

ネットワーク設定

今回はパブリックサブネットに配置して利用するので、Auto-assign public IP を Enable にします。
※ System Manager - Session Manager を利用して、プライベートサブネットで利用することも可能です。

セキュリティグループ

22番ポートのみ、Inbound に My IP または社内 IP レンジを指定します。

ストレージ

20GB以上、Docker を利用する場合は 50GB 以上をお勧めします。

03) SSH 接続

インスタンス作成後、接続元(ローカルPC)の ~/.ssh/config に、以下のように追記します。

Host slsops.lopburny.ec2-sandbox.x86_64
  HostName {EC2_PUBLIC_IP}
  IdentityFile ~/.ssh/{PRIVATE_KEY_FILE_NAME}.pem
  User ec2-user

秘密鍵ファイルを ~/.ssh/ に配置、権限設定をします。

# ~/.ssh/
chmod 600 {PRIVATE_KEY_FILE_NAME}.pem

接続コマンド例

ssh ec2-user@{PUBLIC_IP} -i ~/.ssh/{PRIVATE_KEY_FILE_NAME}.pem

04) Amazon Linux 2023 環境設定

SSH でインスタンスに入って、以下順番に対応していきます。

依存ライブラリのインストール

sudo dnf -y install \
  git gcc zlib-devel bzip2-devel readline-devel \
  sqlite sqlite-devel \
  openssl-devel tk-devel libffi-devel xz-devel

Python (pyenv) セットアップ

pyenv のインストールします。pyenvは、複数のPythonバージョンを簡単に管理するためのツールです。これを使うと、システムにインストールされたPythonバージョンに依存することなく、プロジェクトごとに異なるPythonバージョンを利用することができます。pyenvのようなランタイムのバージョンを切り替えるツールを入れておくと以下のような観点で便利です。

  1. Lambda のランタイムとちょうど合わせてテストしたい時に便利
  2. python だと特に3.8 でしか動かないパッケージもあれば、3.11 で開発するプロジェクトもあるので、切り替えができると便利。Node も Lambda では v20 までだけど、フロントエンドだと v22 使いたくなったりする。もしくは古いプロジェクトだといまだに v16 でしか動かなくてメンテ必要な場合もある(v16 -> v18 で互換性問題が一番多い)
  3. ポータブルでインストーラーなど不要で、簡単に削除したりインストールしたりできて環境が汚れにくい
# git clone で入れるのが最も手軽でおすすめです。
git clone <https://github.com/pyenv/pyenv.git> ~/.pyenv

pyenv にパスを通します。

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc

source ~/.bashrc

最後にPythonをインストールして、pyenvに登録を行います。

# 数分ほどかかります。
pyenv install 3.11

pyenv global 3.11.9
python --version
pip --version

Node.js (nodenv) セットアップ

Pythonプロジェクトとはいえ、Node.jsを今後ツールとして使うケースも出てくる可能性があるので、Node.jsもインストールしていきます。まずはnodenv をインストールします。これはpyenvのNode.js版のツールです。ローカルで使うNode.jsのバージョンを簡単に切り替えることが出来ます。

git clone <https://github.com/nodenv/nodenv.git> ~/.nodenv

nodenv にパスを通します。

echo 'export PATH="$HOME/.nodenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(nodenv init - bash)"' >> ~/.bashrc

source ~/.bashrc

Node.js をインストールして、nodeenvに登録を行います。

git clone \
  https://github.com/nodenv/node-build.git \
  "$(nodenv root)"/plugins/node-build

curl -fsSL \
  https://github.com/nodenv/nodenv-installer/raw/main/bin/nodenv-doctor | bash

# インストール可能なバージョン確認
nodenv install --list

# v20など、LTSの最新バージョンをリストの中から確認
nodenv install 20.17.0
nodenv global 20.17.0

node -v
npm -v

まとめ

以上が弊社でよく行っているAmazon Linux 2023を使ったPythonの開発環境設定手順になります。このガイドでは開発用のEC2の設定からPythonやNode.jsのインストール及び必要なツールについてのインストール方法について解説しました。特にAIや機械学習関連のプロジェクトにおいては、最新のツールやライブラリを利用しながら、安定した環境を整えることが重要です。今回の手順を参考にして、効率的で安全な開発環境を構築するようにしましょう。

Written by
CEO

堀家 隆宏

Takahiro Horike

  • Facebook->
  • X->
  • GitHub->

Share

Facebook->X->
Back
to list
<-