如何使用腾讯云云硬盘API

介绍

腾讯云控制台允许您以类似于使用硬盘驱动器的方式管理腾讯云CVM的额外存储。只需点击腾讯云简化的GUI或图形用户界面,即可为我们的CVM添加云硬盘。但是,这不是一个在大型集群的实用方法,因此腾讯云提供了相关API。我们可以通过腾讯云官方命令行工具直接与API进行交互。

在本教程中,我们将学习如何使用云硬盘API创建,列出,附加,分离和删除云硬盘。

准备

硬盘准备:

通过API使用弹性云盘,您需要依次完成以下三个步骤:

  1. 创建弹性云盘:您可以使用CreateDisks(创建弹性云盘)接口创建弹性云盘。
  2. 将弹性云盘挂载到指定云主机上:创建完弹性云盘后,使用AttachDisks(挂载弹性云盘)接口将弹性云盘挂载到指定的云主机上。注意:这里的挂载指的是将弹性云盘分配给指定的云主机,相当于热插了一块硬盘到服务器上
  3. 登录云主机初始化弹性云盘:初次使用新创建的弹性云盘时,需要进行分区、格式化等一系列操作。具体操作方式请见:Windows系统数据盘分区及格式化Linux系统分区、格式化、挂载及创建文件系统。注意,对于linux系统,分区并不是必要的,您可以跳过分区直接进行格式化操作。

接口准备:

服务地址

腾讯云 API 接口按照功能划分成了不同的功能模块,每个模块使用不同的域名访问。API 支持就近地域访问,也支持指定地域访问。例如云服务器的就近访问域名为 cvm.tencentcloudapi.com ,广州地域的域名为 cvm.ap-guangzhou.tencentcloudapi.com 。

目前支持的域名列表为:

接入地域

域名

就近地域接入(推荐)

*.tencentcloudapi.com

华南地区(广州)

*.ap-guangzhou.tencentcloudapi.com

华东地区(上海)

*.ap-shanghai.tencentcloudapi.com

华北地区(北京)

*.ap-beijing.tencentcloudapi.com

西南地区(成都)

*.ap-chengdu.tencentcloudapi.com

西南地区(重庆)

*.ap-chongqing.tencentcloudapi.com

东南亚地区(首尔)

*.ap-seoul.tencentcloudapi.com

华东地区(上海金融)

*.ap-shanghai-fsi.tencentcloudapi.com

华南地区(深圳金融)

*.ap-shenzhen-fsi.tencentcloudapi.com

东南亚地区(新加坡)

*.ap-singapore.tencentcloudapi.com

东南亚地区(印度)

*.ap-mumbai.tencentcloudapi.com

美国西部(硅谷)

*.na-siliconvalley.tencentcloudapi.com

美国东部(阿什本 )

*.na-ashburn.tencentcloudapi.com

支持 POST 和 GET 请求。 POST 请求目前仅支持 Content-Type 类型为 application/x-www-form-urlencoded 。

公共参数

公共参数是用于标识用户和接口鉴权目的的参数,如非必要,在每个接口单独的接口文档中不再对这些参数进行说明,但每次请求均需要携带这些参数,才能正常发起请求。

参数名称

类型

必选

描述

Action

String

具体操作的指令接口名称,例如想要调用云服务器的查询实例列表接口,则 Action 参数即为 DescribeInstances 。

Region

String

地域参数,用来标识希望操作哪个地域的数据。

Timestamp

Integer

当前 UNIX 时间戳,可记录发起 API 请求的时间。例如1529223702,如果与当前时间相差过大,会引起签名过期错误。

Nonce

Integer

随机正整数,与 Timestamp 联合起来,用于防止重放攻击。

SecretId

String

在云API密钥上申请的标识身份的 SecretId,一个 SecretId 对应唯一的 SecretKey ,而 SecretKey 会用来生成请求签名 Signature。

Signature

String

请求签名,用来验证此次请求的合法性,需要用户根据实际的输入参数计算得出。具体计算方法参见接口鉴权文档。

Version

String

API 的版本。例如 2017-03-12

SignatureMethod

String

签名方式,目前支持 HmacSHA256 和 HmacSHA1 。只有指定此参数为 HmacSHA256 时,才使用 HmacSHA256 算法验证签名,其他情况均使用 HmacSHA1 验证签名。

