• 沒有找到結果。

2.2 Java

2.2.2 Java SDK 使用

} else {

System.out.println("no server exists.");

} } }

2-1 参数说明

名称 说明 取值样例

authUrl 认证服务(IAM)的 Endpoint。

“https://iam.example.com/

v3”中的“example”为“区 域.云平台域名”,参数详情可 以访问这里了解。

https://iam.cn-north-1.myhuaweicloud.com/v3

user IAM用户名。如何获取,请参

考如何获取IAM 用户名、账号 ID以及项目ID?。

-password IAM用户密码。

-projectId 项目ID。如何获取,请参考如 何获取IAM 用户名、账号ID以 及项目ID?。

-userDomai

nId 账号ID。如何获取,请参考如

何获取IAM 用户名、账号ID以 及项目ID?。

-2.2.2 Java SDK 使用

2.2.2.1 安装 Java SDK

Java SDK提供“导入Java SDK JAR文件”、“添加Maven依赖”和“从华为云镜像站 下载”三种安装方式。

方式一:导入Java SDK JAR文件的方式,如下:

请从GitHub 上下载JAR文件,并在集成开发环境(IDE)中导入。

https://github.com/huaweicloud/huaweicloud-sdk-release/tree/master/java-sdk

以Eclipse为例,创建Java工程后,执行以下步骤,导入JAR文件到新建的工程中:

1. 将下载的JAR文件复制到工程文件夹中。

2. 在Eclipse中打开工程,右键单击该项工程,选择Properties。

3. 在弹出的对话框中,单击Java Build Path,然后在Libraries页签下单击Add JARs,添加下载的JAR文件。

4. 单击OK。

方式二:添加Maven依赖的方式,如下:

通过在pom.xml文件中添加以下依赖安装Java SDK。

<dependency>

<groupId>com.huawei</groupId>

<artifactId>openstack4j</artifactId>

<version>1.0.12</version>

</dependency>

Java SDK支持的最新版本,请在这儿查询。

方式三:从华为云镜像站下载的方式,如下:

1. 找到本地maven的全局配置文件(settings.xml),该文件通常位于maven安装目 录的conf下,例如windows系统中:D:\maven\apache-maven-3.3.9\conf

\settings.xml

2. 在settings.xml找到mirror节点,在mirror节点中增加:

<mirror>

<id>huaweicloud</id>

<mirrorOf>*,!HuaweiCloudSDK</mirrorOf>

<url>https://repo.huaweicloud.com/repository/maven/</url>

</mirror>

3. 打开Maven工程的pom.xml,在“<dependency>”节点中加入以下配置:

<dependency>

<groupId>com.huawei</groupId>

<artifactId>openstack4j</artifactId>

<version>1.0.12</version>

</dependency>

Java SDK支持的最新版本,请在这儿查询。

2.2.2.2 Java SDK 认证方式

Java SDK支持两种认证方式:token认证和AK/SK认证。

token 认证

token认证方式示例代码,参数详情请参考表2-2。

package demo;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import com.huawei.openstack4j.openstack.OSFactory;

import com.huawei.openstack4j.api.OSClient.OSClientV3;

import com.huawei.openstack4j.core.transport.Config;

import com.huawei.openstack4j.model.common.Identifier;

import com.huawei.openstack4j.model.compute.Server;

public class Demo {

public static void main(String[] args) { //设置认证参数

String authUrl = "https://iam.example.com/v3";//endpointUrl String user = "replace-with-your-username";//用户名 String password = "replace-with-your-password";//用户密码 String projectId = "replace-with-your-projectId";//项目ID String userDomainId = "replace-with-your-domainId";//账号ID //初始化client

OSClientV3 os = OSFactory.builderV3() .endpoint(authUrl)

.credentials(user, password, Identifier.byId(userDomainId)) .scopeToProject(Identifier.byId(projectId)).authenticate();

//设置查询参数

Map<String, String> filter = new HashMap<String, String>();

//将需要输入的参数都放入filter里面 filter.put("limit", "3");

//调用查询虚拟机列表的接口

List<? extends Server> serverList = os.compute().servers().list(filter);

if (serverList.size() > 0) {

System.out.println("get serverList success, size = " + serverList.size());

for (Server server : serverList) { System.out.println(server);

} } else {

System.out.println("no server exists.");

} } }

