はじめに
AWS の Cloud9 は、マネジメントコンソールからそのまま開けるブラウザ IDE です。ローカルに何も入れずにクラウド上の環境で開発できますが、2024年7月に新規利用の受付を終了しています。
Azure で同じようにコンソールから開ける IDE がないか探したところ、Azure Machine Learning(以下 Azure ML)のコンピューティング インスタンス(Azure 上の VM)に、ブラウザ版の VS Code(VS Code for the Web)で接続する機能がありました。
作業はすべて Azure ポータルと Azure ML Studio の GUI 操作です。
参考:Azure Machine Learning と統合された Visual Studio Code を開始する(Microsoft Learn)
構成
画面だけブラウザ(vscode.dev)で動いて、コードの実行やターミナルは全部 Azure 上の VM で動く、という構成です。
| 項目 | 設定値 |
|---|---|
| リージョン | Japan East |
| リソースグループ | rg-aml-vscode-demo |
| Azure ML ワークスペース | mlw-vscode-demo |
| コンテナー レジストリ | なし |
| コンピューティング インスタンス | ci-vscode-demo |
| VM サイズ |
Standard_F2s_v2(2コア / 4GB、約 $0.11/時間) |
| アイドル時の自動シャットダウン | 30分 |
VM サイズは、作成画面で「すべてのオプションから選択」を開いてコストの安い順に並べて選びました。いちばん安いのは Standard_DS1_v2(1コア / 3.5GB、約 $0.10/時間)でしたが、VS Code Server と Python を同時に動かすには 1コア・3.5GB だと心もとないので、ほぼ同じ値段で 2コア / 4GB の Standard_F2s_v2 にしました。後で free -h を見たら、何もしていない状態で 2.3GB 使っていました。3.5GB でも動くとは思いますが、余裕はあまりなさそうです(価格は作業時点の表示です)。
手順
1. リソースグループを作成する
Azure ポータルの「リソース グループ」から「+作成」を押し、名前 rg-aml-vscode-demo、リージョン Japan East で作成します。
2. Azure Machine Learning ワークスペースを作成する
ポータル上部の検索で「Azure Machine Learning」を開き、「+作成」から新しいワークスペースを作ります。
- リソース グループ:
rg-aml-vscode-demo - 名前:
mlw-vscode-demo - リージョン:
Japan East - ストレージ アカウント / キー コンテナー / Application Insights:自動で入る名前のまま
- コンテナー レジストリ:なし
コンテナー レジストリは、カスタム環境のイメージをビルドするときなどに必要になるものです。今回は IDE を使いたいだけなので「なし」にしました。ネットワークなどはデフォルト(パブリックアクセス)のまま「確認および作成」→「作成」です。
デプロイは2〜3分で終わりました。
「リソースに移動」→「Launch studio」で Azure ML Studio を開きます。
3. コンピューティング インスタンスを作成する
Studio の左メニュー「コンピューティング」→「コンピューティング インスタンス」タブ→「+新規」です。
必須の設定
コンピューティング名を ci-vscode-demo にして、仮想マシンの種類は「CPU」、サイズは前述の Standard_F2s_v2 を選びます。
スケジュール設定(アイドル時のシャットダウン)
「次へ」で「スケジュール設定」に進みます。「アイドリングからのシャットダウンを有効にする」はオンになっていて、初期値は 60 分でした。VM は起動している間ずっと課金されるので、閉じ忘れ対策として 30 分に縮めます。
ここで少しハマりました。数値の欄にキーボードで「30」と打っても値が変わらず、欄の右にある ▲▼ ボタンを押して 1 ずつ下げてようやく 30 にできました。うまく入らないときは ▲▼ ボタンを試してみてください。
確認して作成
セキュリティ・アプリケーション・タグはデフォルトのまま「確認と作成」へ進み、自動シャットダウンが「非アクティブ状態の 30 minutes の後」になっているのを確認してから「作成」を押します。
「作成中」から「実行中」になるまで約6分かかりました。実行中になると「アプリケーション」列に JupyterLab / Jupyter / VS Code (Web) のリンクが出ます。
4. VS Code (Web) を起動する
「アプリケーション」列の「VS Code (Web)」を押します。ここから実際に使えるようになるまでに、確認ダイアログが何回か出ました。
まず「常に信頼されたコードを使用する」という注意事項。「はい、理解しています」にチェックして「続行」です。
新しいタブで vscode.dev が開き、拡張機能「Azure Machine Learning - Remote」がサインインしたいと言ってくるので「許可」を押します。
続いてアカウントの選択画面が出るので、Studio にサインインしているのと同じアカウントを選びました。コンピューティング インスタンスは作成したユーザーに割り当てられるので、別のアカウントだと接続できないはずです。共有はできないようなので、チームで使う場合は人数分作ることになりそうです。
サインインが終わると、右下に「Initializing VS Code server on ci-vscode-demo」と出て、VM 側に VS Code Server が自動でインストールされます。初回はここで1分ほど待ちました。左下に Azure ML: ci-vscode-demo と出れば接続完了です。
ドキュメントによると、エクスプローラーに出ている code フォルダーはワークスペースのストレージ(Azure Files)上にあり、Studio の「Notebooks」と同じファイルが見えるそうです。VM を削除してもファイルは残ります。
5. 動かしてみる
左上のメニュー(≡)→「ターミナル」→「新しいターミナル」を開くと、今度は「このフォルダー内のファイルの作成者を信頼しますか?」と聞かれるので「フォルダーを信頼して続行」を押します。
ターミナルで VM の情報を見てみます。
hostname; python --version; nproc; free -h
ci-vscode-demo
Python 3.10.0
2
total used free shared buff/cache available
Mem: 3.8Gi 2.3Gi 375Mi 3.0Mi 1.2Gi 1.2Gi
Swap: 3.8Gi 29Mi 3.8Gi
ホスト名が ci-vscode-demo、2コア / 3.8GB なので、ちゃんと F2s_v2 の VM 上で動いています。メモリは何もしていない状態で 2.3GB 使っていました。プロンプトに出ている conda 環境の名前は azureml_py38 なのに、中身は Python 3.10 だったのは少し意外でした。
ついでにエディタで hello.py を書いて実行してみます。
import platform
print("Hello from Azure ML compute instance!")
print(platform.node(), platform.python_version())
$ python hello.py
Hello from Azure ML compute instance!
ci-vscode-demo 3.10.0
なお、ターミナルにコマンドを貼り付けようとしたら、ブラウザから「クリップボードの読み取り」の許可を求められました。今回はブロックして、コマンドは手で打ちました。
Cloud9 と比べてみて
コンソールのボタンから IDE が開き、ローカルに何も入れなくていい点は Cloud9 と同じです。アイドルシャットダウンも、Cloud9 の自動休止とほぼ同じ役割です。
違うのは準備の重さです。IDE が欲しいだけでも、ML ワークスペースを作るとストレージ・Key Vault・Application Insights の3つが一緒に付いてきます。また、VS Code (Web) のボタンを押してから使えるまでに、確認ダイアログが4回と VS Code Server の初期化(約1分)がありました。
コストと後片付け
| リソース | 課金 |
|---|---|
| コンピューティング インスタンス | 起動している間は VM 料金がかかる(F2s_v2 で約 $0.11/時間)。停止中は VM 料金はかからないが、OS ディスクやパブリック IP などの料金は引き続きかかる |
| ストレージ / Key Vault / Application Insights | 使った分だけの従量課金 |
アイドル 30 分で止まる設定にしたので、閉じ忘れても止まるはずです(自動停止の動きまでは今回確認していません。何をアイドルとみなすかの条件はドキュメントを参照してください)。すぐ止めたいときは Studio の「コンピューティング」画面で「停止」を押します。全部片付けるなら、リソースグループ rg-aml-vscode-demo ごと削除すれば関連リソースもまとめて消えます。
おわりに
Azure ML のコンピューティング インスタンスと VS Code for the Web で、Cloud9 のようにコンソールから開けるブラウザ IDE を作れました。アイドルシャットダウンを設定しておけば、閉じ忘れ対策にもなります。
ただ、IDE のためだけに ML ワークスペースごと作るのは、やはり少し重いと感じました。


















