DEV Community

Recca Tsai
Recca Tsai

Posted on • Originally published at recca0120.github.io

How to Install Windows 10 on AWS EC2 via VM Import

Originally published at recca0120.github.io

Prerequisites

AWS VM Import supports the following Windows 10 editions: Professional, Enterprise, and Education (64-bit, English). Home edition is not supported.

You can download the Enterprise trial from the Microsoft website.

Create the Virtual Machine

  1. Create a new VM in VirtualBox with VHD, VMDK, or OVA disk format (about 20GB for the system disk)
  2. Install Windows 10 -- make sure to set an administrator password (otherwise you won't be able to connect via Remote Desktop later)
  3. Install TeamViewer, configure Easy Access, and enable LAN connections and Windows login
  4. Enable Remote Desktop (Start -> Allow remote access)
  5. Install EC2 Configure Service
  6. Reboot, wait for Windows Update to finish, then shut down

Install AWS CLI

sudo apt install awscli
aws configure
Enter fullscreen mode Exit fullscreen mode

Set up your Access Key, Secret Key, and default Region. Note that P2 instances are only available in US regions.

Upload the Image

Create an S3 bucket (the name must be globally unique):

aws s3 mb s3://your-bucket-name --region eu-central-1
Enter fullscreen mode Exit fullscreen mode

Upload the VHD file:

aws s3 cp codexaws.vhd s3://your-bucket-name --region eu-central-1
Enter fullscreen mode Exit fullscreen mode

Set Up IAM Role

Create trust-policy.json:

{
   "Version": "2012-10-17",
   "Statement": [{
      "Effect": "Allow",
      "Principal": { "Service": "vmie.amazonaws.com" },
      "Action": "sts:AssumeRole",
      "Condition": {
         "StringEquals": { "sts:Externalid": "vmimport" }
      }
   }]
}
Enter fullscreen mode Exit fullscreen mode

Create the role:

aws iam create-role --role-name vmimport --assume-role-policy-document file://trust-policy.json
Enter fullscreen mode Exit fullscreen mode

Create role-policy.json, replacing YOUR-BUCKET-NAME with your actual bucket name (same one used above):

{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Effect": "Allow",
         "Action": ["s3:ListBucket", "s3:GetBucketLocation"],
         "Resource": ["arn:aws:s3:::YOUR-BUCKET-NAME"]
      },
      {
         "Effect": "Allow",
         "Action": ["s3:GetObject"],
         "Resource": ["arn:aws:s3:::YOUR-BUCKET-NAME/*"]
      },
      {
         "Effect": "Allow",
         "Action": ["ec2:ModifySnapshotAttribute", "ec2:CopySnapshot", "ec2:RegisterImage", "ec2:Describe*"],
         "Resource": "*"
      }
   ]
}
Enter fullscreen mode Exit fullscreen mode

Attach the policy:

aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document file://role-policy.json
Enter fullscreen mode Exit fullscreen mode

Import the Image

Create containers.json:

[{
  "Description": "Windows 10 Base Install",
  "Format": "vhd",
  "UserBucket": {
    "S3Bucket": "your-bucket-name",
    "S3Key": "codexaws.vhd"
  }
}]
Enter fullscreen mode Exit fullscreen mode

Run the import:

aws ec2 import-image --description "Windows 10" --disk-containers file://containers.json --region eu-central-1
Enter fullscreen mode Exit fullscreen mode

Check progress:

aws ec2 describe-import-image-tasks --region eu-central-1
Enter fullscreen mode Exit fullscreen mode

Launch the EC2 Instance

After the import completes, go to the EC2 Console:

  1. Images -> AMI -> right-click -> Launch
  2. Choose a g2 instance type (you may need to request a limit increase from AWS first)
  3. Open RDP and TeamViewer ports in the Security Group
  4. Once launched, use "Connect" to download the RDP file and log in with the credentials you set earlier

Post-Installation Setup

  • Re-link your TeamViewer account
  • Install NVIDIA drivers
  • Follow the documentation to enable ENA Enhanced Networking

Top comments (0)