Token

String

临时证书所用的 Token ,需要结合临时密钥一起使用。临时密钥和 Token 需要到访问管理服务调用接口获取。长期密钥不需要 Token 。

假设用户想要查询广州地域的云服务器实例列表,则其请求链接的形式可能如下:

https://cvm.tencentcloudapi.com/?Action=DescribeInstances
&SecretId=xxxxxxx
&Region=ap-guangzhou
&Timestamp=1402992826
&Nonce=345122
&Signature=xxxxxxxx
&Version=2017-03-12
地域列表

本产品所有接口 Region 字段的可选值如下表所示。如果接口不支持该表中的所有地域,则会在接口文档中单独说明。

区域

取值

亚太地区(曼谷)

ap-bangkok

华北地区(北京)

ap-beijing

西南地区(成都)

ap-chengdu

西南地区(重庆)

ap-chongqing

华南地区(广州)

ap-guangzhou

华南地区(广州Open)

ap-guangzhou-open

东南亚地区(中国香港)

ap-hongkong

亚太地区(孟买)

ap-mumbai

东南亚地区(首尔)

ap-seoul

华东地区(上海)

ap-shanghai

华东地区(上海金融)

ap-shanghai-fsi

华南地区(深圳金融)

ap-shenzhen-fsi

东南亚地区(新加坡)

ap-singapore

欧洲地区(德国)

eu-frankfurt

欧洲地区(莫斯科)

eu-moscow

美国东部(弗吉尼亚)

na-ashburn

美国西部(硅谷)

na-siliconvalley

北美地区(多伦多)

na-toronto

接口鉴权

腾讯云 API 会对每个访问请求进行身份验证,即每个请求都需要在公共请求参数中包含签名信息(Signature)以验证请求者身份。 签名信息由安全凭证生成,安全凭证包括 SecretId 和 SecretKey;若用户还没有安全凭证,请前往云API密钥页面申请,否则无法调用云API接口。

生成签名串

有了安全凭证SecretId 和 SecretKey后,就可以生成签名串了。以下是生成签名串的详细过程:

假设用户的 SecretId 和 SecretKey 分别是:

SecretId: AKIDz8krbsJ5yKBZQpn74WFkmLPx3EXAMPLE SecretKey: Gu5t9xGARNpq86cd98joQYCN3EXAMPLE

注意:这里只是示例,请请根据用户实际申请的SecretId和SecretKey进行后续操作!

以云服务器查看实例列表(DescribeInstances)请求为例,当用户调用这一接口时,其请求参数可能如下:

参数名称

中文

参数值

Action

方法名

DescribeInstances

SecretId

密钥Id

AKIDz8krbsJ5yKBZQpn74WFkmLPx3EXAMPLE

Timestamp

当前时间戳

1465185768

Nonce

随机正整数

11886

Region

实例所在区域

ap-guangzhou

InstanceIds.0

待查询的实例ID

ins-09dx96dg

Offset

偏移量

0

Limit

最大允许输出

20

Version

接口版本号

2017-03-12

对参数排序

首先对所有请求参数按参数名做字典序升序排列,所谓字典序升序排列,直观上就如同在字典中排列单词一样排序,按照字母表或数字表里递增顺序的排列次序,即先考虑第一个“字母”,在相同的情况下考虑第二个“字母”,依此类推。用户可以借助编程语言中的相关排序函数来实现这一功能,如php中的ksort函数。上述示例参数的排序结果如下:

{
    'Action' : 'DescribeInstances',
    'InstanceIds.0' : 'ins-09dx96dg',
    'Limit' : 20,
    'Nonce' : 11886,
    'Offset' : 0,
    'Region' : 'ap-guangzhou',
    'SecretId' : 'AKIDz8krbsJ5yKBZQpn74WFkmLPx3EXAMPLE',
    'Timestamp' : 1465185768,
    'Version': '2017-03-12',
}

使用其它程序设计语言开发时,可对上面示例中的参数进行排序,得到的结果一致即可。

拼接请求字符串

此步骤生成请求字符串。 将把上一步排序好的请求参数格式化成“参数名称”=“参数值”的形式,如对Action参数,其参数名称为"Action",参数值为"DescribeInstances",因此格式化后就为Action=DescribeInstances。 注意:“参数值”为原始值而非url编码后的值。