2-2 参数说明

名称 说明 取值样例

authUrl 认证服务(IAM)的 Endpoint。

“https://iam.example.com/

v3”中的“example”为“区 域.云平台域名”,参数详情可 以访问这里了解。

https://iam.cn-north-1.myhuaweicloud.com/v3

user IAM用户名。如何获取,请参

考如何获取IAM 用户名、账号 ID以及项目ID?。

-password IAM用户密码。

-projectId 项目ID。如何获取,请参考如 何获取IAM 用户名、账号ID以 及项目ID?。

-名称 说明 取值样例 userDomai

nId 账号ID。如何获取,请参考如

何获取IAM 用户名、账号ID以 及项目ID?。

-token具有24小时有效期,如果您的程序运行时间超过24小时,在使用SDK调用API之 前,建议您在程序中重新申请一次token,方法如下:

import com.huawei.openstack4j.openstack.OSFactory;

OSFactory.refreshToken();

AK/SK 认证

AK/SK认证方式示例代码,参数详情请参考表2-3。

package demo;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import com.huawei.openstack4j.api.OSClient.OSClientAKSK;

import com.huawei.openstack4j.core.transport.Config;

import com.huawei.openstack4j.model.compute.Server;

import com.huawei.openstack4j.openstack.OSFactory;

public class Demo {

public static void main(String[] args) { // 设置认证参数

String ak = "replace-your-ak";

String sk = "replace-your-sk";

String projectId = "replace-your-projectId";

String region = "replace-your-region"; //example: region = "cn-north-1"

String cloud = "myhuaweicloud.com";

OSClientAKSK osclient = OSFactory.builderAKSK().credentials(ak, sk, region, projectId, cloud) .authenticate();

// 设置查询参数

Map<String , String> filter = new HashMap<String, String>();

// 将需要输入的参数都放入filter里面 filter.put("limit", "3");

// 调用查询虚拟机列表的接口

List<? extends Server> serverList = osclient.compute().servers().list(filter);

if(serverList.size() > 0)

{ System.out.println("get serverList success, size = " + serverList.size());

for (Server server : serverList) { System.out.println(server);

} } else {

System.out.println("no server exists.");

} } }

2-3 参数说明

名称 说明 取值样例

ak/sk AK/SK访问密钥。

说明

● AK/SK生成说明:登录控制 台,进入“我的凭证”,点击

“管理访问密钥”创建 AK/SK。

● AK/SK签名时间与UTC时间误 差不可以超过15分钟,否则会 鉴权失败。

● AK/SK签名连续失败超过5次,

将锁定对应访问的源IP的 AK/SK请求,持续5分钟。

-projectId 项目ID。如何获取项目ID请参 考如何获取IAM 用户名、账号 ID以及项目ID?。

-region 区域名称。 cn-north-1

cloud 云平台域名。 myhuaweicloud.com

2.2.2.3 Java SDK 服务地址设置

使用SDK调用云服务API时,需要获取每个云服务的地址(Endpoint)。

Java SDK支持两种方式:SDK自动获取、手工编码设置。

编码设置云服务Endpoint的示例如下:

