背景
2024年7月29日、日本時間20時ごろからAWS Cloud9の新規利用に制限がかかるようになりました。
- 新規作成したAWSアカウントや、これまでCloud9を利用していなかったAWSアカウントで、Cloud9コンソールにアクセスできなくなっている模様
- AWS Organizations配下に作成した新規AWSアカウントも同様の状況
当初、本件に関するAWSからの公式アナウンスはなく、数日前から「Cloud9から類似環境への移行方法」を紹介する意味深なブログが投稿されていたのみでした。
そして7/31にようやく、AWSのチーフエバンジェリストJeffさんより以下のアナウンスが出ています。
過去このように唐突なサービス利用制限はAWSであまり聞かなかったため、AWSコミュニティも大変ざわついています。とても残念ですね。
拙著「Amazon Bedrock 生成AIアプリ開発入門」でもCloud9を例としたハンズオン手順を掲載していたため、急きょ代替策をご紹介します。
(アドバイスくださった @ren8k さん、ありがとうございます🙇♂️)
利用手順
Cloud9の代替として「Amazon SageMaker Studio コードエディタ」を利用します。
前提条件
- 新規AWSアカウントを作成済みであること(書籍の付録1に掲載)
- 作業用のIAMユーザーを作成済みであること(書籍の付録2に掲載)
- VPCを作成済みであること(書籍の付録3に掲載)
下記内容は、書籍の「付録4」に相当する代替手順となります。
1. SageMakerドメインの作成
AWSマネジメントコンソールのトップ画面より「Amazon SageMaker」を検索してクリック
左サイドバーの「ドメイン」をクリックし、右側の「ドメインを作成」をクリック
「シングルユーザー向けの設定」を選択し、「設定」をクリック
上部の青色のバーが緑色に変化し、ドメインの作成完了メッセージが表示されるまで数分待つ
ここで表示されている「認証と認可」セクション内の「デフォルトの実行ロール」に記載されているIAMロール名をメモしておいてください。後続のIAMロール設定時に必要となります。
AmazonSageMaker-ExecutionRole-<15桁の文字列>
2. SageMaker Studio Code Editorの起動
その後、「ユーザープロファイル」タブをクリックし、右下の「起動」プルダウンから「Studio」をクリック
「Skip Tour for now」をクリックして、ポップアップを閉じる
画面左上の「Code Editor」をクリック
画面右上の「Create Code Editor space」をクリック
「Name」欄に handson
など任意の名前を付け、「Create space」をクリック
数秒待機すると環境が起動可能となるため、「Run space」をクリック
利用するマシンイメージは、デフォルトの SageMaker Distribution 1.9
の前提で本記事を記載しています。
数秒待機すると、画面下側に環境の作成完了メッセージが表示されるので、「Open Code Editor」をクリック
新しいタブで開発環境が開く
3. 開発環境の初期設定
画面左上、上から2つ目の「ファイル」アイコンをクリックし、展開された左サイドバーから「Open Folder」をクリック。
その後、画面上部に表示される「Open Folder」ポップアップ右側の「OK」をクリック
ポップアップの「Trust the authors...(以下略)」にチェックを入れ、「Yes, I trust the authors」をクリック
画面右上、左から2つ目の「下ペイン表示」アイコンをクリックすると、画面下部にターミナルが起動する
これで、AWS Cloud9を起動した直後と同等の開発環境が準備できました。
4. IAMロールへの権限追加
コードエディタの初期設定では権限が限定されているため、書籍「Amazon Bedrock 生成AIアプリ開発入門」のハンズオンを実施される方は、事前にIAMロールへのポリシー追加を実施ください。
AWSマネジメントコンソール画面上部の検索バーより、「IAM」を探してアクセス
左側メニューの「ロール」をクリックし、前述の手順1の最後でメモした「SageMaker Studio用のIAMロール名」を右側のポリシー検索ボックスに入力して、表示されるIAMロールをクリック
画面右下の「許可を追加」プルダウンから「ポリシーをアタッチ」をクリック
「その他の許可ポリシー」から以下のポリシーを検索し、4件ともにチェックを入れた状態で「許可を追加」をクリック
- AmazonBedrockFullAccess
- AWSLambda_FullAccess
- AmazonDynamoDBFullAccess
- AWSStepFunctionsFullAccess
これで、コードエディタからハンズオンに必要なAWSサービスの操作(Bedrock、Lambdaなど)を実行できるようになります。
主な操作方法
Cloud9と異なる部分
新規ファイルを作成する場合は、画面上部のタブバーをクリックして「New Text File」をクリック
作成したファイルを保存する場合は、Command + s
(Windowsの場合は Ctrl + s
)を押し、画面上部の「Save As」ポップアップ内に保存したいパス+ファイル名を入力して「OK」をクリック
ファイルをアップロードする場合は、左サイドバーの空き領域を右クリックして「Upload...」をクリック
Streamlitアプリの起動&プレビュー方法
Streamlitの実行コマンドは以下です。画面下部のターミナルで実行します
Cloud9利用時に付与していた --server.port 8080
オプションは省いてください。
streamlit run <ファイル名>
streamlitが実行され、URLがターミナルに表示されたら、ターミナル右上の「+」ボタンをクリック
新たに起動されたターミナルで以下コマンドを実行
Pinggyという外部サービスを利用してURLを一時公開しています。
ssh -p 443 -R0:localhost:8501 a.pinggy.io
ブラウザからクリップボードのアクセス許可ポップアップが表示された場合は「許可する」をクリック
ターミナルで Are you sure you want to continue connecting (yes/no/[fingerprint])?
というメッセージが表示されたら yes
と入力してEnterキーを押す
表示されるURLのうち下側(https://
で始まる方)をコピーして、ブラウザの新しいタブで開き、「Enter site」をクリック
Streamlitアプリへアクセス完了(これがCloud9で言う「プレビュー」を開いた画面と同等になります)
環境の停止方法
SageMaker Studioのコードエディタ用コンソールより、「Stop」ボタンをクリックするとインスタンスの停止が可能です。
注意点
Pythonバージョン
コードエディタのPythonバージョンは 3.10.14
となります。Cloud9のもの(3.9.16
)と少し異なりますので、ハンズオンの動作が変わる可能性があります。
また、pip install
でライブラリのインストール時にもバージョンの依存関係エラーが出力される可能性があります。Pythonのバージョンを3.9.16に合わせる場合は、ターミナルで以下のコマンドを実行してください。
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ドル」となっています。
Cloud9と異なり、恒常的に無料利用枠となるインスタンスが存在しないため、ハンズオンの終了後はインスタンスを忘れず停止もしくは削除しましょう。
SageMakerの「ドメイン」自体に対する課金は発生しません。
外部サービスの利用
今回、Streamlitのプレビュー画面をWebブラウザから確認できるよう、Pinggyというサービスを用いて外部からアクセス可能なURLを一時的に作成しています。
セキュリティ上、URLは第三者へ公開しないようお気をつけください。また、ハンズオンの動作確認後は、お早めにCtrl + c
でターミナルからPinggyを動作停止ください。料金は無料の範囲内で利用できます。
書籍ハンズオンの各章補足
書籍「Amazon Bedrock 生成AIアプリ開発入門」においては、著者陣にて各章のハンズオンを再検証中です。
本Qiita記事、および公式GitHubリポジトリの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
が残っている可能性があります。オプションを削除して再度お試しください。