参考:
VM Import/Export 要求 - VM Import/Export
使用 VM Import/Export 将 VM 作为映像导入 - VM Import/Export
创建镜像 - EC2 Image Builder
1.将vmdk等格式的镜像上传至S3
本地文档上传至S3参考:上传对象 - Amazon Simple Storage Service
我这里采用的使用 S3 控制台。
在官网给的案例为ova格式的镜像导入 VM,如下图:
但在实践中,执行aws ec2 import-image命令导入镜像会报错:
ClientError: Disk validation failed [OVF file parsing error: Unsupported non-ASCII characters found in OVF file path.]
具体原因并不清楚,只能猜测是镜像格式有问题,于是更换了镜像格式。vmdk、raw、qcow2格式的镜像都可试试,将其上传至S3。
2.创建命名为 vmimport 的 IAM 角色
参考:VM Import/Export 要求 - VM Import/Export (amazon.com)
1.赋予IAM 用户所需的权限
如果你以AWS Identity and Access Management(IAM) 用户,您的 IAM 策略中需要拥有操作S3桶test-image的权限,才能使用 VM Import/导出。在这里,因为我主要是测试步骤,所以给了S3桶的全部权限,将用户添加至策略组:arn:aws-cn:iam::aws:policy/AmazonS3FullAccess,策略json:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:*",
"s3-object-lambda:*"
],
"Resource": "*"
}
]
}
2.创建所需的 vmimport IAM 角色服务角色
1.创建角色
有两个方法。一个是使用命令行,一个是在控制台操作。
方法一:使用命令行
aws cli命令安装:https://docs.aws.amazon.com/zh_cn/cli/latest/userguide/getting-started-install.html
命令行操作首先在本机配置访问aws的账号
# 配置aws访问账号 [root@test opt]# aws configure AWS Access Key ID [None]: AK...... AWS Secret Access Key [None]: 9wm...... Default region name [None]: cn-northwest-1 Default output format [None]:json
在您的计算机上创建一个名为 trust-policy.json
的文件。将以下策略添加到该文件中:
[root@test aws-images]# vim trust-policy.json
[root@test aws-images]# cat trust-policy.json
{
"Version": "2012-05-07",
"Statement": [
{
"Effect": "Allow",
"Principal": { "Service": "vmie.amazonaws.com" },
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals":{
"sts:Externalid": "vmimport"
}
}
}
]
}
使用create-role命令以创建名为的角色vmimport
并授予虚拟机导入/导出访问权限。确保您已指定在上一步中创建的 trust-policy.json
文件的位置的完整路径,并包含 file://
前缀,如下例所示:
[root@test aws-images]# aws iam create-role --role-name vmimport --assume-role-policy-document "file:///tmp/aws-images/trust-policy.json"
方法一:在控制台创建
2.配置角色策略
方法一:
使用下面的 put-role-policy 命令将策略挂载到之前创建的角色。请务必指定 role-policy.json
文件位置的完整路径。但是如果已经存在了vmimport
角色,推荐在控制台修改,以免误改了策略。
role-policy.json
文件参考
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:GetObject",
"s3:ListBucket",
"s3:PutObject",
"s3:GetBucketAcl"
],
"Resource": [
"arn:aws-cn:s3:::test-image",
"arn:aws-cn:s3:::test-image/*" ##z这里是存放有vmdk镜像的桶
]
},
{
"Effect": "Allow",
"Action": [
"ec2:ModifySnapshotAttribute",
"ec2:CopySnapshot",
"ec2:RegisterImage",
"ec2:Describe*"
],
"Resource": "*"
}
]
}
使用下面的 put-role-policy 命令将策略挂载到之前创建的角色。请务必指定 role-policy.json
文件位置的完整路径。
aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document "file:///tmp/aws-images/role-policy.json"
方法二:
在控制台修改。
3.命令行操作,镜像导入 VM
使用单个磁盘导入映像,参考以下案例:
方式一:直接使用命令行
[root@test opt]# aws ec2 import-image --license-type aws --disk-containers Format=OVA,Url="S3://test-image/centos-7.9.2009-x86.vmdk"
{
"ImportTaskId": "import-ami-07a9efca767ea18ca",
"LicenseType": "AWS",
"Progress": "1",
"SnapshotDetails": [
{
"DiskImageSize": 0.0,
"Format": "VMDK",
"Url": "S3://test-image/centos-7.9.2009-x86.vmdk",
"UserBucket": {
"S3Bucket": "test-image",
"S3Key": "centos-7.9.2009-x86.vmdk"
}
}
],
"Status": "active",
"StatusMessage": "pending"
}
方式二:使用json文件
指定映像的文件文章来源:https://www.toymoban.com/news/detail-811728.html
[root@test aws-images]# vim containers.json
[root@test aws-images]# cat containers.json
[
{
"Description": "My Server centos7.7.2009",
"Format": "vmdk",
"Url": "s3://test-image/centos-7.9.2009-x86.vmdk"
}
]
[root@test aws-images]# aws ec2 import-image --description "My server VM centos7.7.2009" --disk-containers "file:///tmp/aws-images/containers.json" {
"Description": "My server VM centos7.7.2009",
"ImportTaskId": "import-ami-0466f127a4314d52c",
"Progress": "1",
"SnapshotDetails": [
{
"Description": "My Server centos7.7.2009",
"DiskImageSize": 0.0,
"Format": "VMDK",
"Url": "s3://test-image/centos-7.9.2009-x86.vmdk",
"UserBucket": {
"S3Bucket": "test-image",
"S3Key": "centos-7.9.2009-x86.vmdk"
}
}
],
"Status": "active",
"StatusMessage": "pending"
}
查看上传进程,如果成功了会显示completed文章来源地址https://www.toymoban.com/news/detail-811728.html
[root@test aws-images]# aws ec2 describe-import-image-tasks --import-task-ids import-ami-0466f127a4314d52c
{
"ImportImageTasks": [
{
"Architecture": "x86_64",
"Description": "My server VM centos7.7.2009",
"ImageId": "ami-010b7720b333800b5",
"ImportTaskId": "import-ami-0466f127a4314d52c",
"LicenseType": "BYOL",
"Platform": "Linux",
"SnapshotDetails": [
{
"Description": "My Server centos7.7.2009",
"DeviceName": "/dev/sda1",
"DiskImageSize": 2160242688.0,
"Format": "VMDK",
"SnapshotId": "snap-015f43e47d0191c2d",
"Status": "completed",
"Url": "s3://test-image/centos-7.9.2009-x86.vmdk",
"UserBucket": {
"S3Bucket": "test-image",
"S3Key": "centos-7.9.2009-x86.vmdk"
}
}
],
"Status": "completed",
"Tags": [],
"BootMode": "legacy_bios"
}
]
}
到了这里,关于在aws云将本地虚拟机镜像上传的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!