然后将格式化后的各个参数用"&"拼接在一起,最终生成的请求字符串为:

Action=DescribeInstances&InstanceIds.0=ins-09dx96dg&Limit=20&Nonce=11886&Offset=0&Region=ap-guangzhou&SecretId=AKIDz8krbsJ5yKBZQpn74WFkmLPx3EXAMPLE&Timestamp=1465185768&Version=2017-03-12
拼接签名原文字符串

此步骤生成签名原文字符串。 签名原文字符串由以下几个参数构成:

1) 请求方法: 支持 POST 和 GET 方式,这里使用 GET 请求,注意方法为全大写。 2) 请求主机:查看实例列表(DescribeInstances)的请求域名为:cvm.tencentcloudapi.com。实际的请求域名根据接口所属模块的不同而不同,详见各接口说明。 3) 请求路径: 当前版本云API的请求路径固定为 / 。 4) 请求字符串: 即上一步生成的请求字符串。

签名原文串的拼接规则为:

请求方法 + 请求主机 +请求路径 + ? + 请求字符串

示例的拼接结果为:

GETcvm.tencentcloudapi.com/?Action=DescribeInstances&InstanceIds.0=ins-09dx96dg&Limit=20&Nonce=11886&Offset=0&Region=ap-guangzhou&SecretId=AKIDz8krbsJ5yKBZQpn74WFkmLPx3EXAMPLE&Timestamp=1465185768&Version=2017-03-12
生成签名串

此步骤生成签名串。 首先使用 HMAC-SHA1 算法对上一步中获得的签名原文字符串进行签名,然后将生成的签名串使用 Base64 进行编码,即可获得最终的签名串。

具体代码如下,以 PHP 语言为例:

$secretKey = 'Gu5t9xGARNpq86cd98joQYCN3EXAMPLE';
$srcStr = 'GETcvm.tencentcloudapi.com/?Action=DescribeInstances&InstanceIds.0=ins-09dx96dg&Limit=20&Nonce=11886&Offset=0&Region=ap-guangzhou&SecretId=AKIDz8krbsJ5yKBZQpn74WFkmLPx3EXAMPLE&Timestamp=1465185768&Version=2017-03-12';
$signStr = base64_encode(hash_hmac('sha1', $srcStr, $secretKey, true));
echo $signStr;

最终得到的签名串为:

EliP9YW3pW28FpsEdkXt/+WcGeI=

使用其它程序设计语言开发时,可用上面示例中的原文进行签名验证,得到的签名串与例子中的一致即可。

签名串编码

生成的签名串并不能直接作为请求参数,需要对其进行 URL 编码。 注意:如果用户的请求方法是GET,则对所有请求参数值均需要做URL编码。 如上一步生成的签名串为 EliP9YW3pW28FpsEdkXt/+WcGeI= ,最终得到的签名串请求参数(Signature)为: EliP9YW3pW28FpsEdkXt%2f%2bWcGeI%3d ,它将用于生成最终的请求URL。

签名演示

在实际调用 API 3.0 时,推荐使用配套的腾讯云 SDK 3.0 ,SDK 封装了签名的过程,开发时只关注产品提供的具体接口即可。详细信息参见 SDK 中心。当前支持的编程语言有:

创建云硬盘

要创建云硬盘,我们可以使用以下参数:

接口请求域名: cbs.tencentcloudapi.com

本接口(CreateDisks)用于创建云硬盘。

  • 预付费云盘的购买会预先扣除本次云盘购买所需金额,在调用本接口前请确保账户余额充足。
  • 本接口支持传入数据盘快照来创建云盘,实现将快照数据复制到新购云盘上。
  • 本接口为异步接口,当创建请求下发成功后会返回一个新建的云盘ID列表,此时云盘的创建并未立即完成。可以通过调用DescribeDisks接口根据DiskId查询对应云盘,如果能查到云盘,且状态为'UNATTACHED'或'ATTACHED',则表示创建成功。

输入示例

