こんにちは。
https://qiita.com/yKimisaki/items/fa528de37413c1001bb6
過去の記事でSlackBotを作ったというのを書いていたのですが、最近AWS Graviton(x86-64系じゃなく、64bit版arm系のCPU、AWSが独自開発)のインスタンスに載せてみたので、メモ程度に残しておきます。
現状は何の問題もなく動いてくれているので、たぶん問題ないんだと思います。
インスタンスについて
上記にいろいろまとまっていますが、会社の規模的にもめちゃくちゃハードに使用されるAPIサーバではないため、現状はt4g.nanoで運用しています。
ストレージは15GBにしていますが、1.7GBくらいで収まっているので多分これくらいの規模であれば8GBでも事足りるはずです。
料金については現状月4ドル~5ドルくらいで収まると思います。
普通にx64のt2.nanoとか借りるより安いです。
OS/AMIについて
OSはAmazon Linux 2にしていますが、AWSだしAmazon Linux 2にしておこうというくらいの理由で決めているので、特に意味はありません。
.NET Coreがあらかじめ入っているクイックスタートだとt4gインスタンスは使えないので、しょうがなくピュアそうな子を選びます。
あとはEC2を普通に立ち上げるのですが、SSHの22番のほかにASP.NETのサーバ用のポートをTCPで開けておいてあげてください。
仮想マシンに.NET Core Runtimeを入れる
私はWSLのUbuntu 20.04 LTSでSSH使ってAWSに繋いでいますが、楽だから以外の理由はないので、好きな方法でサーバに入ってください。
で、現状ではarm64版のEC2で.NET Core Runtimeのインストールにyumやらaptやらのパッケージマネージャ系は使えないっぽいです。
ので、以下からwgetで手動で持ってきます。
wget https://download.visualstudio.microsoft.com/download/pr/dffd493f-9eb8-483f-81c7-a9e2201574ef/54e7464241e01e7031fd89e6fe88e6da/aspnetcore-runtime-3.1.9-linux-arm64.tar.gz
で、解凍してパスを通せばOKです。
今回はホームディレクトリ直下にdotnetフォルダを作ってそこに展開したので、以下のような感じです。
tar zxf aspnetcore-runtime-3.1.9-linux-arm64.tar.gz
export DOTNET_ROOT=$HOME/dotnet
export PATH=$PATH:$HOME/dotnet
arm64版向けにpublishする
今回の場合、更新も自分しかせず頻繁に更新もかからず社内向けのSlackBotなので、ずぼらな自分はいつもWindowsでコマンドを叩いてscpで送っています。
PowerShellあたりでプロジェクトのフォルダまで移動し、
dotnet publish -c Release -r linux-arm64
でarm64版の実行ファイルが生成されます。
生成物のなかのpublishフォルダを丸っと、WSLを使ってscpで送ってやればOKです。
起動する
再びSSHでLinuxに入り、
nohup ./publish/SlackBot > slackbot.out &
のような感じでバックグラウンド実行をしています。
あとはSlackAPIの方のSlackCommandにAWSのサーバのURLを指定してあげるとOKです。
さいごに
いつもは.NET CoreがプリインストールされているEC2インスタンスを立ち上げていたのですが、今回はそれができず、パッケージマネージャも使えないということで若干面倒ではあったのですが、無事にarmのCPUでも.NET Coreちゃんと動くよ!ということで、めでたしめでたし…
あんまり詳しくはないんですが、AWSは最近Gravitonへの動きが加速してまして、ElastiCacheやEKSの標準にしたりなどしているそうです。
かといって自分みたいなゲーム屋はUE4やUnity(というよりVisualStudioやらMayaやら)を使った開発でx86プロセッサから逃れられない運命は続きそうです。
arm版Windowsはエミュレーションだし、arm版Macももうすぐ発売ですけど、どうなるのかな…
ともかく今後数年でarmでゲーム開発を、というのはあんまり想像できないですね。
そういう意味でも、プロセッサの壁を越えてやれるっていうのは.NET Coreの強みだと思うので、是非皆さんもarm版.NET Coreをチェックしてみてください。