0
0
はじめての記事投稿
Qiita Engineer Festa20242024年7月17日まで開催中!

GUI を使用して Amazon EC2 Mac インスタンスにアクセスしてみた

Last updated at Posted at 2024-07-07

目次

はじめに

Mac環境で開発を行う必要があり、AWS上でMacインスタンスを立てて作業できる環境を整えてみました。LinuxやWindowsインスタンスへSSHやRDPで接続したことがある方は多いと思いますが、Macインスタンスへの接続をしたことがある方はそんなに多くないのではと思い、記事としてまとめてみました。

開発する期間にもよりますが、占有ホストを割り当てることによる課金が意外とかかるので、
ぶっちゃけ物理PCを買ってしまった方が安く済むかもしれません。それを念頭に置いたうえで、記事を参照していただけると良いと思います。

要約

  • Macインスタンスを構築するために占有ホストの割り当てを実施しました。
  • WindowsインスタンスにRDP接続し、そこからMacインスタンスにVNC接続しました。

構成

下記のような構成で実施しました。(※MacインスタンスにGUI接続することだけを目的とした構成です)

image.png

  • 各インスタンスにアタッチするセキュリティグループは下記を意識しました。

    • Windowsインスタンス
      • Fleet Managerを利用してRDP接続できる
    • Macインスタンス
      • Windowsインスタンスからポート5900、22で接続できる
  • 各インスタンスにアタッチするIAMロールの権限として大雑把に下記が必要でした。

    • Windows
      • セッションマネージャーで接続する権限
      • Fleet Managerで接続する権限
      • S3バケット読み取り権限
    • Macインスタンス
      • セッションマネージャーで接続する権限

Dedicated Hostsの割り当て

image.png

Macインスタンスを立てるのにDedicated Hosts(占有ホスト)の割り当てが必要でした。

占有ホストとは
専用の物理サーバーをプロビジョニングして、そこでEC2インスタンスを起動できるサービスです。下記のようなユースケースがあります。

  • ライセンスコストの削減
  • 企業コンプライアンス要件を満たすように役立つ
  • スケジューリング制御によるホスト自動メンテナンス

下記記事を参考にしました。

https://aws.amazon.com/jp/ec2/dedicated-hosts/
https://dev.classmethod.jp/articles/using-ec2-dedicated-hosts/

image.png

キャプチャーの通り、東京リージョンで、下記のインスタンスファミリー、インスタンスタイプを選択しました。

  • インスタンスファミリー:mac1
  • インスタンスタイプ:mac1.metal
    • 料金:$1.083/h(2024年7月時点)

占有ホスト割り当て時の注意として、下記があります。認識したうえで利用した方が良いです。
* 占有ホスト割り当て後、インスタンスの起動有無に関わらずDedicated Hostsを解放するまで課金が発生します。
* 割り当てた占有ホストをリリースすれば課金は止まりますが、最低24時間の請求期間があります。(24時間はリリースができません)
* Dedicated Hostsでは最初に設定したインスタンスタイプのみが起動可能です。

下記記事を参考にしました

https://aws.amazon.com/jp/ec2/dedicated-hosts/pricing/
https://dev.classmethod.jp/articles/using-ec2-dedicated-hosts/

image.png

image.png

Macインスタンスの作成

占有ホストの割り当てができたので、続いてMacインスタンスを作成しました。

image.png

EC2作成画面で、インスタンスタイプは占有ホスト割り当ての際に選択したmac1.metalを選択しました。後々必要になるためキーペアも作成しておきました。

image.png

セキュリティグループの設定で、インバウンドルールについて、WindowsインスタンスにアタッチするセキュリティグループIDをソースに指定して、ポート5900(VNC接続用)、22(SSH接続用)を指定しました。

VNC(Virtuel Network Computing)接続とは

  • ネットワークを通じて別のコンピュータに接続し、そのデスクトップ画面を呼び出して操作することができるリモートデスクトップ技術の一つです。
  • 画面を飛ばしたい環境(上記の例ではWindows)でサーバ(vncserver)を動かし、画面を受けとりたい環境(同Linux)でクライアント(vncviewer)を動かします。VNCのサーバとクライアントはRFB(Remote Frame Buffer)という通信プロトコルを使ってデータをやりとりします。
  • RDPは主にWindowsで最適化されている一方で、VNCはクロスプラットフォームに対応している。

