查询云服务器ECS的镜像-阿里云开发者社区

开发者社区> 弹性计算> 正文
登录阅读全文

查询云服务器ECS的镜像

简介: 查询ECS的镜像,针对特定的场景如何查找镜像,包括 1. 查找 Windows的 系统镜像,2.查找 被实例使用着的 镜像 3. 查找 共享 的镜像 (其他人共享给我的)4.查找 带Tag( key=xxx value=yyy) 的镜像

  • 接口名称

查询镜像源列表:DescribeImages

  • 背景:

如何查找你所需的镜像 DescribeImages接口查询镜像列表

  • 针对场景做相应的查询

场景1. 查找 Windows的 系统镜像
场景2. 查找 被实例使用着的 镜像
场景3. 查找 共享 的镜像 (其他人共享给我的)
场景4. 查找 Tag key=xxx value=yyy 的镜像

除了您现在看到的这文章,您还可以前往:
您也可以使用 ECS 管理控制台、ECS 命令行工具或开发工具包在 ECS 区域内查询 ECS 系统镜像。

ECS 管理控制台-快照和镜像-镜像
ECS ALIYUN CLI
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()

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
+ 订阅

做技术领先、性能优异、稳如磐石的弹性计算!

官方博客
官网链接