/ #cdk #ec2 

CDKでWindowsのEC2インスタンスを作って遊んでみた

もくじ

こんにちは、インフラが好きなエンジニアのししぃです。

私はいつもフルリモートでお家で仕事をしています。ですが、この前オフラインで他のメンバーに合う機会があって、そのときに「たまに Windows 使いたくなることあるよねー」っていう話をしてました。よろしい!ならば CDK つかって Windows の環境をさくっとつくっちゃうよー!というのがこの記事です。

はじめに

はじめにこの記事ですが、有用な情報はないです。ただの遊びです。

やることは、CDK を使って EC2 を作成して、Windows を動かして Mac からアクセスという内容です。

有用でない背景は2つです。

1つ目。Windows は t2.Micro とか安いインタンスタイプで動かすとクソ重いです。なので結構高価なインスタンスを使う必要あります。なので本気で Windows を使おうとするとコストがでかいです。

2つ目。手元の MAC の PC があって、それでも Windows でやりたいことって大体ゲームでは?という気がしてます。それなりのグラボが必要になり、そうなると G 系のインスタンスを使うことになります。G 系のインスタンでパット見一番安いのはg4dn.xlargeですが、それでもインスタンスの使用料だけで0.5$/hと高額。さらに通信量とかストレージとかコミコミすると結構な金額です。

はい。まぁつまり「きちんと使おうとするとお高いので Windows 用の PC 買ったほうがいいんじゃない?」という話なってきます。

前提

さて、今回は Windows の EC2 インスタンスを CDK で作成します。

EC2 は単品ではつくれないので VPC 一式も作ります。このへんは以前の記事通りです。そして VPC 周りは省略します。

Windows には Fleet Manager 経由でアクセスします。

また今回はコストを下げるために t2.micro で作成しました。が、これ正直後悔したのでもうちょっと良いインスタンス使ったほうがいいです。

→ 記事書いてる途中で本当に嫌になって「これくらいスペックあれば快適かな?」と勘で t3a.medium に変更しました。t2.㍃はまじで使い物にならないです。

ちなみ今回「どうせ動かないだろうなー」と東方紅魔郷の体験版を動かしたら動いてしまいました。のでその軌跡も書いておきます。なお『東方紅魔郷』は上海アリス幻樂団様の製品であり、私とは一切関わりがありませんことを最初にお伝えさせていただきます。

Fleet Manager ってなに?

公式はこちら

私の雑な理解だと EC2 の AmazonLinux にアクセスするときに ssm 経由でアクセスできると思いますが、それの Windows 版です。裏では RemoteDesktop と同様に RDP で通信してるらしいです。

ただし、Fleet Manager は AmazonLinux の ssm の接続とはことなり、キーペアが必要になるのでそこだけご注意ください。

では 作っていきましょう 👻

ファイルはこちら

import aws_cdk as cdk

app = cdk.App()
stack = cdk.Stack(app, "cdk-ec2-windows-stack")

# VPC
VPC_CIDR = "10.141.0.0/16"  # お好みで変更ください
vpc = cdk.aws_ec2.Vpc(
    stack,
    "vpc",
    cidr=VPC_CIDR,
    max_azs=1,
    subnet_configuration=[
        cdk.aws_ec2.SubnetConfiguration(
            name="public",
            subnet_type=cdk.aws_ec2.SubnetType.PUBLIC,
        ),
    ],
)

# EC2
key_pair = cdk.aws_ec2.KeyPair(stack, "keyPair")
instance = cdk.aws_ec2.Instance(
    stack,
    "instance",
    vpc=vpc,
    vpc_subnets=cdk.aws_ec2.SubnetSelection(subnet_type=cdk.aws_ec2.SubnetType.PUBLIC),
    # instance_type=cdk.aws_ec2.InstanceType.of(cdk.aws_ec2.InstanceClass.T2, cdk.aws_ec2.InstanceSize.MICRO),
    instance_type=cdk.aws_ec2.InstanceType.of(cdk.aws_ec2.InstanceClass.T3A, cdk.aws_ec2.InstanceSize.MEDIUM),
    machine_image=cdk.aws_ec2.WindowsImage(cdk.aws_ec2.WindowsVersion.WINDOWS_SERVER_2022_JAPANESE_FULL_BASE),
    key_pair=key_pair,
    ssm_session_permissions=True,
)

app.synth()

EC2 側メインになり、前回との大きな差分はキーペアがいるかいないかくらいですね。ssm_session_permissionsつけておけば、Fleet Manager 周りの設定をよしなにやってくれるので本当に楽です。

で、デプロイします。

$ cdk -a "python app.py" deploy

完成〜🎉

接続テスト

EC2 のコンソールを開いて、今回デプロイしたインスタンをチェックして「接続」を押します。

以下のような画面になるので、ピンクのマルに従ってポチポチします。

以下のような画面になるので、ピンクのマルに従ってポチポチします。

だたしここでキーペアの内容がわからないので ssm から取得します。ssm のコンソールへ行って/ec2/keypair/key-xxxxxxxxxxみたいなキーを探してくるか、下記のコマンドで取得してください。ただし下記のコマンドは/ec2/keypair/配下をすべてとってくるので、キーペアが複数あると違うキーもとってきちゃうので注意してください。

$ aws ssm get-parameters-by-path --path "/ec2/keypair/" --recursive --output text --query "Parameters[*].Value" --with-decryption

うまく行けば ↓ な感じで接続できます。

何かしらゲームを動かしてみる。

せっかく Windows が動いたので何かしらゲームを動かしたいですね。しかし最新の重いゲームはまぁ動かないだろうねーということで昔のゲームがいいなーといいう気持ちです。

ということで東方紅魔郷の体験版を動かしてみました。

まずはブラウザを起動して https://www16.big.or.jp/~zun/html/th06.html にアクセスして体験版をダウンロードします。

また Windows のデフォルトだと lzh ファイルで解凍できないっぽいので、何かしら解凍ソフトを入れてよしなに解凍しましょう。ここではLhaplusを使いました。

そして解凍したディレクトリ内のアプリケーションファイルをポチって実行します。

デフォルトでは起動しません。ので体験版のディレクトリに入っているcustomの実行ファイルをクリックしてウィンドウスタイルウィンドウに変更して「決定」します。

そして再度実行してみます。そうすると実行できました。

ちなみにですが私は Windows 全然詳しくないのでなんで実行できるようになるかわかってないです!ので聞かないでください!

そして ↓ な感じで遊べます。

ただスクリーンキーボードが出ている時点でお察しください。という感じでまともな操作はできません(笑)。

(FleetManager じゃなかったらもう少しまともに操作できるんじゃないかな?とは思います。)

以上終了ですー。

まとめ

CDK を使ってさくっと Windows の EC2 を作成してみました。

t2.micro だと本当に使い物にならないのでやめましょう。また t 系のインスタンスでも一応一部のゲームは動かすことができることがわかりました。

とはいえ操作性はかなり悪いので、あくまでも「やったー EC2 で東方できたよー!」という遊び程度で考えてください。

最後に!!

スクリーンキーボードで頑張って ⑨ までいった私を褒めてほしい。

そして今回と全く関係ない話ですが久々に東方やったらやっぱり面白いですね。自分弾幕苦手ですが名作だなーって思いました。

最後になりますが、今回の Stack はお金が発生するので遊び終わったら 削除することをお忘れなく です。

今回のリポジトリはこちら

https://github.com/sisi100/cdk-ec2-windows

最後に

記事の表紙は PixabayAngeles Balaguerの画像を使わせて頂いております。 ありがとうございます!

Author

Sisii

インフラが好きなエンジニアぶってるなにか