0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AzureでAWS Cloud9みたいなブラウザIDEを作ってみた(Azure ML × VS Code for the Web)

0
Posted at

はじめに

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 を開きます。

ワークスペースの概要

Azure ML Studio のホーム

3. コンピューティング インスタンスを作成する

Studio の左メニュー「コンピューティング」→「コンピューティング インスタンス」タブ→「+新規」です。

必須の設定

コンピューティング名を ci-vscode-demo にして、仮想マシンの種類は「CPU」、サイズは前述の Standard_F2s_v2 を選びます。

必須の設定

スケジュール設定(アイドル時のシャットダウン)

「次へ」で「スケジュール設定」に進みます。「アイドリングからのシャットダウンを有効にする」はオンになっていて、初期値は 60 分でした。VM は起動している間ずっと課金されるので、閉じ忘れ対策として 30 分に縮めます。

ここで少しハマりました。数値の欄にキーボードで「30」と打っても値が変わらず、欄の右にある ▲▼ ボタンを押して 1 ずつ下げてようやく 30 にできました。うまく入らないときは ▲▼ ボタンを試してみてください。

アイドルシャットダウン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 と出れば接続完了です。

VS Code (Web) に接続完了

ドキュメントによると、エクスプローラーに出ている 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 を書いて実行してみます。

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

ブラウザのVS Codeで実行

なお、ターミナルにコマンドを貼り付けようとしたら、ブラウザから「クリップボードの読み取り」の許可を求められました。今回はブロックして、コマンドは手で打ちました。

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 ワークスペースごと作るのは、やはり少し重いと感じました。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?