AWS Cloud9が突然、新規利用不可に？ 代替策「SageMaker Studio コードエディタ」の利用手順

# 背景

2024年7月29日、日本時間20時ごろからAWS Cloud9の新規利用に制限がかかるようになりました。

- 新規作成したAWSアカウントや、これまでCloud9を利用していなかったAWSアカウントで、Cloud9コンソールにアクセスできなくなっている模様
- AWS Organizations配下に作成した新規AWSアカウントも同様の状況

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/c6d5c45f-b0d9-c583-f87f-bebb85507896.png)

当初、本件に関するAWSからの公式アナウンスはなく、数日前から「Cloud9から類似環境への移行方法」を紹介する意味深なブログが投稿されていたのみでした。

https://aws.amazon.com/jp/blogs/news/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/

そして7/31にようやく、AWSのチーフエバンジェリストJeffさんより以下のアナウンスが出ています。

https://x.com/jeffbarr/status/1818461689920344321

過去このように唐突なサービス利用制限はAWSであまり聞かなかったため、AWSコミュニティも大変ざわついています。とても残念ですね。

拙著「Amazon Bedrock 生成AIアプリ開発入門」でもCloud9を例としたハンズオン手順を掲載していたため、急きょ代替策をご紹介します。

https://www.sbcr.jp/product/4815626440/

（アドバイスくださった @ren8k さん、ありがとうございます🙇‍♂️）


# 利用手順

Cloud9の代替として「Amazon SageMaker Studio コードエディタ」を利用します。

https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/code-editor.html

### 前提条件

- 新規AWSアカウントを作成済みであること（書籍の付録1に掲載）
- 作業用のIAMユーザーを作成済みであること（書籍の付録2に掲載）
- VPCを作成済みであること（書籍の付録3に掲載）

下記内容は、書籍の「付録4」に相当する代替手順となります。

### 1. SageMakerドメインの作成

AWSマネジメントコンソールのトップ画面より「Amazon SageMaker」を検索してクリック

![スクリーンショット 2024-07-30 1.53.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/d93b4c5e-5eab-00f4-7e42-66e60f3d89ca.png)

左サイドバーの「ドメイン」をクリックし、右側の「ドメインを作成」をクリック

![スクリーンショット 2024-07-30 1.54.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/bba98bf1-c1d7-fbc9-77b1-54973b337bad.png)

「シングルユーザー向けの設定」を選択し、「設定」をクリック

![スクリーンショット 2024-07-30 1.55.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/ed2e6a3f-9263-4a5a-ba19-14e6a2e49afc.png)

上部の青色のバーが緑色に変化し、ドメインの作成完了メッセージが表示されるまで数分待つ

![スクリーンショット 2024-07-30 1.56.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/f65114ec-5e31-5539-8489-08b15f148d78.png)

ここで表示されている「認証と認可」セクション内の「デフォルトの実行ロール」に記載されているIAMロール名をメモしておいてください。後続のIAMロール設定時に必要となります。

- `AmazonSageMaker-ExecutionRole-<15桁の文字列>`

### 2. SageMaker Studio Code Editorの起動

その後、「ユーザープロファイル」タブをクリックし、右下の「起動」プルダウンから「Studio」をクリック

![スクリーンショット 2024-07-30 2.00.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/8831f2a6-6511-6220-8dc6-56b27f23dc2b.png)

「Skip Tour for now」をクリックして、ポップアップを閉じる

![スクリーンショット 2024-07-30 2.00.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/95127722-7c3b-e192-49b8-6f43e438539a.png)

画面左上の「Code Editor」をクリック

![スクリーンショット 2024-07-30 2.02.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/54f06cc4-5576-4dce-75ce-ca43f70092cb.png)

画面右上の「Create Code Editor space」をクリック

![スクリーンショット 2024-07-30 2.03.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/9042cb60-bc98-3f42-2c66-52f4ecbdea7d.png)

「Name」欄に `handson` など任意の名前を付け、「Create space」をクリック

![スクリーンショット 2024-07-30 2.04.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/e531ea36-226c-6322-61dd-f3a2225fe69e.png)

数秒待機すると環境が起動可能となるため、「Run space」をクリック

:::note info
利用するマシンイメージは、デフォルトの `SageMaker Distribution 1.9` の前提で本記事を記載しています。
:::

![スクリーンショット 2024-07-30 2.05.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/2d522305-ad97-e3e8-7db1-65775f067745.png)

数秒待機すると、画面下側に環境の作成完了メッセージが表示されるので、「Open Code Editor」をクリック

![スクリーンショット 2024-07-30 2.06.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/cea4b62a-814b-9938-8339-d1a3f926ea8d.png)

新しいタブで開発環境が開く

![スクリーンショット 2024-07-30 2.08.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/ab2fefc0-33ec-c8b3-0092-2b484bfb6fc9.png)