endpointResolver.addOverrideEndpoint(ServiceType.CLOUD_EYE, "https://ces.xxx.yyy.com/V1.0/%

(project_id)s");

endpointResolver.addOverrideEndpoint(ServiceType.DNS, "https://dns.yyy.com");

endpointResolver.addOverrideEndpoint(ServiceType.CDN, "https://cdn.yyy.com/v1.0");

endpointResolver.addOverrideEndpoint(ServiceType.COMPUTE, "https://ecs.xxx.yyy.com/v2/%(project_id)s");

endpointResolver.addOverrideEndpoint(ServiceType.NETWORK, "https://vpc.xxx.yyy.com");

endpointResolver.addOverrideEndpoint(ServiceType.IMAGE, "https://ims.xxx.yyy.com");

endpointResolver.addOverrideEndpoint(ServiceType.BLOCK_STORAGE, "https://evs.xxx.yyy.com/v2/%

(project_id)s"");

endpointResolver.addOverrideEndpoint(ServiceType.VOLUME_BACKUP, "https://vbs.xxx.yyy.com/v2/%

(project_id)s");

endpointResolver.addOverrideEndpoint(ServiceType.AUTO_SCALING, "https://as.xxx.yyy.com/autoscaling-api/

v1/%(project_id)s");

endpointResolver.addOverrideEndpoint(ServiceType.LOAD_BALANCER, "https://elb.xxx.yyy.com/v1.0/%

(project_id)s");

endpointResolver.addOverrideEndpoint(ServiceType.MAP_REDUCE, "https://mrs.xxx.yyy.com/v1.1/%

(project_id)s");

endpointResolver.addOverrideEndpoint(ServiceType.KEY_MANAGEMENT, "https://kms.xxx.yyy.com/v1.0/%

(project_id)s");

endpointResolver.addOverrideEndpoint(ServiceType.CLOUD_TRACE, "https://cts.xxx.yyy.com/v1.0/%

(project_id)s");

endpointResolver.addOverrideEndpoint(ServiceType.ANTI_DDOS, "https://antiddos.xxx.yyy.com/v1/%

(project_id)s");

endpointResolver.addOverrideEndpoint(ServiceType.Notification, "https://smn.xxx.yyy.com/v2/%

(project_id)s");

endpointResolver.addOverrideEndpoint(ServiceType.MessageQueue, "https://dms.xxx.yyy.com/v1.0/%

(project_id)s");

endpointResolver.addOverrideEndpoint(ServiceType.MAAS, "https://maas.xxx.yyy.com/v1/%(project_id)s");

endpointResolver.addOverrideEndpoint(ServiceType.ECS, "https://ecs.xxx.yyy.com/v1/%(project_id)s");

endpointResolver.addOverrideEndpoint(ServiceType.ECS1_1, "https://ecs.xxx.yyy.com/v1.1/%(project_id)s");

endpointResolver.addOverrideEndpoint(ServiceType.EVS, "https://evs.xxx.yyy.com/v2/%(project_id)s");

endpointResolver.addOverrideEndpoint(ServiceType.EVS2_1, "https://evs.xxx.yyy.com/v2.1/%(project_id)s");

endpointResolver.addOverrideEndpoint(ServiceType.VPC, "https://vpc.xxx.yyy.com/v1/%(project_id)s");

endpointResolver.addOverrideEndpoint(ServiceType.VPC2, "https://vpc.xxx.yyy.com/v2.0/%(project_id)s");

endpointResolver.addOverrideEndpoint(ServiceType.IDENTITY, "https://iam.xxx.yyy.com/v3");

endpointResolver.addOverrideEndpoint(ServiceType.ORCHESTRATION, "https://rts.xxx.yyy.com/v1/%

(project_id)s");

endpointResolver.addOverrideEndpoint(ServiceType.NAT, "https://nat.xxx.yyy.com/v2.0");

endpointResolver.addOverrideEndpoint(ServiceType.BMS, "https://bms.xxx.yyy.com/v1/%(project_id)s");

endpointResolver.addOverrideEndpoint(ServiceType.DEH, "https://deh.xxx.yyy.com/v1.0/%(project_id)s");

endpointResolver.addOverrideEndpoint(ServiceType.CSBS, "https://csbs.xxx.yyy.com/v1/%(project_id)s");

endpointResolver.addOverrideEndpoint(ServiceType.IAM, "https://iam.xxx.yyy.com/v3");

● 上述代码中xxx.yyy的格式为:“区域.云平台域名”,参数详情可以访问这里了

解。

● 上述代码中project_id不需要替换为实际值。

● 单击此处获取使用Java SDK的一个完整代码示例,供参考。

2.2.2.4 Java SDK 故障排查

执行如下代码,将Java SDK的执行细节打印出来:

OSFactory.enableHttpLoggingFilter(true);

相關文件