0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WindowsAMIのEC2インスタンスにRDP接続する

Posted at

業務の都合で、MacPCからWindowsAMIで立ち上げたEC2インスタンスにRDP接続したかったので、CDKでサクッと作ってみる。

必要なもの

  • AWS CDK
  • AWS CLI
  • Windows Remote Desktop

手順

1.あらかじめEC2に使用するキーペアを作っておく

# キーペアを作成する
% aws ec2 create-key-pair
	--key-name sandbox-key \
	--query 'KeyMaterial' \
	--output text > sandbox-key.pem

# ファイルがDLされたことを確認
% ls -l | grep sandbox-key.pem
-rw-r--r--@   1 hogehoge  staff    1679 11  2 02:40 sandbox-key.pem

作成したキーペアは通常、chmod 400によって所有者のみの読み取り専用にするが、今回はRPD接続用のパスワードを入手するためにEC2コンソールにアップロードするだけの用途なので省略する。また、キーペアは秘密鍵なので安全に保管する。

2.EC2インスタンスをCDKでデプロイ

(CDKをインストールし、CDKプロジェクトを作成して諸準備をした前提で)下記の2ファイルを用意する。

▫️bin/sandbox-cdk.ts

#!/usr/bin/env node
import 'source-map-support/register';
import * as cdk from 'aws-cdk-lib';
import { WindowsEc2Stack } from '../lib/windows-rdp';

const app = new cdk.App();
new WindowsEc2Stack(app, 'WindowsEc2SandboxStack', {});

▫️lib/windows-rdp.ts

import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as ec2 from 'aws-cdk-lib/aws-ec2';

export class WindowsEc2Stack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // VPCの作成
    const vpc = new ec2.Vpc(this, 'MyVpc', {
      vpcName: 'sandboxVpc',
      maxAzs: 2,
      natGateways: 0,
    });

    const publicSubnets = vpc.publicSubnets;

    // セキュリティグループの作成
    const securityGroup = new ec2.SecurityGroup(this, 'SecurityGroup', {
      securityGroupName: 'sandboxSg',
      vpc,
      allowAllOutbound: true,
      description: 'Allow RDP access',
    });

    // RDPのポートを開放
    const myIp = 'XX.XX.XX.XX/32' // IPアドレスは自分のWi-FiのグローバルIP等を入れる
    securityGroup.addIngressRule(ec2.Peer.ipv4(myIp), ec2.Port.tcp(3389), 'Allow RDP access');

    // Windowsインスタンスの作成
    new ec2.Instance(this, 'WindowsInstance', {
      instanceType: ec2.InstanceType.of(ec2.InstanceClass.T2, ec2.InstanceSize.MICRO),
      // AMIIDはSSMパラメータから撮ってきたほうがよい
      // https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/parameter-store-public-parameters-ami.html
      machineImage: ec2.MachineImage.fromSsmParameter('/aws/service/ami-windows-latest/Windows_Server-2022-Japanese-Full-Base'),
      vpc,
      vpcSubnets: {subnets: publicSubnets},
      securityGroup,
      keyName: 'sandbox-key',
    });
  }
}

ここまで準備できたらデプロイ

npx cdk deploy WindowsEc2Stack

3.RDPへの接続

ここから先はクラスメソッドさんの記事を参照したので、リンクを貼っておきます。

上記リンクの「RDPでの接続手順」に従って操作すれば、下図のようにWindowsのEC2に対してリモートデスクトップ接続ができるはず!:tada:

スクリーンショット 2024-11-02 3.03.02.png

各種コメント

  • AMIIDは公式のSSMパラメータから参照してくるのがベター

  • 今回のサンプルコードlib/windows-rdp.tsでは、EC2インスタンスにEIPをアタッチしていないため、当然、インスタンス停止後に再開するたびにパブリックIPが変わる。すると当然、RDPファイルの中身も変わる。
    • コスト削減のために使用していない時間帯はインスタンスを停止したいが、EIPをつけると今度はインスタンスの停止時に料金が発生するため。毎回RDPファイルをDLしなおすのが面倒な場合はCDKのコードでEIPを追記する必要あり。
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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?