我使用的是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文件。
存储桶必须要和你创建的实例同一个区域。
S3不需要公开访问,后面导入镜像的时候可以选择文件路径或者文件地址,选择路径即可。
根据自己的情况把vmdk文件上传到S3中,S3桶不要加密。
vmdk文件名不要带空格,如果带空格在通过界面导入时会报错。
角色名称:vmimport(必须叫这个名字),选自定义信任策略,策略选json,复制过去即可。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": { "Service": "vmie.amazonaws.com" },
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals":{
"sts:Externalid": "vmimport"
}
}
}
]
}
策略名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": "*"
}
]
}
选择角色,选中vmimport,添加权限-附加策略,选择刚刚创建的策略vmimport,确定即可。
导入镜像有两种方式,一种是通过EC2 Image Builder 界面导入,一种是通过aws cli。
作者比较推荐使用aws cli的方式,因为cli可以通过命令关注到导入进度,并且报错能看到具体的报错内容,界面有时候就不行。
下面两种方式都介绍下:
AWS进入EC2 Image Builder菜单–镜像–导入镜像(右侧)
名称–随意 版本–随意
镜像操作系统----windows
操作系统版本----Windows Server 2019
导入来源—S3 bucket 浏览S3 找到自己的vmdk文件
IAM角色—vmimport
导入镜像
没报错的话,等待导入完成即可在AMI里看到AMI文件。
参考官方文档
https://docs.aws.amazon.com/zh_cn/cli/latest/userguide/install-cliv2.html
aws configure
输入用户的Access Key ID和 Secret Access Key,region与你实例和S3保持一致,其他默认。
在本地上创建一个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
根据导入完成的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是用于初始化封装系统,想详细了解可以百度。
等待系统自动关机。
建议这种方式:
进入实例,选择操作,选择映像和模板,选择创建映像。
这时等待ami完成即可,会同时生成snapshot和ami。
此时,这个最新的AMI就是最新的系统。
以后实例都可以通过这个AMI创建。
注意:创建实例一定要关联密钥,不然获取不到密码,无法登录。