何故デスクトップ環境が必要になるのか
EC2で開発をするにあたっての一番の課題は、ローカルのブラウザにアクセスできないということです。フロントエンド開発やその他のツールを使う上でローカルで「http://localhost:3000」などURLを立ち上げてブラウザから確認をするケースは多いでしょう。この課題を解決するためにEC2上でもデスクトップを有効化する必要があります。
インストール手順
以下EC2上でコマンドを打ったり設定ファイルを編集していったりという感じなので淡々と手順を述べていきたいと思います。手順としては以下のURLを参考にしていますのでこれらを見ていただいても良いと思います。
https://docs.aws.amazon.com/linux/al2023/ug/installing-gnome-al2023.html
https://docs.aws.amazon.com/linux/al2023/ug/vnc-configuration-al2023.html
GNOME desktop環境のインストール
[ec2-user ~]$ sudo dnf groupinstall "Desktop" -y
もし、以下のエラーメッセージが出た場合にはAmazon Linux2023のdnfリポジトリがrelease 2023.7もしくはそれを使っていない可能性が高いです。参照するリポジトリをアップグレードしましょう
[ec2-user ~]$ sudo dnf groupinstall "Desktop" -y
Last metadata expiration check: 0:13:06 ago on Tue Jun 24 01:21:54 2025.
Module or Group 'Desktop' is not available.
Error: Nothing to do.
dnfリポジトリのアップグレード
現在使用しているリポジトリのバージョンを以下のコマンドでチェックします。ここで、2023.7以前のものが表示されればアップグレードをしましょう
[ec2-user ~]$ rpm -q system-release
system-release-2023.6.20250317-0.amzn2023.noarch
以下のコマンドで利用可能なリポジトリのバージョンを確認します。
[ec2-user@ ~]$ sudo dnf check-release-update
バージョンを指定してリポジトリのアップグレードを実施します。
[ec2-user ~]$ sudo dnf upgrade --releasever=2023.7.20250623
再度最初のコマンドを打てばデスクトップ環境が問題なくインストールされるはずです
[ec2-user ~]$ sudo dnf groupinstall "Desktop" -y
TigerVNCサーバーのインストール
TigerVNCサーバーは、Linuxなどのサーバー上にあるデスクトップ環境(GUI)を、リモートから操作できるようにするVNC(Virtual Network Computing)サーバーソフトウェア。これをインストールしてローカルのPCからEC2上のデスクトップ環境へGUIで接続します。
まずは、TigerVNCをインストールしましょう。
[ec2-user ~]$ sudo dnf install -y tigervnc-server
インストールが終わればTigerVNCの設定を行っていきます。まずはリモートで接続するためのパスワードを設定します。「a view-only password」も聞かれますがこれは設定は不要です。
[ec2-user ~]$ vncpasswd
デスクトップへつなぐユーザの設定をします。
[ec2-user ~]$ sudo vi /etc/tigervnc/vncserver.users
を開いて以下を追記して下さい
:1=ec2-user
VNCサーバーの設定ファイルを開きます。
[ec2-user ~]$ sudo vi /etc/tigervnc/vncserver-config-defaults
以下の設定を追記して下さい。
session=gnome
securitytypes=vncauth,tlsvnc
geometry=1920x1080
localhost
alwaysshared
以上で設定は完了したのでVNCサーバーを以下のコマンドで立ち上げます。
[ec2-user ~]$ sudo systemctl start vncserver@:1
正しく起動されているかを確認します。statusコマンドを入力して以下のような表示になれば問題なくサーバーは立ち上がっています。
[ec2-user ~]$ sudo systemctl status vncserver@:1
● vncserver@:1.service - Remote desktop service (VNC)
Loaded: loaded (/usr/lib/systemd/system/vncserver@.service; enabled; preset: disabled)
Active: active (running) since Tue 2025-06-24 02:13:18 UTC; 3s ago
Process: 63247 ExecStartPre=/usr/libexec/vncsession-restore :1 (code=exited, status=0/SUCCESS)
Process: 63259 ExecStart=/usr/libexec/vncsession-start :1 (code=exited, status=0/SUCCESS)
Main PID: 63273 (vncsession)
Tasks: 0 (limit: 9346)
Memory: 532.0K
CPU: 28ms
CGroup: /system.slice/system-vncserver.slice/vncserver@:1.service
‣ 63273 /usr/sbin/vncsession ec2-user :1
Jun 24 02:13:18 ip-10-0-100-9.ap-northeast-1.compute.internal systemd[1]: Starting vncserver@:1.service - Remote desktop service (VNC)...
Jun 24 02:13:18 ip-10-0-100-9.ap-northeast-1.compute.internal systemd[1]: Started vncserver@:1.service - Remote desktop service (VNC).
また、このままですとEC2を立ち上げるたびに上記コマンドを実行する必要があります。EC2起動時に自動でVNCサーバーが立ち上がるように以下の設定を行いましょう
[ec2-user ~]$ sudo systemctl enable vncserver@:1
また、デフォルトでは何も操作をしないとロック画面になってしまいます。それも少し煩わしいので以下のコマンドで無効化します。
[ec2-user ~]$ gsettings set org.gnome.desktop.session idle-delay 0
VNCクライアントからデスクトップ環境へ接続します。
VNCサーバーは、クライアント接続用にTCPソケットを公開しています。セキュリティグループを通じてVNCポートを直接公開することも可能ですが、このチュートリアルでは、SSHトンネリングを使用するより安全な方法を紹介しています。SSHトンネルを通じて接続することで、ローカルマシンとEC2インスタンス間の通信が暗号化されます。トンネル経由で接続した後は、前のステップで設定したパスワードを使ってVNCサーバーに認証を行います。
EC2がパブリックサブネット上に配置されている場合は以下でトンネルを構築して下さい。
[ローカル ~]$ ssh -i <keypair> -L 5901:localhost:5901 ec2-user@<address>
また、プライベートサブネットにEC2をおいている場合にはSSMを使ってトンネルを構築します。
aws ssm start-session \
--profile <プロファイル> \
--region ap-northeast-1 \
--target <インスタンスID> \
--document-name AWS-StartPortForwardingSession \
--parameters portNumber=“5901”,localPortNumber=“5901"
ローカルPCにVNCクライアントをインストールしてデスクトップ環境へ接続します。TigerVNCのViewerが存在しますが、何故か僕の環境ではクラッシュしてしまったため、RealVNC Viewerを使用しました。以下のように正しくEC2のデスクトップ環境へ接続することが確認出来ました。
