EC2 MacインスタンスがGAされて久しいですが、まだまだAWSの中では新しいサービスということもあり、使うと驚くこともいくつかあります。 この記事では、実際にプロトタイピング案件でEC2 Macを使ってみて気づいたことを何点か紹介します。
起動にはクォータ緩和が必要
EC2 Macインスタンスはデフォルトでは起動できません。コチラのページからクォータの値を上限緩和しましょう。mac1がIntel Mac、mac2がM1 Macを指します。
Dedicated hostを使う必要がある
よくあるユースケースのLinuxインスタンスではEC2インスタンスを直接起動できますが、Macインスタンスではそれができません。代わりに、Dedicated hostを割り当て、そのホスト上にインスタンスを起動する形になります。具体的な方法はこちら。
また、課金についてもインスタンスを起動しているかどうかによらず、Dedicated host割当時間で決まります (参考)。使い終わったらインスタンスの終了だけでなくホストのリリースを忘れないようにしたいですね。
Dedicated hostのリリースに関する制約
EC2 MacのDedicated hostは少しクセがあり、以下の制約があります:
- ホストを割り当ててから24時間はリリースできません。これは Apple macOS Software License Agreement に準拠するためということです (参考)。
- ホスト上のインスタンスを停止/終了してから1〜3時間程度は、ホストのリリースやインスタンスの起動ができません (参考)。内部SSDやNVRAMの消去、デバイスファームウェアのアップデートなどをするためとのことです。なお、この処理に要する時間はユーザーには課金されないようです。
いつでも自由にホストをリリースできるわけではないことに注意しましょう。特にDedicated hostやインスタンスをCloudFormationで管理する場合は、リソースの削除時にホストとインスタンスの削除が同時に行われないように工夫が必要です (Removal PolicyをRetainにする、別のスタックでデプロイするなど)。
リモートデスクトップ接続する方法
Macインスタンスの操作は、やはりGUIが便利です。Apple Remote Desktopの機能を有効化すれば、お手元の端末からMacインスタンスへリモートデスクトップ接続が可能です。
具体的な方法はこちらに書かれています: Connect to your instance using Apple Remote Desktop。Macインスタンス側の設定は、ユーザーにパスワードを設定し、ARDの機能を有効化するだけです。
ARDには5900番ポートでアクセスできます。SSM Session managerを使えば、セキュリティグループの許可は不要で、またプライベートサブネットにあるインスタンスでもポートフォワードが可能です。
# targetにはMacインスタンスのインスタンスIDは入れる (マネジメントコンソールで確認)
aws ssm start-session \
--target i-xxxxxxxxxxxxxx \
--document-name AWS-StartPortForwardingSession \
--parameters '{"portNumber":["5900"], "localPortNumber":["5900"]}'
あとは手元の端末のVNCクライアント (MacならScreen sharingアプリがデフォルトで利用可能です) から、localhost:5900
に接続すればOKです。
画面解像度を変更したい場合は、こちらに手順があります: Modify macOS screen resolution on Mac instances。コマンド4つくらいで済みます。
EBSサイズを変更する方法
Macインスタンスでも、メインストレージとしてEBSが利用されます。一点Amazon Linuxインスタンスと異なるのは、EBSサイズを変更する際にMac側から明示的にストレージを拡張するコマンドを実行する必要がある点です。こちらのドキュメントに詳細が書かれています。
また、コマンド実行の際にはインスタンスの再起動が必要なのですが、この再起動に数十分程度かかる場合がありました。ベターな方法として、EC2のユーザーデータでこのコマンドを実行すれば、再起動は不要になります。もし最初から必要なストレージサイズがわかっているのであれば、ユーザーデータ内で上記コマンドを実行することをおすすめいたします。
まとめ
以上、EC2 Macインスタンスを使ってみて気づいたことを紹介しました。
プロトタイピングチームでは、EC2 Macを使ってJenkinsのUnityビルドパイプラインを構築するCDKテンプレートを公開しています: Unity Build Pipeline with Jenkins and EC2 Mac。 EC2インスタンスをCDKで構築するコード例はこちらです。 ご参考にしていただければ幸いです。