https://cbs.tencentcloudapi.com/?Action=CreateDisks
&DiskType=CLOUD_BASIC
&DiskCount=1
&DiskSize=50
&Placement.Zone=ap-guangzhou-2
&Placement.ProjectId=0
&DiskChargeType=PREPAID
&DiskChargePrepaid.Period=1
&DiskChargePrepaid.RenewFlag=NOTIFY_AND_AUTO_RENEW
&<公共请求参数>

输出示例

{
  "Response": {
    "DiskIdSet": [
      "disk-lzrg2pwi"
    ],
    "RequestId": "6a57da9a-2049-7182-2de3-5a1f8014ccfd"
  }
}

查询云硬盘列表

要查看现在挂在了那些硬盘,可以使用下面的命令:

接口请求域名: cbs.tencentcloudapi.com

本接口(DescribeDisks)用于查询云硬盘列表。

  • 可以根据云硬盘ID、云硬盘类型或者云硬盘状态等信息来查询云硬盘的详细信息,不同条件之间为与(AND)的关系,过滤信息详细请见过滤器Filter
  • 如果参数为空,返回当前用户一定数量(Limit所指定的数量,默认为20)的云硬盘列表。

输入示例

https://cbs.tencentcloudapi.com/?Action=DescribeDisks
&Filters.0.Name=disk-usage
&Filters.0.Values.0=DATA_DISK
&Filters.1.Name=disk-state
&Filters.1.Values.0=ATTACHED
&<公共请求参数>

输出示例

{
  "Response": {
    "DiskSet": [
      {
        "Attached": true,
        "AutoRenewFlagError": false,
        "CreateTime": "2017-07-27 15:16:56",
        "DeadlineError": false,
        "DeadlineTime": "2017-10-27 15:17:05",
        "DifferDaysOfDeadline": -139,
        "DiskChargeType": "PREPAID",
        "DiskId": "disk-5w50lrms",
        "DiskName": "data1",
        "DiskSize": 10,
        "DiskState": "ATTACHED",
        "DiskType": "CLOUD_BASIC",
        "DiskUsage": "DATA_DISK",
        "Encrypt": false,
        "InstanceId": "ins-6p8zngem",
        "IsReturnable": false,
        "Placement": {
          "ProjectId": 10086,
          "Zone": "ap-guangzhou-2"
        },
        "Portable": true,
        "RenewFlag": "NOTIFY_AND_AUTO_RENEW",
        "ReturnFailCode": 2,
        "RollbackPercent": 0,
        "Rollbacking": false,
        "SnapshotAbility": true
      }
    ],
    "RequestId": "e63c7075-4b34-4825-9850-b19edb1eda89",
    "TotalCount": 1
  }
}

扩容云硬盘

有时您可能需要将云硬盘扩容到CVM,例如在调试需要大量日志的问题或创建某些时间限制数据的备份时。 在这些情况下,我们需要能够扩容一个块存储卷。

接口请求域名: cbs.tencentcloudapi.com

本接口(ResizeDisk)用于扩容云硬盘。

  • 只支持扩容弹性云盘。云硬盘类型可以通过DescribeDisks接口查询,见输出参数中Portable字段解释。随云主机创建的云硬盘需通过ResizeInstanceDisks接口扩容。
  • 本接口为异步接口,接口成功返回时,云盘并未立即扩容到指定大小,可通过接口DescribeDisks来查询对应云盘的状态,如果云盘的状态为“EXPANDING”,表示正在扩容中,当状态变为“UNATTACHED”,表示扩容完成。

将云硬盘扩容到200G

输入示例

https://cbs.tencentcloudapi.com/?Action=ResizeDisk
&DiskId=disk-lzrg2pwi
&DiskSize=200
&<公共请求参数>

输出示例

{
  "Response": {
    "RequestId": "adefc06d-2cf1-29f6-24a6-5a1f81b5c0ac"
  }
}

解挂云硬盘

接口请求域名: cbs.tencentcloudapi.com

本接口(DetachDisks)用于解挂云硬盘。

  • 支持批量操作,解挂挂载在同一主机上的多块云盘。如果多块云盘存在不允许解挂载的云盘,则操作不执行,以返回特定的错误码返回。
  • 本接口为异步接口,当请求成功返回时,云盘并未立即从主机解挂载,可通过接口DescribeDisks来查询对应云盘的状态,如果云盘的状态由“ATTACHED”变为“UNATTACHED”,则为解挂载成功。

解挂单块云硬盘

