話題の本「AmazonBedrock生成AIアプリ開発入門」のためにローカル環境開発してみた

どうも、アスカです。今回は話題の本、「AmazonBedrock生成AIアプリ開発入門」のハンズオンを進めて行くにあたり、ローカルの開発環境を整えていきます。Cloud9を使えば楽なんですが、環境から自分で作らないとやった気にならないんですよね...

# 前提
- ユーザはIAM Identity Centerのワークフォースユーザを利用
- Python環境はすでにある環境をベースに作成する
- Windowsです

自分がローカルで使ってきた環境をベースに進めていきます。

# 必要なもの
- Git...サンプルコードのクローンのため
- Python... サンプルコード実行のため(SDKも必要)
- AWS CLI...ローカルでAWSの権限をセットアップするため

ひとつひとつ、順番に確認していきます。

# Git
Gitのコマンドを使えるようになっているか、確認しましょう。
正常にインストール出来ていれば、以下のようにバージョン情報が表示されます。
```
 C:\...\YourPJ> git --version
git version 2.43.0.windows.1
```
表示されなければ、以下のサイトを参考にGitをインストールしてください。
[Gitのインストール](https://git-scm.com/book/ja/v2/%E4%BD%BF%E3%81%84%E5%A7%8B%E3%82%81%E3%82%8B-Git%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)
早速、今回ハンズオンを行いたいフォルダでサンプルコードをローカルにダウンロードしてきます。この時、本p5記載のサンプルコードリポジトリのURLを利用します。
```
PS C:\...\YourPJ> git clone <URL>
```
YourPJ配下にbedrock-bookというフォルダが作成され、サンプルコードをダウンロードする事が出来ました。

## Python
次に、bedrock-bookに移動してPythonの環境を確認していきます。ここでは最終的にはpyenv+poetryを使って
- Python 3.10.0
- boto3 1.34.87
の環境を作成しました。
まず現状のPython環境を確認してみます。
```
PS C:\..\YourPJ>cd ./bedrock-book
PS C:\...\bedrock-book> python --version
 Python
```

python --versionコマンドによってグローバルで設定されているpythonのバージョンが表示されます。
ぼくの場合、Pythonは入っているのですが、何故かバージョンが分かりませんでした笑
今回はハンズオン用にローカルのPython環境を作っていきたいと思います。

確か環境管理にはpoetryを使っていた気がします。poetryのコマンドが使えるか確認してみます。
```
poetry -v
```
正常にインストールされていれば、バージョンが確認出来ます。今回の場合は
Poetry (version 1.5.1)
でした。
本のPythonバージョンは3.9.16ですが、
```
PS C:\...\bedrock-book>pyenv install --list
```
で確認すると、ちょうど良いバージョンがないので3.10.0で設定していきます。
(だめだったら、その時に調整...)
```
 C:\...\bedrock-book>pyenv install 3.10.0
```
ここで、仮想環境を作り、初期化していきます。
```
PS C:\...\bedrock-book>pyenv local 3.10.0
PS C:\...\bedrock-book>poetry init
```

これでローカルのバージョンは3.10.0になりました。
```
PS C:\...\bedrock-book> python --version
Python 3.10.0
```
とりあえずboto3だけはインストールしておきます。
```
PS C:\...\bedrock-book>poetry add boto3==1.34.87
```
boto3はPythonのAWS SDKであり、書籍では1.34.87が使用されています。
## AWS CLI
まずはAWS CLIのバージョンを確認してみます。
```
PS C:\...\bedrock-book>aws --version
aws-cli/2.17.10 Python/3.11.8 Windows/10 exe/AMD64
```

ここではPythonのバージョンが使用するPythonバージョンを越えていれば良いと思いますが、必要に応じて最新バージョンに更新してください。

## 認証情報をセットアップする。
IAM Identity Centerのユーザを使用して、認証情報をセットアップします。
```
PS C:\...\bedrock-book>aws configure sso
```
のコマンドからガイダンスに従ってユーザ認証を行います。
※今回はAWS CLIデフォルトのリージョンを東京で設定してしまいましたが、必要に応じて変更してください。

## コマンド、スクリプトの実行
最後にスクリプトとコマンドを実行出来るか確認してみます。
```
PS C:\...\bedrock-book>cd chapter2
PS C:\...\chpter2>poetry run .\1_list-models.py
```
これで。使用可能なモデルのリストが表示されました。
一応、CLIコマンドも実行してみます。
```
PS C:\...\bedrock-book>aws bedrock list-foundation-models
```
これを実行すると、JSON形式で使用可能なモデルが出力されました。
```:モデル出力例
{
    "modelSummaries": [
        {
            "modelArn": "arn:aws:bedrock:ap-northeast-1::foundation-model/amazon.titan-text-express-v1:0:8k",
            "modelId": "amazon.titan-text-express-v1:0:8k",
            "modelName": "Titan Text G1 - Express",
            "providerName": "Amazon",
            "inputModalities": [
                "TEXT"
            ],
            "outputModalities": [
                "TEXT"
            ],
            "responseStreamingSupported": true,
            "customizationsSupported": [],
            "inferenceTypesSupported": [],
            "modelLifecycle": {
                "status": "ACTIVE"
            }
        },
        {
        ...
        }
        ...
        ]
}
```

# まとめ
本ではCloud9で開発しているBedrockのハンズオン実行環境をローカルに開発してみました。開発環境まで作らないと出来た気にならない初学者さんの参考になれば嬉しいです。

# 参考
- [Gitのインストール](https://git-scm.com/book/ja/v2/%E4%BD%BF%E3%81%84%E5%A7%8B%E3%82%81%E3%82%8B-Git%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)
- [Poetry使い方](https://python-poetry.org/docs/basic-usage/)
- [Python環境構築[Pyenv+Poetry]](https://zenn.dev/zenizeni/books/a64578f98450c2/viewer/c6af80)
- [AWS CLIのインストールまたは更新](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html)
- [IAM Identity CenterユーザのCLI認証設定](https://dev.classmethod.jp/articles/aws-cli-for-iam-identity-center-sso/)