下記記事を参考にしました。
https://e-words.jp/w/VNC.html
https://engrholiday.jp/win/win-app-vnc-viewer/#google_vignette
https://gihyo.jp/lifestyle/serial/01/ganshiki-soushi/0060

image.png

テナンシーターゲットホストテナンシーのホストIDで割り当てた占有ホストに関する情報を指定しました。

image.png

Macインスタンスが起動できました。(Windowsインスタンスの構築は省略します。以降はWindowsインスタンス構築済み前提で進めていきます。)

Macインスタンスの設定

image.png

MacインスタンスにセッションマネージャーでSSH接続し、キャプチャーの通り、下記コマンドを実行しました。(Mac OSのスクリーン共有をインストール、起動する)

sudo defaults write /var/db/launchd.db/com.apple.launchd/overrides.plist com.apple.screensharing -dict Disabled -bool false
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.screensharing.plist

上記コマンドではVNC接続する際にエラーになりました。(参考にするドキュメントによって記載されているコマンドが異なるようです。後半に発生したエラーと解決方法について記載しています。)
試せてはいませんが、下記を参考にしても良いかもしれません。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/connect-to-mac-instance.html

image.png

続いてec2-userのパスワードを設定しました。(Macインスタンスログイン時に使うパスワード)

sudo /usr/bin/dscl . -passwd /Users/ec2-user

Windowsインスタンスの設定

image.png

まず、AWS CLIのセットアップを実施しました。下記を参考に進めました。

セットアップウィザード終了後、aws --versionでインストールできたことを確認しようとしたところ、下記エラーが出ました。

'aws' is not recognaized as an internal or external command, operable program or batch file.

下記記事の 「考えられる原因: インストール中にオペレーティングシステムの PATH が更新されなかった。」 を参考に環境変数を設定することで無事コマンドが利用できるようになりました。

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-chap-troubleshooting.html#tshoot-install-not-found

image.png

続いて下記コマンドを実行し、WindowsインスタンスからMacインスタンスに対してVNCポートへのSSHトンネルを作成しました。(.sshを作成し、そこにMacインスタンス用秘密鍵ファイルを格納した上で実施しました。)

ssh -i <秘密鍵ファイル名> -L 5900:localhost:5900 ec2-user@<MacインスタンスPrivate IP>

秘密鍵を利用して接続する際に、Permissionエラーが発生しました。
下記記事を参考に秘密鍵について権限変更を行ってから、再度接続を実施しました。

https://qiita.com/eltociear/items/02e8b1f5590b49eb9d87

VNC接続を実行

image.png

以上で準備は終了で、WindowsインスタンスにVNCクライアントソフトウェアをインストールし、Macインスタンスに接続しました。(server:port として :5900を指定)

今回はVNCクライアントソフトとして Ultra VNC を利用しました。何も考えずに同じものを使うのではなく、各VNCクライアントソフトの特徴(セキュリティ面など)やライセンスを十分理解した上で、適切なものを利用した方が良いです。

例えば下記記事で様々なVNCクライアントソフトが紹介されています。
https://gihyo.jp/lifestyle/serial/01/ganshiki-soushi/0060

Ultra VNCのセットアップは下記を参考に実施しました。

https://logical-studio.com/develop/others/20170120-remoteconnectionfromwindowstomac/

接続時、下記のようなエラーが発生しました。

VNC接続時エラー
no supported authentication methods

image.png

下記を参考に、Macインスタンスで再度コマンドを実行しました。

sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -activate -configure -access -on -clientopts -setvnclegacy -vnclegacy yes -clientopts -setvncpw -vncpw <Password文字列> -restart -agent -privs -all

https://writerman.hatenablog.jp/entry/2020/12/02/134905

image.png

VNC接続が成功し、ec2-userに対して設定したパスワードを入力するとMacインスタンスにGUI接続することができました。

終わりに

MacインスタンスへGUI接続するのが、こんなに大変だとは思っていませんでした。今後AWS上でMacを利用して開発される方の参考になれば幸いです。

冒頭にも書きましたが、占有ホストを割り当てることによる課金が意外とかかるので、
ぶっちゃけ物理MacPCを買ってしまった方が安く済むかもしれません。

参考記事

  • Macインスタンスへの接続方法

  • AWS CLIのセットアップ

  • SSH接続する際にパーミッションエラーが発生した場合の権限変更

  • UltraVNCのセットアップ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0