输入示例

https://cbs.tencentcloudapi.com/?Action=DetachDisks
&DiskIds.0=disk-lzrg2pwi
&<公共请求参数>

输出示例

{
  "Response": {
    "RequestId": "aafa71a0-ed62-0fac-3ebf-5a1f808d1085"
  }
}

退还云硬盘

当您不再需要某个云硬盘云硬盘卷时,可以将其退还,然后将其从您的帐户中删除。

接口请求域名: cbs.tencentcloudapi.com

本接口(TerminateDisks)用于退还云硬盘。

  • 不再使用的云盘,可通过本接口主动退还。
  • 本接口支持退还预付费云盘和按小时后付费云盘。按小时后付费云盘可直接退还,预付费云盘需符合退还规则。
  • 支持批量操作,每次请求批量云硬盘的上限为50。如果批量云盘存在不允许操作的,请求会以特定错误码返回。

批量退还云硬盘

输入示例

https://cbs.tencentcloudapi.com/?Action=TerminateDisks
DiskIds.0=disk-lzrg2pwi
DiskIds.1=disk-g27hqeo2
&<公共请求参数>

输出示例

{
  "Response": {
    "RequestId": "52c965d2-5deb-459a-8b5a-b3b9a1376544"
  }
}

结论

在本教程中,我们学习了在CVM中如何使用腾讯云API添加,扩容,退还,列出和删除云硬盘。

如果您已经知道如何执行此操作,那么您可能还需要学习创建脚本并将这些脚本添加到您喜欢的自动化工具中,例如JenkinsDrone


参考文献:《腾讯云云硬盘API文档》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏日常学python

如何爬取asp动态网页?搞定可恶的动态参数,这一文告诉你!

这个asp网站是我的学校的电费查询系统,需要学校的内网才能查询,所以这文说下思路和我遇到的一些坑。我搞这个网站主要是为了方便查电费而已,其实也方便不了多少。而且...

33030
来自专栏安富莱嵌入式技术分享

【二代示波器教程】第13章 RTX操作系统版本二代示波器实现

本章教程为大家讲解RTX操作系统版本的二代示波器实现。主要讲解RTOS设计框架,即各个任务实现的功能,任务间的通信方案选择,任务栈,系统栈以及全局变量共享问题。...

19120
来自专栏菩提树下的杨过

thrift中的超时(timeout)坑

最近在项目中采用thrift作为后台服务rpc框架,总体用下来性能还不错,跨语言特性使用起来也还行,但是也遇到了一些坑,其中之一就是超时问题(timeout),...

75090
来自专栏FreeBuf

在渗透测试中使用fuzz技术(附windows安装指南)

前言:本文翻译自‍‍‍‍sans.org,有删节。在学习sulley的过程中发现中文参考资料很少,所以抛砖引玉翻译一下,希望对学习协议fuzz测试的同学有帮助。...

31470
来自专栏比原链

剥开比原看代码17:比原是如何显示交易的详细信息的?

Gitee地址:https://gitee.com/BytomBlockchain/bytom

8810
来自专栏java技术学习之道

Java 11 新功能来了!

53540
来自专栏Golang语言社区

用 Go 写一个轻量级的 ssh 批量操作工具

大家都知道 Ansible 是功能超级强大的自动化运维工具,十分的高大上。太高大上了以至于在低端运维有点水土不服,在于三点:

88520
来自专栏FreeBuf

工业控制系统安全之——Modbus学习笔记

O、术语 1 word =2 byte; 1 byte =8 bit. 校验码:校验码是由前面的数据通过某种算法得出的,用以检验该组数据的正确性。代码作为数据在...

959100
来自专栏酷玩时刻

t-io 集群解决方案以及源码解析

本博客是基于谭总 t-io showcase中的tio-websocket-showcase 示例来实现集群。看showcase 入门还是挺容易的,入坑(入门)...

13620
来自专栏程序员的SOD蜜

单数据库,多数据库,单实例,多实例不同情况下的数据访问效率测试

最近公司的项目准备优化一下系统的性能,希望在数据库方面看有没有提升的空间,目前压力测试发现数据库服务器压力还不够大,Web服务器压力也不是很大的情况下,前台页面...

270100

扫码关注云+社区

领取腾讯云代金券