目次
はじめに
Mac環境で開発を行う必要があり、AWS上でMacインスタンスを立てて作業できる環境を整えてみました。LinuxやWindowsインスタンスへSSHやRDPで接続したことがある方は多いと思いますが、Macインスタンスへの接続をしたことがある方はそんなに多くないのではと思い、記事としてまとめてみました。
開発する期間にもよりますが、占有ホストを割り当てることによる課金が意外とかかるので、
ぶっちゃけ物理PCを買ってしまった方が安く済むかもしれません。それを念頭に置いたうえで、記事を参照していただけると良いと思います。
要約
- Macインスタンスを構築するために占有ホストの割り当てを実施しました。
- WindowsインスタンスにRDP接続し、そこからMacインスタンスにVNC接続しました。
構成
下記のような構成で実施しました。(※MacインスタンスにGUI接続することだけを目的とした構成です)
-
各インスタンスにアタッチするセキュリティグループは下記を意識しました。
- Windowsインスタンス
- Fleet Managerを利用してRDP接続できる
- Macインスタンス
- Windowsインスタンスからポート5900、22で接続できる
- Windowsインスタンス
-
各インスタンスにアタッチするIAMロールの権限として大雑把に下記が必要でした。
- Windows
- セッションマネージャーで接続する権限
- Fleet Managerで接続する権限
- S3バケット読み取り権限
- Macインスタンス
- セッションマネージャーで接続する権限
- Windows
Dedicated Hostsの割り当て
Macインスタンスを立てるのにDedicated Hosts(占有ホスト)の割り当てが必要でした。
占有ホストとは
専用の物理サーバーをプロビジョニングして、そこでEC2インスタンスを起動できるサービスです。下記のようなユースケースがあります。
- ライセンスコストの削減
- 企業コンプライアンス要件を満たすように役立つ
- スケジューリング制御によるホスト自動メンテナンス
下記記事を参考にしました。
https://aws.amazon.com/jp/ec2/dedicated-hosts/
https://dev.classmethod.jp/articles/using-ec2-dedicated-hosts/
キャプチャーの通り、東京リージョンで、下記のインスタンスファミリー、インスタンスタイプを選択しました。
- インスタンスファミリー:
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/
Macインスタンスの作成
占有ホストの割り当てができたので、続いてMacインスタンスを作成しました。
EC2作成画面で、インスタンスタイプは占有ホスト割り当ての際に選択したmac1.metal
を選択しました。後々必要になるためキーペアも作成しておきました。
セキュリティグループの設定で、インバウンドルールについて、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
テナンシー
、ターゲットホスト
、テナンシーのホストID
で割り当てた占有ホストに関する情報を指定しました。
Macインスタンスが起動できました。(Windowsインスタンスの構築は省略します。以降はWindowsインスタンス構築済み前提で進めていきます。)
Macインスタンスの設定
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
続いてec2-userのパスワードを設定しました。(Macインスタンスログイン時に使うパスワード)
sudo /usr/bin/dscl . -passwd /Users/ec2-user
Windowsインスタンスの設定
まず、AWS CLIのセットアップを実施しました。下記を参考に進めました。
セットアップウィザード終了後、aws --version
でインストールできたことを確認しようとしたところ、下記エラーが出ました。
'aws' is not recognaized as an internal or external command, operable program or batch file.
下記記事の 「考えられる原因: インストール中にオペレーティングシステムの PATH が更新されなかった。」 を参考に環境変数を設定することで無事コマンドが利用できるようになりました。
続いて下記コマンドを実行し、WindowsインスタンスからMacインスタンスに対してVNCポートへのSSHトンネルを作成しました。(.sshを作成し、そこにMacインスタンス用秘密鍵ファイルを格納した上で実施しました。)
ssh -i <秘密鍵ファイル名> -L 5900:localhost:5900 ec2-user@<MacインスタンスPrivate IP>
秘密鍵を利用して接続する際に、Permissionエラーが発生しました。
下記記事を参考に秘密鍵について権限変更を行ってから、再度接続を実施しました。
VNC接続を実行
以上で準備は終了で、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/
接続時、下記のようなエラーが発生しました。
no supported authentication methods
下記を参考に、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
VNC接続が成功し、ec2-userに対して設定したパスワードを入力するとMacインスタンスにGUI接続することができました。
終わりに
MacインスタンスへGUI接続するのが、こんなに大変だとは思っていませんでした。今後AWS上でMacを利用して開発される方の参考になれば幸いです。
冒頭にも書きましたが、占有ホストを割り当てることによる課金が意外とかかるので、
ぶっちゃけ物理MacPCを買ってしまった方が安く済むかもしれません。
参考記事
- Macインスタンスへの接続方法
- AWS CLIのセットアップ
- SSH接続する際にパーミッションエラーが発生した場合の権限変更
- UltraVNCのセットアップ