Closed42

Virtual MachinesでマイクラSpigot鯖ホストしてAzure Functinosで起動/停止制御をしたい

にー兄さんにー兄さん

目的

マイクラ1.18がやりたいのでマルチ鯖をAzureで建てたい
前に建てたときはSpigotにMOD入れてやったのが便利だったので
それをやりつつ、Azure FunctionsにdiscordのSlash Command Interactionsを使用して
Discrodから仮想マシンの起動停止を制御したい

にー兄さんにー兄さん

@azure/arm-computeみたいな、ARM、つまりAzure Resource manager系のパッケージ、
テナントIDってやつ他色々なIDが必要らしく、これってどうやって取得するんだろうってなってます

と思ったらAzure Active Directoryに移動したらソッコー見つけた

にー兄さんにー兄さん

なんか「azure virtula machine start azure functions」とかで検索すると
どうやらPowershell Coreを使うのが良いらしい
やっぱりARM系のAzure SDKを使うにはどうしてもService Principalを作らなきゃいけんらしくて
そこが怪しい
Powershell使いたくないなぁ

にー兄さんにー兄さん

本当にVMで行くべきかちょっと悩んでいる
もともとContainer Instancesでやっていたけど、コンテナの場合起動すればマイクラが遊べた
しかしVMの場合起動した後にわざわざSSHで接続して起動コマンドをたたかなくちゃいけない

ここでめんどくさいのはコマンドではなくssh接続で
.pemファイルが必要だしssh接続可能なクライアント(powershellとかPuTTYとか)が必要
毎回これしてからマイクラで遊ぶのめんどくさいな。。。

にー兄さんにー兄さん

ここでContainer InstancesとVMの比較をしたい気がする

ACIはマイクラのコンテナがあればできるし、経験してるので安心
ただスペックをあまりいじりにくいのとスペックのわりにクレジットを食う

VMにすると料金は比較的安いイメージ
マイクラ鯖ならVMで建てる方が自然な感じもしなくもない
ただ起動がいちいちめんどくさい

にー兄さんにー兄さん

起動がめんどくさい問題、
Ubuntu起動時にマイクラ鯖のコマンドを実行するスクリプトを組めばよいのではないかと思ったので
そこの調査をする

にー兄さんにー兄さん

起動時にスクリプトを実行するのもありだけど、
なにやらVMのコマンドを外部から実行できる奴があるらしい
Azure CLIやPowershellから実行できるらしく、AzureFunctionsでもできるのではないか

https://docs.microsoft.com/ja-jp/azure/virtual-machines/linux/run-command#azure-cli

つまり、

  1. VMを起動
  2. VMにRunShellScriptを実行

という処理をPowerShell on Azure Functionsで実装すれば良さげ

にー兄さんにー兄さん

つまり、今欲しいのは

  • File Shareにマウントされている
  • spigotがインストールされている

そういうVMで

  • VMの起動ができる
  • VMにマイクラ鯖起動コマンドをたたける

PowershellのAzure Functionsと

  • discord slash commandに対応した

TypeScriptのAzure Functions

にー兄さんにー兄さん

Azure CLIでは
az vm start -g <resource group name> -n <resource name>
でVM起動ができる。stopのときにDNSの予約もしてくれている。おk

にー兄さんにー兄さん

deallocateコマンド、つまりVMのプロビジョニングを切ったとしてもDNS名は変わらなさそう
それだったら喜んでdeallocateしませう

そしてなんとaz vm stopでは割り当てを保持するが
Stop-AzVMは割り当てを解除する、ここは注意ポイントな気がする
https://docs.microsoft.com/ja-jp/azure/virtual-machines/windows/tutorial-manage-vm#stop-a-vm

にー兄さんにー兄さん

続けてVMにStorageAccountのFileShareをマウントした
例ではWindows仮想マシンに対してマウントする方法らしい、
自分は間違ってローカルのWindowsでこれやったので、いきなりネットワークドライブが追加されてビビった(あほ

今回はUbuntuで鯖を立てるので
VMにsshで接続したのちファイル共有>接続のときにLinuxを選択する

これを実行すると、/mnt以下にマウントされる
今回は/mnt/minecraftを作った。そしてssh上でsudo vim hello.txtでテキストを編集してみた
そしたらAzure Storage Explorerで見てみると、いい感じにマウントされてた

にー兄さんにー兄さん

実行してたら30分後くらいにgit系のエラーが出て止まった、ツライ
mergeがどうたらこうたらというエラーが出た

にー兄さんにー兄さん

そういえばgitとかインストールしてなかったけどいつの間にか使えるようになってたな

にー兄さんにー兄さん

翌日鯖を立ち上げたら/mntの中にminecraftはなかった、つらい
もしかしたらプロビジョニングを解除したらマウントされていたネットワークドライブは切断される......?
でもプロビジョニング解除しないと課金されて辛いので解除します、

ってことでfile共有は使えません、ツライ

にー兄さんにー兄さん

ということで~/minecraft以下で昨日と同じことやったら爆速で鯖ができました、ええええ

にー兄さんにー兄さん

Stop-AzVM、powershell上でユーザ入力を受け付けてしまうので、
-Forceオプション付けないとAzureFunctionsではエラーになる、知見だ

にー兄さんにー兄さん

マイクラ鯖の作成には成功したが、
外部から調整しようとしたときにちょっとめんどくさいなって思ったので
前やったACIでやろうかなってなりました

このスクラップは2022/02/06にクローズされました