AWS上传私有windows server2019镜像64位

一.制作自己的镜像

我使用的是esxi,建立一个windows虚拟机,开启。

根据aws官方文档,虚拟机里的系统重要需要注意以下几点:

1.只有一张网卡,ip获取配置成dhcp。

2.关闭系统防火墙。

3.开启windows rdp 远程功能。

详细的查看下面链接:

https://docs.aws.amazon.com/zh_cn/vm-import/latest/userguide/prerequisites.html

二.关闭虚拟机,导出镜像

我使用的是vmdk,实际需要的只是vmdk文件。

三.aws操作

镜像文件上传至S3。

存储桶必须要和你创建的实例同一个区域。
S3不需要公开访问,后面导入镜像的时候可以选择文件路径或者文件地址,选择路径即可。
根据自己的情况把vmdk文件上传到S3中,S3桶不要加密。
vmdk文件名不要带空格,如果带空格在通过界面导入时会报错。

IAM创建角色

角色名称:vmimport(必须叫这个名字),选自定义信任策略,策略选json,复制过去即可。

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

IAM创建策略

策略名vmimport,策略规则复制即可(修改下面策略中的"test-test"为自己的S3桶名):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::test-test",
                "arn:aws:s3:::test-test/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:PutObject",
                "s3:GetBucketAcl"
            ],
            "Resource": [
                "arn:aws:s3:::test-test",
                "arn:aws:s3:::test-test/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:ModifySnapshotAttribute",
                "ec2:CopySnapshot",
                "ec2:RegisterImage",
                "ec2:Describe*"
            ],
            "Resource": "*"
        }
    ]
}

IAM角色关联策略

选择角色,选中vmimport,添加权限-附加策略,选择刚刚创建的策略vmimport,确定即可。

导入镜像

导入镜像有两种方式,一种是通过EC2 Image Builder 界面导入,一种是通过aws cli。
作者比较推荐使用aws cli的方式,因为cli可以通过命令关注到导入进度,并且报错能看到具体的报错内容,界面有时候就不行。

下面两种方式都介绍下:

EC2 Image Builder 导入

AWS进入EC2 Image Builder菜单–镜像–导入镜像(右侧)
名称–随意 版本–随意
镜像操作系统----windows
操作系统版本----Windows Server 2019
导入来源—S3 bucket 浏览S3 找到自己的vmdk文件
IAM角色—vmimport
导入镜像
没报错的话,等待导入完成即可在AMI里看到AMI文件。

AWS Cli 导入

安装Cli

参考官方文档

https://docs.aws.amazon.com/zh_cn/cli/latest/userguide/install-cliv2.html

AWS Cli配置

aws configure

输入用户的Access Key ID和 Secret Access Key,region与你实例和S3保持一致,其他默认。

创建json文件

在本地上创建一个json文件
Description随意填写
Format填写vmdk
S3Bucket填写自己的bucket名称
S3Key填写vmdk路径(相对路径)

 [
  {
    "Description": "Windows Server 2019",
    "Format": "vmdk",
    "UserBucket": {
        "S3Bucket": "test",
        "S3Key": "xxx.vmdk"
    }
  }
]

导入镜像

执行下面导入镜像的命令,修改–disk-containers后面的json文件路径。

windows: file://D:\xxx.json
linux: file:///root/xxx.json

aws ec2 import-image --description “windows server 2019” --disk-containers “file:///root/xxx.json”

检查镜像导入情况

上面命令输出的结果中,有一个import-task-id,复制上面的值到下面命令的xxxx中,可以查询进度,等待StatusMessage字段显示complete代表导入完成,可以在ami中看到了。

aws ec2 describe-import-image-tasks --import-task-ids xxxx

创建ec2实例,初始化系统

根据导入完成的ami,创建ec2实例,安全组需要开放实例的3389到客户端IP,因为目前只能通过RDP远程登录。
填上自己之前设置的windows密码,安装ec2launch。
打开powershell 执行:

mkdir $env:USERPROFILE\Desktop\EC2Launchv2
$Url = "https://s3.amazonaws.com/amazon-ec2launch-v2/windows/amd64/latest/AmazonEC2Launch.msi" 
$DownloadFile = "$env:USERPROFILE\Desktop\EC2Launchv2\" + $(Split-Path -Path $Url -Leaf)
Invoke-WebRequest -Uri $Url -OutFile $DownloadFile
msiexec /i "$DownloadFile"   #这里要看下面任务栏跳出的安装界面,选择Default Configuration

安装完后,打开ec2luanch,一般默认配置(每个配置的含义看下面链接),先点save,再点shutdown with sysprep。

https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/WindowsGuide/ec2launch-v2-settings.html

sysprep是用于初始化封装系统,想详细了解可以百度。
等待系统自动关机。

通过ec2实例创建AMI

建议这种方式:
进入实例,选择操作,选择映像和模板,选择创建映像。
这时等待ami完成即可,会同时生成snapshot和ami。
此时,这个最新的AMI就是最新的系统。
以后实例都可以通过这个AMI创建。
注意:创建实例一定要关联密钥,不然获取不到密码,无法登录。

你可能感兴趣的:(aws,windows,云计算)