🌊

EC2 で .NET 8 を動かす

に公開

はじめに

EC2 で .NET 8 を動かせるようにしてみたいと思いました。それだけです。

EC2 立ち上げ

まず、EC2 を立ち上げます。
今回マシンイメージは Amazon Linux を使います。

セットアップ

sudo rpm -Uvh https://packages.microsoft.com/config/amazonlinux/2/packages-microsoft-prod.rpm

リポジトリを追加します。

sudo yum -y update && sudo yum -y upgrade
sudo yum install -y dotnet-sdk-8.0

リポジトリの最新化と .NET SDK のインストールを済ませます。

dotnet --version

.NET のバージョンが表示されれば OK です!

sudo yum install firewalld -y

ファイアウォール管理ツールをインストールします。

sudo systemctl start firewalld
sudo systemctl enable firewalld

サービスを起動し、有効化します。

sudo systemctl status firewalld

ファイアウォールが起動できていれば OK です!

sudo firewall-cmd --permanent --add-port=5000/tcp

続けて、ポートを開放します。
今回 .NET コマンドでデフォルトのポートで受け付けるため、5000 番ポートを開放します。

sudo firewall-cmd --reload

リロードし、設定を反映させます。

sudo firewall-cmd --list-ports

5000/tcp が表示されれば OK です!

VPC でセキュリティグループも設定している場合、そこも 5000 番ポート許容を設定しておきます。

.NET の起動

いよいよ .NET を起動します。
今回は ASP.NET MVC を起動してみます。

dotnet Xxx.dll --urls "http://0.0.0.0:5000"

通常起動ではなく、どの IP アドレスからもアクセスを許容するため、urls オプションを付与した状態で起動します。

詰まったところ

セキュリティグループでポートを許容したのに、該当ポートにアクセスできない状態が続いてました。
結論から言うと、ファイアウォールの設定ができていなかったためでした。

今回 .NET を動かすのみで Apache などの Web サーバーはインストールしておらず、ファイアウォール系もノータッチだったため、EC2 は何も通信を受け付けていない状態でした。
そりゃ「セキュリティグループはパスしても、EC2 はパスできない!」という状況になるよねって話。

また、.NET コマンド実行時も urls オプションを指定しないとアクセスを許容していない気がしました。
(細かい切り分けでのトラブルシューティングができたわけではないので、影響無いかもしれません)

気付けば初歩的な問題でしたが、数時間悩まされました。

終わりに

今まで Linux 上で .NET を動かす時、Docker で誤魔化していました。
しかし EC2 で動かす上で、わざわざ dotnet コマンドを打つために Docker をインストールしてしまうのはオーバーヘッドが大きすぎると思っていました。
今回、Linux 上で最小限の形で .NET を動かす構成が考えられたと思います。
今後も .NET 系の個人開発も頑張っていけそうです!

Discussion