详情页标题前

阿里云ECS云服务器通用流程-云淘科技

详情页1

以云服务器ECS Java SDK查询可用镜像资源的方法DescribeImages为例,介绍编写ECS Java SDK的通用流程。

前提条件

您已经创建了AccessKey。具体操作,请参见创建AccessKey。

说明

为避免主账号泄露AccessKey带来的安全风险,建议您创建RAM用户,授予RAM用户云服务器ECS相关的访问权限,再使用RAM用户的AccessKey调用SDK。具体操作,请参见通过RAM用户控制资源访问。

背景信息

  • 本文示例中,IClientProfile和IAcsClient两个包含在aliyun-java-sdk-core中,其他的类均包含在aliyun-java-sdk-ecs中。

  • 本文示例目的是查询云服务器ECS公共镜像,您可以参见镜像相关文档了解什么是公共镜像。更多详情,请参见公共镜像概述。

  • 下表列举了旧版SDK与新版SDK的方法、类以及对象之间的区别。若您使用的是旧版SDK,建议您切换为新版SDK,获取最新功能。

    对比项

    新版SDK

    旧版SDK

    提交请求

    getAcsResponse()

    execute()

    存放AccessKey的类

    IClientProfile

    AliyunClient

    存放身份凭据对象

    DefaultProfile.getProfile(RegionId, AccessKey, AccessKeySecret)

    new DefaultAliyunClient(APIUrl, AccessKey, AccessKeySecret)

    包名前缀

    com.aliyuncs

    com.aliyun.api

  • 更多代码示例请参见阿里云代码示例库(CodeSample)。

操作步骤

  1. 从IClientProfile类中生成对象Profile。

    Profile对象存放地域、AccessKeyID和AccessKeySecret,如示例中的cn-hangzhou。更多关于地域的信息,请参见地域和可用区。

    // 请确保代码运行环境设置了环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
    IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou",System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
  2. 从IClientProfile类中生成IAcsClient的对象client。

    后续获得response从IClientProfile中获得。

    IAcsClient client = new DefaultAcsClient(profile);
  3. 创建一个对应方法的Request,使用构造函数生成一个默认的类request

    类的命名规则为API方法名加上Request。获得镜像列表的API方法名为DescribeImages,对应的请求类名就是DescribeImagesRequest。

    DescribeImagesRequest request = new DescribeImagesRequest();
  4. 设置请求类request的参数。

    通过request类的setXxx方法设置必要的信息,即API中必须要提供的信息,通过setXxx方法设置参数。示例中:

    • DescribeImages的API方法RegionId用来指定地域。

    • DescribeImages的API方法ImageOwnerAlias用来设置要查询的镜像类型。设置setImageOwnerAlias的值为system,表示查询公共镜像。

    request.setImageOwnerAlias("system");
  5. 通过client对象获得对应request响应。

    DescribeImagesResponse response = client.getAcsResponse(request);
    System.out.println(JSON.toJSONString(response));
  6. 调用response中对应的getXxx方法获得返回的参数值。

    假设您需要获取某份镜像的名字,先通过getImages()获得Image对象的集合,再通过遍历等方法取得其中某个镜像的信息,调用getImageName()或者getImageId()获得具体的信息。

    for(DescribeImagesResponse.Image image:response.getImages())
                {
                    System.out.println(image.getImageId());
                    System.out.println(image.getImageName());
                }

    根据API方法的不同,返回的信息中可能会包含多层的信息,如DescribeImages返回的信息中镜像是以一个集合来表示的,集合中存放了每个镜像的信息,汇聚成一个列表。您需要通过getImages()获得Image对象的集合,通过遍历等方法取得其中某个镜像的信息,再调用getXxx方法获得具体的信息。

  7. 使用catch()处理服务器报错和客户端报错。

    • 服务端报错

      catch (ServerException e) {
                  e.printStackTrace();
                                 }
    • 客户端报错

      catch (ClientException e) {
                  System.out.println("ErrCode:" + e.getErrCode());
                  System.out.println("ErrMsg:" + e.getErrMsg());
                  System.out.println("RequestId:" + e.getRequestId());
                                 }

执行结果

  • 全部返回信息如下所示:

    {
        "PageNumber": 1,
        "TotalCount": 43,
        "PageSize": 1,
        "RegionId": "cn-hangzhou",
        "RequestId": "C93F3D9F-CF25-47DF-9C0F-614395E5DCAC",
        "Images": {
            "Image": [
                {
                    "ImageId": "freebsd_11_02_64_30G_alibase_20190722.vhd",
                    "Description": "",
                    "OSNameEn": "FreeBSD  11.2 64 bit",
                    "ProductCode": "",
                    "ResourceGroupId": "",
                    "OSType": "linux",
                    "Architecture": "x86_64",
                    "OSName": "FreeBSD  11.2 64位",
                    "DiskDeviceMappings": {
                        "DiskDeviceMapping": []
                    },
                    "ImageOwnerAlias": "system",
                    "Progress": "100%",
                    "IsSupportCloudinit": false,
                    "Usage": "instance",
                    "CreationTime": "2019-07-23T05:41:06Z",
                    "Tags": {
                        "Tag": []
                    },
                    "ImageVersion": "",
                    "Status": "Available",
                    "ImageName": "freebsd_11_02_64_30G_alibase_20190722.vhd",
                    "IsSupportIoOptimized": true,
                    "IsSelfShared": "",
                    "IsCopied": false,
                    "IsSubscribed": false,
                    "Platform": "Freebsd",
                    "Size": 30
                }
            ]
        }
    }
  • 获取具体返回参数的查询结果,例如ImageId和ImageName:

    freebsd_11_02_64_30G_alibase_20190722.vhd
    freebsd_11_02_64_30G_alibase_20190722.vhd

