AWS CloudShellをCloud9の代わりでBedrockの学習に使えるか?

## 前書き
ご存知の通り、2024年7月29日からCloud9がサービス終了しました。
![91A93842-19F2-4A3A-9D77-7B91135D0A32.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/b25a6ca4-ef40-4772-c2da-efbe7546602b.jpeg)

最近、Cloud9を使ってBedRockの学習をしている筆者にとって、まさに青天の霹靂です。
いくつか代替案を探してみたところ、`AWS CloudShell`にたどり着きました。

:::note warn
注意
2024年8月20日時点で使用していますが、これがAWS CloudShellの正しい使い方かは確信が持てません。慎重に使いましょう。
:::

## やり方

セットアップの手順は、以下の記事に詳しく書かれています。

https://qiita.com/moritalous/items/708d56d5c10c5832d169

ここでは、必要な作業の一部を抜粋してご紹介します。

- AWS CloudShellを開き

![3E0CECEA-2B0F-4C08-B3C9-882D92AB63D3_1_201_a.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/84ba5c81-629f-4dd8-18db-8c7ddcbd9293.jpeg)


-  VSCodeをインストール

```shell
$ curl -L "https://code.visualstudio.com/sha/download?build=stable&os=cli-alpine-x64" -o vscode_cli_alpine_x64_cli.tar.gz
$ tar zxvf vscode_cli_alpine_x64_cli.tar.gz
$ mkdir -p ~/.local/bin
$ mv code ~/.local/bin/
```

- VSCodeをサーバーとして起動する

```shell
$ code serve-web --without-connection-token --accept-server-license-terms
*
* Visual Studio Code Server
*
* By using the software, you agree to
* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and
* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).
*
Web UI available at http://127.0.0.1:8000
```

- 別のTabを開きPinggyを使い、8000番ポートに一時的なパブリックURLを付与する

![9C17EB18-F8FD-4D3F-ADB5-C0D66480F5D0_4_5005_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/a630cf57-4cc3-d194-3875-74b7756d280d.jpeg)
 - 質問にはyesと答えましょう
![B6D2C273-40AC-4338-9825-8B53506D1633_4_5005_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/b014c492-fa08-b93b-c3a9-35d27a4dc29b.jpeg)
- その後urlが表示されます、httpsの方を開きましょう。![18AB29CF-769E-4C8E-A04E-8B2A48166C5B.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/ead14322-4cc3-5bd9-353d-4ad5d713a242.jpeg)
「Enter site」をクリックしましょう、しばらくした、VSCodeが開きます。
![265B1395-A0E8-46C4-A288-51FB85DF1107.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/004c17e2-cdea-46ad-cb15-1de41b6cce01.jpeg)



VSCodeを開けたら、ターミナルを開き、必要なライブラリーを入れていきます。

```
pip install langchain==0.2.0 langchain-aws==0.1.4 langchain-community==0.2.0 
```

RedRockにmodelへのアクセス付与されてることを確認しましょう。
![64E7AA1E-1D26-467C-998D-7553A27B8534.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/e5520396-2e01-e66e-f7be-67d80c60464c.jpeg)

アクセス可能であれば、下記のコードを実行します。

```python:app.py
from langchain_aws import ChatBedrock
from langchain_core.messages import HumanMessage, SystemMessage

chat = ChatBedrock(
    model_id="anthropic.claude-3-sonnet-20240229-v1:0",
    model_kwargs={"max_tokens": 1000},
)

messages = [
    SystemMessage(content="あなたのタスクはユーザーの問題を日本語で明確に答えることです。"),
    HumanMessage(content="ビールの原材料教えて欲しい"),
]

response = chat.invoke(messages)
print(response.content)
```
動作に問題はなさそうですね。これでやっと勉強を進められます。

@moritalous さんに感謝です:clap_tone1:

![87D384D3-D70F-4278-8F64-FAA287FC7E45.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/668d9d4b-365b-cdc9-4f05-4e13395f6cc5.jpeg)


## Streamlit起動

開いてるVscodeでStreamlit起動します。
```
streamlit run main.py
```

しばらくしたら、8080番とかで起動してるメッセージが表示されます。
```
If cross origin resource sharing is required, please disable server.enableXsrfProtection.
            

Collecting usage statistics. To deactivate, set browser.gatherUsageStats to false.


  You can now view your Streamlit app in your browser.

  Local URL: http://localhost:8080
```
一旦CloudShellに戻り、Vscodeを開く際に行った作業を8080番に向け再度行います。
```
ssh -p 443 -R0:localhost:8080 a.pinggy.io
```

表示されたhttpsから始まるURLでStreamlitを開けるはずです。

## 参考文献

https://www.amazon.co.jp/Amazon-Bedrock-%E7%94%9F%E6%88%90AI%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA%E5%85%A5%E9%96%80-AWS%E6%B7%B1%E6%8E%98%E3%82%8A%E3%82%AC%E3%82%A4%E3%83%89-%E5%BE%A1%E7%94%B0/dp/4815626448

https://qiita.com/moritalous/items/708d56d5c10c5832d169