一.制作自己的镜像
我使用的是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创建。
注意:创建实例一定要关联密钥,不然获取不到密码,无法登录。