完整代码示例

以下为本文示例的完整Java SDK代码。

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.alibaba.fastjson.JSON;
import java.util.*;
import com.aliyuncs.ecs.model.v20140526.*;

public class DescribeImages {

    public static void main(String[] args) {
        // 请确保代码运行环境设置了环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
        // 工程代码泄露可能会导致AccessKey泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取AccessKey的方式进行调用,建议使用更安全的STS方式。
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou",System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        IAcsClient client = new DefaultAcsClient(profile);

        DescribeImagesRequest request = new DescribeImagesRequest();
        request.setRegionId("cn-hangzhou");
        request.setImageOwnerAlias("system");
        request.setPageNumber(1);
        request.setPageSize(1);

        try {
            DescribeImagesResponse response = client.getAcsResponse(request);
            System.out.println(JSON.toJSONString(response));
            for(DescribeImagesResponse.Image image:response.getImages())
            {
                System.out.println(image.getImageId());
                System.out.println(image.getImageName());
            }
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            System.out.println("ErrCode:" + e.getErrCode());
            System.out.println("ErrMsg:" + e.getErrMsg());
            System.out.println("RequestId:" + e.getRequestId());
        }

    }
}

腾讯云1折,限时活动,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利。同意关联立享优惠

转转请注明出处:https://www.yunxiaoer.com/150409.html

(0)
上一篇 2023年12月9日
下一篇 2023年12月9日
详情页2

相关推荐

  • 腾讯云云点播概述

    产品说明 腾讯云视立方播放器 Player (以下简称播放器 Player)是腾讯云提供给用户,为点播业务提供全面、稳定、流畅的视频播放服务,帮助用户连接云端服务、打造云端一体化能力。播放器 Player 在点播播放场景提供了播放器和第三方播放器插件,同时支持 Web 端、iOS 端、Android 端、Flutter 端等多个平台。此外,云点播为客户提供多…

    腾讯云 2023年12月9日
  • 阿里云日志服务SLS告警监控规则及资源数据相关操作-云淘科技

    您可以通过Java、Python以及Go SDK操作告警监控规则及资源数据。本文介绍告警监控规则及资源数据相关操作示例和数据结构。 示例代码 您可以参考以下语言的SDK代码,快速进行告警管理。 使用Java SDK管理告警 通过Python SDK管理告警 通过Go SDK管理告警 数据结构 您可以参考以下数据结构,了解告警监控规则和告警资源的数据结构。 告…

    阿里云日志服务SLS 2023年12月10日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 腾讯云云函数(SCF)音视频转码最佳实践-云淘科技

    客户介绍 某国内在线教育企业,于2006年在美国纽约证券交易所上市,总部位于中国北京市海淀区中关村,是一家综合性教育集团,同时也是教育培训集团。该企业业务包括外语培训、中小学基础教育、学前教育、在线教育、出国咨询、图书出版等各个领域。旗下还有多家教育子品牌。 客户痛点 在每年暑期时,会有大量学生在企业平台上学习。在此之前都是在自建的机房里基于服务器和 NFS…

    2023年12月9日
  • 阿里云ECS云服务器DescribeInstanceModificationPrice-云淘科技

    调用DescribeInstanceModificationPrice查询未到期的包年包月ECS实例升配时目标实例规格的价格信息、新增包年包月数据盘的价格信息。 接口说明 仅支持查询未到期的包年包月ECS实例升配的价格信息,暂不支持查询实例降配的价格信息。 不支持查询按量付费ECS实例变配时的价格信息。由于按量付费ECS实例变配后的价格与新购实例的价格一致,…

    阿里云服务器 2023年12月9日
  • 腾讯云容器服务集群生命周期同尘科技

    集群生命周期说明 状态 说明 创建中 TKE Serverless 集群正在创建,正在申请云资源。 运行中 集群正常运行。 闲置中 集群处于闲置状态。 激活中 集群从闲置状态中调整到运行中状态的过程。 删除中 集群在删除中,将同步销毁和释放云资源。 异常 集群中存在异常,如网络不可达等。 集群闲置状态说明 为了减少资源空置成本,引导用户更合理地规划和管理集群…

    腾讯云 2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。