:::note
上記のようにコードエディタの初回起動時、開いているタブが環境によって異なることがあります。後続の操作に影響ありませんので、そのまま次の手順へお進みください。
:::


### 3. 開発環境の初期設定

画面左上、上から2つ目の「ファイル」アイコンをクリックし、展開された左サイドバーから「Open Folder」をクリック。

その後、画面上部に表示される「Open Folder」ポップアップ右側の「OK」をクリック

![スクリーンショット 2024-07-30 2.10.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/67438278-99c5-31c0-a147-5dea0ea5c820.png)

ポップアップの「Trust the authors...（以下略）」にチェックを入れ、「Yes, I trust the authors」をクリック

![スクリーンショット 2024-07-30 2.11.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/726c7434-74b6-9e8c-e9fd-2aeaa741ec8b.png)

画面右上、左から2つ目の「下ペイン表示」アイコンをクリックすると、画面下部にターミナルが起動する

![スクリーンショット 2024-07-30 2.13.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/f8cf0f50-ae04-c4ed-7074-6787d8e682db.png)

これで、AWS Cloud9を起動した直後と同等の開発環境が準備できました。



### 4. IAMロールへの権限追加

コードエディタの初期設定では権限が限定されているため、書籍「[Amazon Bedrock 生成AIアプリ開発入門](https://www.sbcr.jp/product/4815626440/)」のハンズオンを実施される方は、事前にIAMロールへのポリシー追加を実施ください。

AWSマネジメントコンソール画面上部の検索バーより、「IAM」を探してアクセス

![スクリーンショット 2024-07-30 14.37.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/5dd8c636-7d74-3f80-def4-a4c7e791544e.png)

左側メニューの「ロール」をクリックし、前述の手順1の最後でメモした「SageMaker Studio用のIAMロール名」を右側のポリシー検索ボックスに入力して、表示されるIAMロールをクリック

![スクリーンショット 2024-07-30 14.51.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/318ede0d-2d76-fd49-fb24-1bdf6d4fbc3e.png)

画面右下の「許可を追加」プルダウンから「ポリシーをアタッチ」をクリック

![スクリーンショット 2024-07-30 14.53.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/d962e00c-ebbc-b1af-388d-30dc167d567c.png)

「その他の許可ポリシー」から以下のポリシーを検索し、4件ともにチェックを入れた状態で「許可を追加」をクリック

- AmazonBedrockFullAccess
- AWSLambda_FullAccess
- AmazonDynamoDBFullAccess
- AWSStepFunctionsFullAccess

![スクリーンショット 2024-07-30 14.55.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/202cd22c-d5f9-765a-a659-0ae525836852.png)

これで、コードエディタからハンズオンに必要なAWSサービスの操作（Bedrock、Lambdaなど）を実行できるようになります。

# 主な操作方法

### Cloud9と異なる部分

新規ファイルを作成する場合は、画面上部のタブバーをクリックして「New Text File」をクリック

![スクリーンショット 2024-07-30 2.14.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/05ce71a3-0d50-7e5b-7a75-23cd92c56057.png)

作成したファイルを保存する場合は、`Command + s`（Windowsの場合は `Ctrl + s`）を押し、画面上部の「Save As」ポップアップ内に保存したいパス＋ファイル名を入力して「OK」をクリック

![スクリーンショット 2024-07-30 2.24.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/28391c81-c2ac-c2af-ccb6-1c322c5b59ac.png)

ファイルをアップロードする場合は、左サイドバーの空き領域を右クリックして「Upload...」をクリック

![スクリーンショット 2024-07-30 2.16.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/593b4860-b7f2-2e7b-f356-da8f1575d91e.png)

### Streamlitアプリの起動＆プレビュー方法

Streamlitの実行コマンドは以下です。画面下部のターミナルで実行します

:::note info
Cloud9利用時に付与していた `--server.port 8080` オプションは省いてください。
:::

```bash: ターミナル
streamlit run <ファイル名>
```

streamlitが実行され、URLがターミナルに表示されたら、ターミナル右上の「＋」ボタンをクリック

![スクリーンショット 2024-07-30 2.26.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/d666a370-12e5-d094-ed07-deeaaaa2a87d.png)

新たに起動されたターミナルで以下コマンドを実行

:::note info
Pinggyという外部サービスを利用してURLを一時公開しています。
:::

```bash: ターミナル
ssh -p 443 -R0:localhost:8501 a.pinggy.io
```

ブラウザからクリップボードのアクセス許可ポップアップが表示された場合は「許可する」をクリック

![スクリーンショット 2024-07-30 2.20.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/3a530391-932e-65ce-b8cf-030b5fc6ee2d.png)

ターミナルで `Are you sure you want to continue connecting (yes/no/[fingerprint])?` というメッセージが表示されたら `yes` と入力してEnterキーを押す

![スクリーンショット 2024-07-30 2.30.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/615d834f-9020-876a-14e3-ceae70e6661e.png)

表示されるURLのうち下側（`https://` で始まる方）をコピーして、ブラウザの新しいタブで開き、「Enter site」をクリック

![スクリーンショット 2024-07-30 2.33.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/84d6b483-a600-0a0c-c555-f703cf6935d3.png)

Streamlitアプリへアクセス完了（これがCloud9で言う「プレビュー」を開いた画面と同等になります）

![スクリーンショット 2024-07-30 2.34.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/ae296f6d-aaa2-9435-bb41-249cf288f49e.png)

Streamlitアプリの実行を停止する際は、1つ目のターミナルに戻って `Crtl + C` を押せばOKです。

:::note info
そのままファイルを変えて再実行する場合は、`streamlit run <ファイル名>` を再度実行すれば、先ほどPinggyへアクセスしているブラウザのタブを更新するだけで、新しいファイルの実行画面を表示することができます。
:::

ハンズオンが終了しPinggyも停止したいときは、2つ目のターミナルで `Crtl + C` を押します。


### コードエディタ環境の停止方法

SageMaker Studioのコードエディタ用コンソールより、「Stop」ボタンをクリックするとインスタンスの停止が可能です。

![スクリーンショット 2024-07-30 14.22.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/8331d0cb-9535-aa4c-2868-980c7317838e.png)


# 注意点

### Pythonバージョン

コードエディタのPythonバージョンは `3.10.14` となります。Cloud9のもの（`3.9.16`）と少し異なりますので、ハンズオンの動作が変わる可能性があります。

また、`pip install`でライブラリのインストール時にもバージョンの依存関係エラーが出力される可能性があります。Pythonのバージョンを3.9.16に合わせる場合は、ターミナルで以下のコマンドを実行してください。

```zsh: ターミナル
conda init
conda create -n handson python=3.9.16 --yes

echo "conda activate handson" >> ~/.bashrc

source ~/.bashrc 
```

### 追加でインストールが必要なソフトウェア

現時点で、Cloud9との差分として以下のソフトウェアが不足していることを確認しています。エラー発生の際は、以下コマンドでインストールを実施してからハンズオンを続行ください。

- zip

```
sudo apt install -y zip
```

### 利用料金

コードエディタ用の最小スペックのインスタンス `ml.t3.medium` の利用料金は、バージニア北部リージョンの場合「1時間あたり0.05 USドル」となっています。

![スクリーンショット 2024-07-30 3.03.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/05d909d5-5a7c-badb-f259-17d9afae479d.png)

https://aws.amazon.com/jp/sagemaker/pricing/

Cloud9と異なり、恒常的に無料利用枠となるインスタンスが存在しないため、ハンズオンの終了後はインスタンスを忘れず停止もしくは削除しましょう。

:::note info
SageMakerの「ドメイン」自体に対する課金は発生しません。
:::

### 外部サービスの利用

今回、Streamlitのプレビュー画面をWebブラウザから確認できるよう、Pinggyというサービスを用いて外部からアクセス可能なURLを一時的に作成しています。

https://pinggy.io/

セキュリティ上、URLは第三者へ公開しないようお気をつけください。また、ハンズオンの動作確認後は、お早めに`Ctrl + c` でターミナルからPinggyを動作停止ください。料金は無料の範囲内で利用できます。


# 書籍ハンズオンの各章補足

書籍「[Amazon Bedrock 生成AIアプリ開発入門](https://www.sbcr.jp/product/4815626440/)」においては、著者陣にて各章のハンズオンを再検証中です。

本Qiita記事、および[公式GitHubリポジトリ](https://github.com/minorun365/bedrock-book)のREADMEを随時更新しますので、適時チェックくださいますと幸いです。

### 第3章（開発手法）

コードエディタにインストールされているデフォルトのPythonバージョンが変わるため、以下を読み替えのうえ実施ください。

- Lambdaレイヤーの作成コマンドにて、`python3.9` を指定している部分を `python3.10` に変更する（P.171）
- Lambda関数の作成時に、ランタイムとして `Python 3.9` の代わりに `Python 3.10` を指定する（P.173）

### 第5章（エージェント）

第3章と同様、Lambdaレイヤーに関する箇所を以下のとおり読み替えください。

- Lambdaレイヤーの作成時、「互換性のあるランタイム」として `Python 3.9` の代わりに `Python 3.10` を指定する（P.301）
- Lambda関数の作成時に、ランタイムとして `Python 3.9` の代わりに `Python 3.10` を指定する（P.313）



# よくある質問

### 起動したアプリにアクセスすると「このページは動作していません」と表示される

以下の画面が表示される場合は、Streamlit起動時にCloud9用のポート指定オプション `--server.port 8080` が残っている可能性があります。オプションを削除して再度お試しください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/4de3b75d-96e7-f5da-c20c-2842c0910331.png)