调用ImportImage导入一份您的本地镜像文件到云服务器ECS,作为自定义镜像出现在相应地域中。您可以使用导入的镜像创建ECS实例(RunInstances),或者更换实例的系统盘(ReplaceSystemDisk)。
接口说明
调用该接口时,您需要注意:
- 您必须提前上传镜像文件到对象存储OSS。具体操作,请参见上传文件。
- 为避免部分服务器、虚拟机或者云主机的操作系统在导入自定义镜像后,创建的ECS实例无法启动,您需要在导入镜像前检查是否需要在源服务器中安装virtio驱动。具体操作,请参见安装virtio驱动。
-
首次导入镜像时,您必须提前通过访问控制RAM授权ECS访问您的OSS Bucket,否则会报错
NoSetRoletoECSServiceAcount
。您可以通过RAM管理控制台一键完成授权操作,具体的授权页面,请参见云资源访问授权。您也可以手动完成授权操作,部分操作中策略与权限如下所示。具体操作,请参见账号访问控制。1. 创建角色
AliyunECSImageImportDefaultRole
(必须是这个名称,否则导入镜像会失败),角色的策略为:{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "ecs.aliyuncs.com" ] } } ], "Version": "1" }
2. 在该角色下,添加系统策略
AliyunECSImageImportRolePolicy
。您也可以创建自定义策略,权限必须包含:{ "Version": "1", "Statement": [ { "Action": [ "oss:GetObject", "oss:GetBucketLocation", "oss:GetBucketInfo" ], "Resource": "*", "Effect": "Allow" } ] }
- 不能删除正在导入的镜像,只能调用CancelTask取消导入镜像任务。
- 导入镜像的地域必须跟镜像文件上传的OSS Bucket的地域相同。
- 参数
DiskDeviceMapping.N
中N的取值范围为1~17。N为1时表示系统盘,N为2~17时表示数据盘,当N大于17时系统会自动忽略。 - 当参数
Architecture
取值为arm64
,或者参数Platform
取值为CentOS Stream
、Anolis
、AlmaLinux
、UOS
、Kylin
或Rocky Linux
时,您需要注意:- 为了使导入后的镜像支持配置密码或者支持修改密钥对,镜像必须满足以下条件:
- 操作系统的内核需要支持
CONFIG_FW_CFG_SYSFS
特性。Linux社区内核4.6版本之后默认支持该特性,CentOS的内核在3.10.0-826.el7版本之后默认支持该特性。您可以在该镜像对应的服务器内运行grep -nr CONFIG_FW_CFG_SYSFS /boot/config-$(uname -r)
命令,如果回显结果中包含CONFIG_FW_CFG_SYSFS=y
信息,则说明该镜像中的内核已支持CONFIG_FW_CFG_SYSFS
特性。 - 操作系统中已安装阿里云最新版本cloud-init。其中,19.1版本cloud-init必须在19.1.3版本及以上,部分低版本操作系统中的0.7.6a版本cloud-init必须在0.7.6a15版本及以上。具体操作,请参见安装cloud-init。
- 操作系统需要支持SHA-512加密算法。
- 操作系统的内核需要支持
- 为了使导入后的镜像支持扩容云盘与扩容文件系统,镜像必须满足以下条件:
- 操作系统的内核版本需要高于3.6版本。
- 支持growpart命令。支持该命令需要安装
cloud-utils-growpart
包,不同操作系统安装方式有所不同。具体操作,请参见扩展分区和文件系统(Linux)。 - 支持resize2fs命令。支持该命令需要安装
e2fsprogs
包,该包在操作系统中默认已安装,如果没有安装您需要自行安装。 - 操作系统中已安装阿里云最新版本cloud-init。其中,19.1版本cloud-init必须在19.1.3版本及以上,部分低版本操作系统中的0.7.6a版本cloud-init必须在0.7.6a15版本及以上。具体操作,请参见安装cloud-init。
- 为了使导入后的镜像支持配置密码或者支持修改密钥对,镜像必须满足以下条件:
- 如果您待导入的自定义镜像对应的系统架构为arm64时,您需要设置其RTC时钟使用UTC时间标准。具体操作,请参见Linux时间和时区说明。
- 强烈建议在导入镜像时配置镜像检测参数,有助于系统帮助优化您的镜像。更多信息,请参见镜像检测概述。
调试
您可以在OpenAPI Explorer中直接运行该接口,免去您计算签名的困扰。运行成功后,OpenAPI Explorer可以自动生成SDK代码示例。
请求参数
名称 |
类型 |
是否必选 |
示例值 |
描述 |
Action | String | 是 | ImportImage | 系统规定参数。取值:ImportImage。 |
RegionId | String | 是 | cn-hangzhou | 源自定义镜像的地域ID。您可以调用DescribeRegions查看最新的阿里云地域列表。 |
ImageName | String | 否 | ImageTestName | 镜像名称。长度为2~128个字符。必须以大小写字母或中文开头,不能以 |
Description | String | 否 | TestDescription | 镜像的描述信息。长度为2~256个英文或中文字符,不能以 |
Architecture | String | 否 | x86_64 | 系统架构。取值范围:
默认值:x86_64。 |
OSType | String | 否 | linux | 操作系统平台类型。取值范围:
默认值:linux。 |
Platform | String | 否 | Aliyun | 操作系统发行版。取值范围:
默认值:Others Linux。 |
BootMode | String | 否 | BIOS | 修改镜像的启动模式。取值范围:
默认值:BIOS。如果 说明 您需要了解指定的镜像支持的启动模式,当通过该参数修改启动模式后,必须与镜像本身支持的启动模式匹配,实例才能正常启动。 |
RoleName | String | 否 | AliyunECSImageImportDefaultRole | 导入镜像时,使用的RAM角色名称。 |
LicenseType | String | 否 | Auto | 导入镜像后,激活操作系统采用的许可证类型。取值范围:
默认值:Auto。 |
ResourceGroupId | String | 否 | rg-bp67acfmxazb4p**** | 导入镜像所在的企业资源组ID。 |
DiskDeviceMapping.N.DiskImSize | Integer | 否 | 80 | 自定义镜像大小。单位:GiB。 该空间由系统盘和数据盘组成,您必须保证系统盘的空间大小大于等于导入的镜像文件大小。取值范围:
当您将源镜像文件上传至OSS后,可以在OSS Bucket中查看镜像文件的大小。 说明 该参数即将被弃用,为提高兼容性,请尽量使用 DiskDeviceMapping.N.DiskImageSize 参数。 |
DiskDeviceMapping.N.Device | String | 否 | null | 指定DiskDeviceMapping.N.Device在自定义镜像中的设备名。 说明 该参数即将停止使用,为提高代码兼容性,建议您尽量不要使用该参数。 |
DiskDeviceMapping.N.OSSBucket | String | 否 | ecsimageos | 镜像文件所在的OSS Bucket。 说明 首次导入镜像到该OSS Bucket前,请参见本文档的接口说明添加RAM授权策略,否则会报错 NoSetRoletoECSServiceAcount 。 |
DiskDeviceMapping.N.Format | String | 否 | QCOW2 | 镜像格式。取值范围:
默认值:无,表示阿里云自动检测镜像格式,以检测格式为准。 |
DiskDeviceMapping.N.OSSObject | String | 否 | CentOS_5.4_32.raw | 镜像上传至OSS Bucket后,保存在Bucket中的镜像文件的文件名(key)。 |
DiskDeviceMapping.N.DiskImageSize | Integer | 否 | 80 | 导入镜像后,自定义镜像的空间大小。 该空间由系统盘和数据盘组成,您必须保证系统盘的空间大小大于等于导入的镜像文件大小。取值范围:
当您将源镜像文件上传至OSS后,可以在OSS Bucket中查看镜像文件的大小。 |
Tag.N.Key | String | 否 | TestKey | 镜像的标签键。N的取值范围:1~20。一旦传入该值,则不允许为空字符串。最多支持128个字符,不能以 |
Tag.N.Value | String | 否 | TestValue | 镜像的标签值。N的取值范围:1~20。一旦传入该值,允许为空字符串。最多支持128个字符,不能以 |
DetectionStrategy | String | 否 | Standard | 镜像检测策略,不配置此参数时不触发检测。仅支持标准(Standard)检测模式。 说明 目前已支持大部分的Linux/Windows版本,关于镜像检测项与操作系统限制说明,请参见镜像检测概述和镜像检测操作系统限制。 |
返回数据
名称 |
类型 |
示例值 |
描述 |
RequestId | String | 473469C7-AA6F-4DC5-B3DB-A3DC0DE3**** | 请求ID。 |
ImageId | String | m-bp67acfmxazb4p**** | 镜像ID。 |
TaskId | String | t-bp67acfmxazb4p**** | 导入镜像任务ID。 |
RegionId | String | cn-hangzhou | 地域ID。 |
示例
请求示例
http(s)://ecs.aliyuncs.com/?Action=ImportImage
&RegionId=cn-hangzhou
&DiskDeviceMapping.1.Format=QCOW2
&DiskDeviceMapping.1.OSSBucket=ecsimageos
&DiskDeviceMapping.1.OSSObject=CentOS_5.4_32.raw
&DiskDeviceMapping.1.DiskImageSize=80
&ImageName=Test
&Description=Test
&Architecture=x86_64
&OSType=linux
&Platform=Aliyun
&LicenseType=Aliyun
&DetectionStrategy=Standard
&公共请求参数
正常返回示例
XML
格式
HTTP/1.1 200 OK
Content-Type:application/xml
<ImportImageResponse>
<RequestId>473469C7-AA6F-4DC5-B3DB-A3DC0DE3****</RequestId>
<ImageId>m-bp67acfmxazb4p****</ImageId>
<TaskId>t-bp67acfmxazb4p****</TaskId>
<RegionId>cn-hangzhou</RegionId>
</ImportImageResponse>
JSON
格式
HTTP/1.1 200 OK
Content-Type:application/json
{
"RequestId" : "473469C7-AA6F-4DC5-B3DB-A3DC0DE3****",
"ImageId" : "m-bp67acfmxazb4p****",
"TaskId" : "t-bp67acfmxazb4p****",
"RegionId" : "cn-hangzhou"
}
错误码
HttpCode |
错误码 |
错误信息 |
描述 |
400 | UnsupportedSuffix.OSSObject | The specified OSS object suffix is not supported. | 不支持指定的OSS对象后缀。 |
400 | InvalidImageName.Malformed | The specified Image name is wrongly formed. | 镜像名称格式错误。长度为2~128个字符。必须以大小字母或中文开头,不能以aliyun和acs:开头,不能包含http://或者https://。可以包含数字、半角句号(.)、半角冒号(:)、下划线(_)或者短划线(-)。 |
400 | InvalidOSSObject.Malformed | The specified OSS object is wrongly formed. | 指定的 OSS Object 不合法。 |
400 | InvalidDescription.Malformed | The specified Image description is wrongly formed. | 镜像描述格式错误。 |
400 | InvalidArchitecture.Malformed | The specified Architecture is wrongly formed. | 参数 Architecture 格式错误。 |
400 | InvalidPlatform.Malformed | The specified Platform is wrongly formed. | 指定的镜像操作系统发行版不合法。 |
400 | InvalidOSType.Malformed | The specified OSType is wrongly formed. | 格式不对。 |
400 | InvalidImageName.Duplicated | The destination image is exist. | 指定的镜像名已存在。 |
400 | InvalidImageSize | %s | 镜像大小不符合要求。 |
400 | InvalidDataDiskSize | The specified DiskDeviceMapping.N.DiskImSize should be in the specified range. | 指定的 DiskDeviceMapping.N.DiskImSize 超出取值范围。 |
400 | InvalidImageFormat.Malformed | The specified Image Format is wrongly formed. | 指定的镜像格式错误。 |
400 | InvalidRegionId.NotFound | The specified RegionId does not exist. | 指定的地域 ID 不存在。 |
400 | InvalidRegion.NotSupport | The specified region does not support image import or export. | 指定的地域暂时不支持此操作。 |
400 | InvalidOSSBucket.NotFound | The specified OSS bucket does not exist in this region. | 指定的 bucket 不存在。 |
400 | InvalidOSSObject.NotFound | The specified OSS object does not exist in this region. | 指定的 OSS object 不存在。 |
400 | InvalidOSSBucket.NotMatched | The specified OSS bucket is incorrect, %s. | 指定的 OSS Bucket 有误,具体信息请参见错误信息的实际返回结果。 |
403 | ImageIsImporting | The specified Image is importing. | 指定镜像正在导入,无法执行操作。 |
403 | QuotaExceed.Image | The Image Quota exceeds. | 自定义镜像额度已用完。 |
403 | ImportImageFailed | Importing image is failed, Please contact the administrator. | 导入镜像失败,请联系系统管理员排查。 |
403 | UserNotInTheWhiteList | The user is not in the white list of importing image. | 用户未被授权导入镜像。 |
403 | NoSetRoletoECSServiceAcount | ECS service account Have no right to access your OSS.please attach a role of access your oss to ECS service account. | ECS 官网服务账号没有权限访问您指定的 OSS 的 bucket 和 Object。 |
403 | MissingParameter.DiskDeviceMapping | The specified parameter DiskDeviceMapping is not supplied. | 参数 DiskDeviceMapping 不能为空。 |
403 | InvalidVHDImage.IncorrectSize | The specified size of the VHD image does not meet the 'header.MaxTableEntries * header.BlockSize' specification. | 指定的VHD镜像大小不符合 'header.MaxTableEntries * header.BlockSize' 的规范。 |
403 | InvalidOSSBucket.EncryptUnsupported | Accessing objects from encrypted OSS bucket is not supported. | 不支持从加密的OSS bucket读取对象。 |
403 | InvalidArchitecture.PlatformUnsupported | The OS platform you selected does not support the specified architecture. | 您选择的操作系统平台不支持指定的架构类型。 |
403 | InvalidAccountStatus.OSSDisabled | OSS is disabled due to invalid account status. | 由于帐户状态无效,OSS被禁用。 |
404 | InvalidResourceGroup.NotFound | The ResourceGroup provided does not exist in our records. | 资源组并不在记录中。 |
访问错误中心查看更多错误码。