一、华为云IAM认证鉴权及服务API调用

《定时开关华为公有云虚拟机方法总结》篇幅中有提过,通过apiexplorer可以很方便的进行应用创建调用。不过有些云服务还没有上线apiexplorer,这时候就需要通过原始的API进行调用了。
比如在香港站点Functiongraph开通LTS日志,就可以通过API进行调用开通,具体shell指令如下:

1token=`curl -X POST -H 'Content-Type:application/json' -d '{"auth":{"identity":{"methods":["password"],"password":{"user":{"name":"IAM用户名","password":"帐户密码","domain":{"name":"主帐号名称"}}}},"scope":{"project":{"name":"ap-southeast-1"}}}}' -i https://iam.ap-southeast-1.myhuaweicloud.com/v3/auth/tokens -k -s |grep X-Subject-Token | awk -F ': ' '{print $2}'`
2curl -X POST -H "X-Auth-Token:$token" -H "Content-Type:application/json;charset=utf-8" -i https://functiongraph.ap-southeast-1.myhuaweicloud.com/v2/0de61da60f00f3952f87c003fd9cd8f0/fgs/functions/enable-lts-logs

第一条命令是通过IAM服务获取token信息,第二条命令是使用token信息在functiongraph的endpoint节点上调用LTS日志开通功能。
由于在云帐号中存在IAM帐号和主帐号的概念,如果在公司里是分开创建的,这里的用户名会不一样,如果只有一个帐号,没有创建IAM帐号,这里的两个用户名称是一致的。

认证鉴权可以参考页面:https://support.huaweicloud.com/intl/zh-cn/api-functiongraph/functiongraph_06_0230.html
Endpoint信息可以参考:https://developer.huaweicloud.com/endpoint

二、通过API创建虚拟机

创建ECS云服务器的参考页面为:https://support.huaweicloud.com/intl/zh-cn/api-ecs/ecs_02_0101.html
ECS服务器数据结构页面为:https://support.huaweicloud.com/intl/zh-cn/eu-west-0-api-ecs/zh-cn_topic_0167957246.html

由于token值的获取方法在第一部分已做了介绍,这里直接上ECS的请求体:

 1{
 2    "server": {
 3        "availability_zone":"az1", //可用区名称,该项有问题
 4        "adminPass": "P@ssw0rd123",
 5        "name": "newserver",
 6        "imageRef": "6f1ca74e-95b6-419d-95db-f649cca82379",
 7        "root_volume": {
 8            "volumetype": "SSD"
 9        },
10        "data_volumes": [
11            {
12                "volumetype": "SSD",
13                "size": 100
14            },
15            {
16                "volumetype": "SSD",
17                "size": 100,
18                "multiattach": true,
19                "hw:passthrough": true
20            }
21        ],
22        "flavorRef": "s6.medium.2",
23        "vpcid": "25728479-c5ad-470b-8d38-a1954ac24daa",
24        "security_groups": [
25            {
26                "id": "5af58fa9-fe9b-4453-8013-c6e4b3b1413f"
27            }
28        ],
29        "nics": [
30            {
31                "subnet_id": "e674b889-8731-48e4-9586-a030e624ac18"
32            }
33        ],
34        "key_name": "",
35        "count": 1,
36        "metadata": {},
37        "extendparam": {
38            "chargingMode": "postPaid",
39            "enterprise_project_id": "0"
40        }
41    }
42}

上面的请求体创建ECS时有个问题:上面的请求体执行时需要去掉availability_zone部分,该部分加上会提示对应的AZ不存在,这个需要后续确认原因。

huaweicloud API create ecs
huaweicloud API create ecs

当把multiattach结构体部分去掉后,对应创建的虚拟机信息如下:
ecs create volume
ecs create volume

PS:AZ参数问题核查
通过另外一个接口查询发现,在web界面上看到的AZ1、AZ2,在后台数据提交时,不是这个名称,后来又看了查询AZ的接口,通过调用发现,在测试用的智利圣地亚哥region,AZ1对应的名称是la-south-2a,AZ2对应的名称是la-south-2b,显然ECS创建页面的文档给的有误导性,也不太完善,应该附上获取AZ的链接页面。AZ链接查询的结果信息如下:

os availability zone
os availability zone

用上面获取的AZ值替换json体中的AZ值即可。