Azureにアプリケーションをデプロイしてみる

こちらのjs, DockerベースのPlaygroundをAzureにデプロイすることを第一目標とする。
https://github.com/cmc-labo/ares

Azureに慣れていないため、storage, gateway, lb, container, function, sql database, active directoryなど各種機能は使わず、Azure Virtual Machinesのみ

### 全体の流れ
1. Azureポータル(https://portal.azure.com/)にログインする
2. 仮想マシン(vm)を作成
3. ネットワークからインバウンドルールで3000ポートの開通
4. ターミナルからsshログイン
5. git, dockerなどをインストールしてgit cloneした後にdeploy

### 仮想マシンの作成
サブスクリプション: 自分のAzureアカウントに紐づく課金形態
リソースグループ: 作成済みの選択か新規作成
仮想マシン名: VMの名前
リージョン: 東日本(Japan East)など
可用性オプション: 単一インスタンス
イメージ: OSの種類 Ubuntu 22.04 LTSなど
サイズ: B1s(1vCPU, 1GB RAM)
認証タイプ: SSH公開キー
ユーザ名: azureuserなど
SSH公開キー
インバウンドポートの規則: 22, 80
※AWSでいうVPCやセキュリティグループの作成は不要

### インバウンドルールで3000ポートの開通
作成したvmの「ネットワーク」→「ネットワーク設定」
ソース: any
ソースポート範囲: *
宛先: Any
サービス: Custom
宛先ポート範囲: 3000
プロトコル: TCP
アクション: 許可
優先度: 1000
名前: AllowAnyCustom3000Inbound

### SSH接続
vm作成時に生成したpemファイルを使用する

$ ssh -i ~/hoge/azureuser.pem azureuser@${ip}

あとはアプリを動かすのに必要なもの(git, node, npm, Dockerなど)をインストールして起動

sudo apt update
sudo apt install git
git clone https://github.com/cmc-labo/playground.git
cd playground

sudo apt install nodejs npm
npm install

sudo apt install dos2unix
dos2unix rust-runner.sh
chmod +x rust-runner.sh
sudo docker build -t rust-runner .
node server.js

### Azure CLI の SSH接続 と mac の SSH接続の違いについて
Azure CLI のコマンド az vm ssh -n -g <リソースグループ> は、内部で Azure の管理 API を使って接続処理をしている。Azure CLI が一時的に接続をプロキシし、環境変数やシェルの種類などが微妙に異なることがある。特に、パスワードや sudo の対話的入力(プロンプト)に違和感が出る場合がある。端末割り当て(tty)が不完全になるケースなど。
mac やLinux端末があるなら、直接 ssh コマンドを使うのが確実

### AzureのVPC, SecurityGroupの概念
AzureでもVNet(仮想ネットワーク)の中に作られる(自走生成される)
subnetはVNetの中に複数作ることができる
SecurityGroupはAzureではNSG(ネットワークセキュリティグループ)で、自動的に割り当てられる
Internet Gateway はAzureは自動
Elastic IPは静的 or 動的の選択が可能
Route Table 明示的に作る場合は別途設定が必要

Azureは最小入力でVMをすぐ作れるという思想
AWSとの違いを意識しながら学ぶと整理しやすい