接口名称
查询镜像源列表:DescribeImages
背景:
如何查找你所需的镜像 DescribeImages接口查询镜像列表
- 针对场景做相应的查询
场景1. 查找 Windows的 系统镜像
场景2. 查找 被实例使用着的 镜像
场景3. 查找 共享 的镜像 (其他人共享给我的)
场景4. 查找 Tag key=xxx value=yyy 的镜像
除了您现在看到的这文章,您还可以前往:
您也可以使用 ECS 管理控制台、ECS 命令行工具或开发工具包在 ECS 区域内查询 ECS 系统镜像。
ECS 管理控制台-快照和镜像-镜像
API文档:DescribeImages
下文以Python为示例。
安装ECS Python SDK
首先确保您已经具备Python的Runtime,本文中使用的Python版本为2.7+。
pip install aliyun-python-sdk-ecs
如果提示您没有权限,请切换sudo 继续执行。
sudo pip install aliyun-python-sdk-ecs
本文使用的sdk版本为4.6.3。
使用场景事例
# your access key Id
ak_id = "YOU_ACCESS_KEY_ID"
# your access key secret
ak_secret = "YOU_ACCESS_SECRET"
region_id = "cn-hangzhou"
clt = client.AcsClient(ak_id, ak_secret, region_id)
def _execute_request(request):
response = _send_request(request)
if response is None:
print 'response is None'
return
if response.get('Code') is None:
images = response.get("Images").get('Image')
totalCount = response.get('TotalCount')
imageIds = []
for image in images :
imageId = image.get('ImageId')
imageIds.append(imageId)
print "ecs images num %s , list is %s"%(totalCount, imageIds)
# send open api request
def _send_request(request):
request.set_accept_format('json')
try:
response_str = clt.do_action(request)
logging.info(response_str)
response_detail = json.loads(response_str)
return response_detail
except Exception as e:
logging.error(e)
场景1. 查找 Windows的 系统镜像
如果你开发平台为.Net,建议选择windows的镜像来创建ECS云服务器,系统自带正版激活的,正版激活费用不再收取。注意:512内存不支持选择Windows系统,1G以上内存才能很好支持该系统。
Windows
阿里云提供了8种window系统,涵盖了Server 2008 R2 | Server 2012 R2及 Server 2016 | window Version 1709(不含UI)这几大类操作系统。
Linux
阿里云官方提供的Linux公共镜像:
CentOS | Ubuntu | Debian | SUSE Linux | OpenSUSE | Aliyun Linux | CoreOS | FreeBSD
# describe windows system images .
def describe_images_filter_windows():
request = DescribeImagesRequest()
#osType : linux | windows
request.set_OSType('windows')
request.set_ImageOwnerAlias('system')
_execute_request(request)
场景2. 查找 被ECS实例使用着的 镜像
# describe used_by_instance images.
def describe_images_used_by_instance():
request = DescribeImagesRequest()
# usage : instance (被实例使用)| none (没被使用)
request.set_Usage('instance')
_execute_request(request)
场景3. 查找 共享 的镜像 (其他人共享给我的)
# describe to be shared images.
def describe_images_shared_by_others():
request = DescribeImagesRequest()
# 镜像类别:system | self (自己创建)| others (被共享的) | marketplace
request.set_ImageOwnerAlias('others')
_execute_request(request)
场景4. 查找 Tag key=xxx value=yyy 的镜像
# describe tag(key = value) images.
def describe_images_by_tag():
request = DescribeImagesRequest()
# 也可以只根据key过滤: 创建时设定的Tag的key
request.set_Tag1Key('xxxx')
# 也可以只根据value过滤: 创建时设定的Tag的value
request.set_Tag1Value('yyyy')
_execute_request(request)
完整代码
# coding=utf-8
# if the python sdk is not install using 'sudo pip install aliyun-python-sdk-ecs'
import json
import logging
from aliyunsdkcore import client
from aliyunsdkecs.request.v20140526.DescribeImagesRequest import DescribeImagesRequest
logging.basicConfig(level=logging.INFO,
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
datefmt='%a, %d %b %Y %H:%M:%S')
# your access key Id
ak_id = "YOU_ACCESS_KEY_ID"
# your access key secret
ak_secret = "YOU_ACCESS_SECRET"
region_id = "cn-hangzhou"
clt = client.AcsClient(ak_id, ak_secret, region_id)
# describe windows system images .
def describe_images_filter_windows():
request = DescribeImagesRequest()
#osType : linux | windows
request.set_OSType('windows')
request.set_ImageOwnerAlias('system')
_execute_request(request)
# describe used_by_instance images.
def describe_images_used_by_instance():
request = DescribeImagesRequest()
# usage : instance (被实例使用)| none (没被使用)
request.set_Usage('instance')
_execute_request(request)
# describe to be shared images.
def describe_images_shared_by_others():
request = DescribeImagesRequest()
# 镜像类别:system | self (自己创建)| others (被共享的) | marketplace
request.set_ImageOwnerAlias('others')
_execute_request(request)
# describe tag(key = value) images.
def describe_images_by_tag():
request = DescribeImagesRequest()
# 也可以只根据key过滤: 创建时设定的Tag的key
request.set_Tag1Key('xxxx')
# 也可以只根据value过滤: 创建时设定的Tag的value
request.set_Tag1Value('yyyy')
_execute_request(request)
def _execute_request(request):
response = _send_request(request)
if response is None:
print 'response is None'
return
if response.get('Code') is None:
images = response.get("Images").get('Image')
totalCount = response.get('TotalCount')
imageIds = []
for image in images :
imageId = image.get('ImageId')
imageIds.append(imageId)
print "ecs images num %s , list is %s"%(totalCount, imageIds)
# send open api request
def _send_request(request):
request.set_accept_format('json')
try:
response_str = clt.do_action(request)
logging.info(response_str)
response_detail = json.loads(response_str)
return response_detail
except Exception as e:
logging.error(e)
if __name__ == '__main__':
print "hello ecs describe images"
# describe_images_filter_windows()
# describe_images_shared_by_others()
# describe_images_used_by_instance()
#describe_images_by_tag()