管理云硬盘EVS
引导式阅读
Go
管理云硬盘EVS
作者
C***
上架时间
2023-11-15 06:29:11

EVS服务云硬盘管理示例

1. 简介

华为云提供了EVS服务端SDK,您可以直接集成服务端SDK来调用EVS的相关API,从而实现对EVS服务的快速操作。该示例展示了如何通过go版SDK对云硬盘进行管理,其中包括增(创建云硬盘),删(删除云硬盘),改(扩容云硬盘),查(查询云硬盘)。

2. 开发前准备

  • 注册 华为云,并完成 实名认证
  • 已具备开发环境 ,支持Go 1.16及其以上版本。
  • 已获取华为云账号对应的Access Key(AK)和Secret Access Key(SK)。请在华为云控制台“我的凭证 > 访问密钥”页面上创建和查看您的AK/SK。具体请参见 访问密钥
  • 已获取EVS服务对应区域的项目ID,请在华为云控制台“我的凭证 > API凭证”页面上查看项目ID。具体请参见 API凭证

3. 安装SDK

您可以通过加入相应的依赖项获取和安装SDK。

go get -u github.com/huaweicloud/huaweicloud-sdk-go-v3

4. 开始使用

4.1 导入依赖模块

import ( "fmt" "log" coreConfig "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/config" evsModel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/evs/v2/model" evs "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/evs/v2" coreBasic "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic" )

4.2 初始化认证信息

// 初始化认证信息 credentials := coreBasic.NewCredentialsBuilder().WithAk("${ak}").WithSk("${sk}").WithProjectId("${project_id}").Build()

相关参数说明如下所示:

  • ${ak}:华为云账号Access Key。
  • ${sk}:华为云账号Secret Access Key。
  • ${project_id}:EVS服务对应区域的项目ID。

4.3 初始化EVS服务的客户端

// 初始化客户端 config := coreConfig.DefaultHttpConfig() config.WithIgnoreSSLVerification(true) evsClient := *evs.NewEvsClient(evs.EvsClientBuilder(). WithCredential(credentials). WithEndpoint("${evs_endpoint}"). WithHttpConfig(config). Build())

相关参数说明如下所示:

Credential: 用户认证信息,见4.2的初始化认证信息

Endpoint: EVS服务域名,当前EVS服务支持的region信息见 地区和终端节点信息

HttpConfig: 客户端属性

4.4 配置请求参数

以创建包周期云硬盘为例:

// 配置请求参数,创建按需云硬盘不需要传计费策略参数BssParamForCreateVolume createVolumeRequestBodyVolumeParam := a.GenerateVolumeOption() requestBody := evsModel.CreateVolumeRequestBody{ Volume: &createVolumeRequestBodyVolumeParam, } // 以下参数为创建云硬盘可选参数,可以根据实际需要进行添加 // .withServerId("${server_id}") ; //虚拟机id,选填参数,指定了该id,会将创建好的云硬盘挂载到该目标主机上 // .withOsSCHHNTSchedulerHints(createVolumeSchedulerHints); request := evsModel.CreateVolumeRequest{ Body: &requestBody, }

相关demo见 5. SDK demo代码解析

4.5 发送请求

以创建包周期云硬盘为例:

response, err := evsClient.CreateVolume(&request)

5. SDK demo代码解析

5.1 创建按需云硬盘接口

demo请见Application.createDemandVolume()方法

5.1.1 请求参数说明

func (a *Application) GenerateVolumeOption() evsModel.CreateVolumeOption { createVolumeOptionVolumeTypeParam := evsModel.GetCreateVolumeOptionVolumeTypeEnum().SSD return evsModel.CreateVolumeOption{ AvailabilityZone: "${availabilityZone}", VolumeType: createVolumeOptionVolumeTypeParam, Size: 40, } // 以下参数为可选参数,可以根据实际需要进行添加 // .withName("${name}") //云硬盘名称 // .withCount(1) //云硬盘数量 // .withEnterpriseProjectId("${enterpriseProjectId}") //企业项目id // .withMultiattach(false) //是否创建共享盘 // .withTags(new HashMap<String, String>(){{put("tag_key", "tag_value");}}) //云硬盘标签 // .withMetadata(new HashMap<String, String>(){{put("hw:passthrough", "false");}}); //云硬盘元数据 } // 配置请求参数,创建按需云硬盘不需要传计费策略参数BssParamForCreateVolume createVolumeRequestBodyVolumeParam := a.GenerateVolumeOption() requestBody := evsModel.CreateVolumeRequestBody{ Volume: &createVolumeRequestBodyVolumeParam, } // 以下参数为创建云硬盘可选参数,可以根据实际需要进行添加 // .withServerId("${server_id}") ; //虚拟机id,选填参数,指定了该id,会将创建好的云硬盘挂载到该目标主机上 // .withOsSCHHNTSchedulerHints(createVolumeSchedulerHints); request := evsModel.CreateVolumeRequest{ Body: &requestBody, }

5.1.2 发送请求

response, err := evsClient.CreateVolume(&request)

5.1.3 接口及参数说明

请见 创建云硬盘接口

5.2 创建包周期云硬盘

创建包周期云硬盘,除了需要传云硬盘相关的参数,还需要传计费相关的参数,具体demo见Application.createVolume()方法

5.2.1 构造请求参数

func (a *Application) GenerateBssParam() evsModel.BssParamForCreateVolume { bssParamForCreateVolumeChargingModeParam := evsModel.GetBssParamForCreateVolumeChargingModeEnum().PRE_PAID bssParamForCreateVolumeIsAutoPayParam := evsModel.GetBssParamForCreateVolumeIsAutoPayEnum().TRUE bssParamForCreateVolumeIsAutoRenewParam := evsModel.GetBssParamForCreateVolumeIsAutoRenewEnum().FALSE bssParamForCreateVolumePeriodNumParam := int32(1) bssParamForCreateVolumePeriodTypeParam := evsModel.GetBssParamForCreateVolumePeriodTypeEnum().MONTH return evsModel.BssParamForCreateVolume{ ChargingMode: &bssParamForCreateVolumeChargingModeParam, IsAutoPay: &bssParamForCreateVolumeIsAutoPayParam, IsAutoRenew: &bssParamForCreateVolumeIsAutoRenewParam, PeriodNum: &bssParamForCreateVolumePeriodNumParam, PeriodType: &bssParamForCreateVolumePeriodTypeParam, } } // 配置请求参数,创建按需云硬盘不需要传计费策略参数BssParamForCreateVolume createVolumeRequestBodyVolumeParam := a.GenerateVolumeOption() requestBody := evsModel.CreateVolumeRequestBody{ Volume: &createVolumeRequestBodyVolumeParam, } // 以下参数为创建云硬盘可选参数,可以根据实际需要进行添加 // .withServerId("${server_id}") ; //虚拟机id,选填参数,指定了该id,会将创建好的云硬盘挂载到该目标主机上 // .withOsSCHHNTSchedulerHints(createVolumeSchedulerHints); request := evsModel.CreateVolumeRequest{ Body: &requestBody, }

5.2.2 发送请求

response, err := evsClient.CreateVolume(&request)

5.2.3 接口及参数说明

请见 创建云硬盘接口

5.3 通过数据源创建云硬盘

EVS服务除了提供创建空白云硬盘的能力,也提供了通过数据源创建云硬盘的能力。EVS服务支持通过备份,镜像和快照三种数据源来创建云硬盘。具体方法见Application.createVolumeByDataSource()方法 注意使用快照创建云硬盘,云硬盘类型需与快照源云硬盘保持一致,云硬盘大小也需要大于数据源的云硬盘大小。

5.3.1 构造请求参数

/// 配置数据源信息, EVS服务支持备份,镜像和快照三种数据源创建云硬盘,只支持使用一种数据源创建云硬盘 volumeOption := a.GenerateVolumeOption() // 配置备份数据源 // volumeOption.setBackupId("${backup_id}"); // 配置镜像数据源 // volumeOption.setImageRef("${image_id}"); // 配置快照数据源 // volumeOption.setSnapshotId("${snapshot_id}"); // 存储池id,选填参数,指定了该id,会将创建在指定的存储池 createVolumeSchedulerHints := evsModel.CreateVolumeSchedulerHints{} createVolumeSchedulerHintsDedicatedStorageIdParam2 := "${dss_id}" createVolumeSchedulerHints.DedicatedStorageId = &createVolumeSchedulerHintsDedicatedStorageIdParam2 requestBody := evsModel.CreateVolumeRequestBody{ Volume: &volumeOption, } // 以下参数为创建云硬盘可选参数,可以根据实际需要进行添加 // .withBssParam(generateBssParam()); //计费策略参数,包周期云硬盘必填 // .withServerId("${server_id}") //虚拟机id,选填参数,指定了该id,会将创建好的云硬盘挂载到该目标主机上 // .withOsSCHHNTSchedulerHints(createVolumeSchedulerHints); request := evsModel.CreateVolumeRequest{ Body: &requestBody, }

5.3.2 发送请求

response, err := evsClient.CreateVolume(&request)

5.3.3 接口及参数说明

请见 创建云硬盘接口

5.4 扩容云硬盘

具体demo见Application.extendVolume()方法

5.4.1 构造请求参数

// 扩容参数 extend := evsModel.OsExtend{ NewSize: 50, } // 扩容后云硬盘大小 // 计费相关参数 bssParamForResizeVolumeIsAutoPayParam := evsModel.GetBssParamForResizeVolumeIsAutoPayEnum().FALSE bssParam := evsModel.BssParamForResizeVolume{ IsAutoPay: &bssParamForResizeVolumeIsAutoPayParam, } // 创建请求体 requestBody := evsModel.ResizeVolumeRequestBody{ OsExtend: &extend, BssParam: &bssParam, } // 选填参数,该参数只有在云硬盘为包周期的情况下有意义。默认值为false // 创建请求 request := evsModel.ResizeVolumeRequest{ Body: &requestBody, VolumeId: "${volume_id}", } // 进行扩容的云硬盘id

5.4.2 发送请求

response, err := evsClient.ResizeVolume(&request)

5.4.3 接口及参数说明

请见 扩容云硬盘接口

5.5 查询单个云硬盘详情

具体demo见Application.getVolume()方法

5.5.1 构造请求参数

// 创建请求 request := evsModel.ShowVolumeRequest{ VolumeId: "${volume_id}", }

5.5.2 发送请求

response, err := evsClient.ShowVolume(&request)

5.5.3 接口及参数说明

请见 查询单个云硬盘详情接口

5.6 查询所有云硬盘详情

具体demo见Application.listVolume()方法

5.6.1 构造请求参数

// 创建请求 request := evsModel.ListVolumesRequest{} .withMarker("${volume_id}") // 分页参数,通过云硬盘ID进行分页查询 .withLimit(5); // 通过云硬盘ID进行分页查询 .withOffset(0); // 偏移量 .withSortKey("") // 返回结果按该关键字排序,默认为"created_at" // 下面为过滤参数,根据需要进行填写 .withAvailabilityZone("${availabilityZone}"); .withDedicatedStorageId("${dss_id}") .withDedicatedStorageName("${dss_name}") .withEnterpriseProjectId("${enterprise_project_id}") .withId("${volume_id}") .withIds("${volume_ids}") .withMetadata("${metadata}") .withMultiattach(true); .withName("${name}"); .withServerId("${server_id}"); .withServiceType("${service_type}") .withStatus("${status}") .withVolumeTypeId(CreateVolumeOption.VolumeTypeEnum.SSD);

5.6.2 发送请求

response, err := evsClient.ListVolumes(&request)

5.6.3 接口及参数说明

请见 查询所有云硬盘详情接口

5.7 删除云硬盘

具体demo见Application.deleteVolume()方法

5.7.1 构造请求参数

// 创建请求 request := evsModel.DeleteVolumeRequest{ VolumeId: "${volume_id}", }

5.7.2 发送请求

response, err := evsClient.DeleteVolume(&request)

5.7.3 接口及参数说明

请见 删除云硬盘接口

6. FAQ

暂无

7. 参考

更多信息请参考 EVS服务文档