前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何使用腾讯云云硬盘API

如何使用腾讯云云硬盘API

原创
作者头像
好烟
发布2018-08-13 11:21:31
4.9K0
发布2018-08-13 11:21:31
举报

介绍

腾讯云控制台允许您以类似于使用硬盘驱动器的方式管理腾讯云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 。

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

代码语言:javascript
复制
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函数。上述示例参数的排序结果如下:

代码语言:javascript
复制
{
    '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编码后的值。

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

代码语言:javascript
复制
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) 请求字符串: 即上一步生成的请求字符串。

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

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

示例的拼接结果为:

代码语言:javascript
复制
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 语言为例:

代码语言:javascript
复制
$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;

最终得到的签名串为:

代码语言:javascript
复制
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',则表示创建成功。
输入示例

代码语言:javascript
复制
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
&<公共请求参数>

输出示例

代码语言:javascript
复制
{
  "Response": {
    "DiskIdSet": [
      "disk-lzrg2pwi"
    ],
    "RequestId": "6a57da9a-2049-7182-2de3-5a1f8014ccfd"
  }
}

查询云硬盘列表

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

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

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

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

代码语言:javascript
复制
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
&<公共请求参数>

输出示例

代码语言:javascript
复制
{
  "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

输入示例

代码语言:javascript
复制
https://cbs.tencentcloudapi.com/?Action=ResizeDisk
&DiskId=disk-lzrg2pwi
&DiskSize=200
&<公共请求参数>

输出示例

代码语言:javascript
复制
{
  "Response": {
    "RequestId": "adefc06d-2cf1-29f6-24a6-5a1f81b5c0ac"
  }
}

解挂云硬盘

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

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

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

解挂单块云硬盘

输入示例

代码语言:javascript
复制
https://cbs.tencentcloudapi.com/?Action=DetachDisks
&DiskIds.0=disk-lzrg2pwi
&<公共请求参数>

输出示例

代码语言:javascript
复制
{
  "Response": {
    "RequestId": "aafa71a0-ed62-0fac-3ebf-5a1f808d1085"
  }
}

退还云硬盘

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

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

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

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

批量退还云硬盘

输入示例

代码语言:javascript
复制
https://cbs.tencentcloudapi.com/?Action=TerminateDisks
DiskIds.0=disk-lzrg2pwi
DiskIds.1=disk-g27hqeo2
&<公共请求参数>

输出示例

代码语言:javascript
复制
{
  "Response": {
    "RequestId": "52c965d2-5deb-459a-8b5a-b3b9a1376544"
  }
}

结论

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

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


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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 准备
    • 硬盘准备:
      • 接口准备:
      • 创建云硬盘
      • 查询云硬盘列表
      • 扩容云硬盘
        • 将云硬盘扩容到200G
          • 解挂云硬盘
            • 解挂单块云硬盘
          • 退还云硬盘
            • 批量退还云硬盘
          • 结论
          相关产品与服务
          对象存储
          对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档