1如何使用Azure Rest API创建虚拟机
Posted 六里路
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1如何使用Azure Rest API创建虚拟机相关的知识,希望对你有一定的参考价值。
云上资源的特点灵活,按需部署,自然少不了自动化的支持,Azure除了CLI, SDK之外,我们也有Rest API的支持。那么今天就介绍一下Rest API如何创建虚机
准备Service Principal
调用之前我们需要准备一套Service Principal,也就是登录的身份。如果安装了Azure CLI的话,非常简单,只需要执行下面的CLI命令就可以创建好了,调用完我们需要记住AppId,Password还有Tenant.
kele@cnkelwan:~$ az ad sp create-for-rbac --name aadclient Changing "aadclient" to a valid URI of "http://aadclient", which is the required format used for service principal names Creating a role assignment under the scope of "/subscriptions/758754b6-cfda-4106-bcf1-d78e6d54d41e" Retrying role assignment creation: 1/36 AppId DisplayName Name Password Tenant ------------------------------------ ------------- ---------------- ------------------------------------ ------------------------------------ e54485d1-8133-4fc***-36cb17f16300 aadclient http://aadclient 328b8bc5-2d76-47f9-9ea6-ea452***de2 c2c1***-9ca6-4d6c-9ccc-356376e6f45c
如果没有安装CLI
没有CLI的话,那就需要去portal上创建App,步骤比较多
首先按照下图进入Azure Active Directory
新注册一个应用
按下图填写具体的参数
注册好了添加密码
密码添加好了记住这个值(这个值只有刚创建的时候能看到,之后就是下图所示有掩码了)
回到创建好的App的概述页,记下AppID(程序ID)和Tenant ID(目录ID)
这时候APP已经创建好了,我们还需要给他赋予订阅的权限
去到订阅里面
添加角色分配
角色选择参与者,按照App名字搜索刚才创建的App,选中
调用Rest API
首先要通过这个API获得Access Token,把下面大括号里的字替换成前面记下来的值(注意:大括号本身要记得去掉),返回的 "access_token"后面这一串字符就是我们的token了。记下来。
kele@cnkelwan:~$ curl -X POST -d \'grant_type=client_credentials&client_id={程序ID}&client_secret={密码}&resource=https%3A%2F%2Fmanagement.chinacloudapi.cn%2F\' / https://login.partner.microsoftonline.cn/{目录ID}/oauth2/token
接下来就是正式创建虚拟机了
首先我们需要给虚拟机准备好虚拟网络。简单起见我这边就用现成的,名为mysql-vnet的虚拟网络,子网为default
首先我们配置好Request Body(也就是网卡的一些参数)
创建一个文件createnic.json,内容如下,其中大括号内为需要替换成对应环境的参数
{ "properties": { "ipConfigurations": [ { "name": "ipconfig1", "properties": { "subnet": { "id": "/subscriptions/{758754b6-cfda-4106-bcf1-d78e6d54d41e订阅ID}/resourceGroups/{mysql资源组名称}/providers/Microsoft.Network/virtualNetworks/{mysql-vnet虚拟网络名称}/subnets/{default子网名称}" } } } ]}, "location": "{chinanorth2所在区域}" }
准备好了配置文件,执行下面Curl命令即可创建网卡
curl -H "Authorization: Bearer {前面记下来的Access Token}" -H "Content-Type: application/json" -X PUT https://management.chinacloudapi.cn/subscriptions/{758754b6-cfda-4106-bcf1-d78e6d54d41e 订阅名称}/resourceGroups/{mysql 资源组名称}/providers/Microsoft.Network/networkInterfaces/{test-nic2 网卡名称}?api-version=2020-05-01 -d @createnic.json
这就成功创建好了网卡。接下来再根据创建虚机的API
https://docs.microsoft.com/en-us/rest/api/compute/virtualmachines/createorupdate
同理我们先创建虚机的配置文件
createvm.json
{ "location": "chinanorth2", "properties": { "hardwareProfile": { "vmSize": "Standard_D1_v2{虚机型号}" }, "storageProfile": { "imageReference": { "sku": "2016-Datacenter{操作系统SKU}", "publisher": "MicrosoftWindowsServer", "version": "latest", "offer": "WindowsServer" }, "osDisk": { "caching": "ReadWrite", "managedDisk": { "storageAccountType": "Standard_LRS{磁盘类型}" }, "name": "myVMosdisk", "createOption": "FromImage" } }, "osProfile": { "adminUsername": "kele{虚拟机用户名}", "computerName": "myVM{虚拟机主机名}", "adminPassword": "****{虚拟机密码}" }, "networkProfile": { "networkInterfaces": [ { "id": "/subscriptions/758754b6-cfda-4106-bcf1-d78e6d54d41e/resourceGroups/mysql/providers/Microsoft.Network/networkInterfaces/test-nic{前面创建的网卡}", "properties": { "primary": true } } ] } } }
再执行命令,(记得参数替换成对应环境的)
curl -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Im9CaExHLXBMUXBFUmVQems1Nzh3ZXpsVVozNCIsImtpZCI6Im9CaExHLXBMUXBFUmVQems1Nzh3ZXpsVVozNCJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY2hpbmFjbG91ZGFwaS5jbi8iLCJpc3MiOiJodHRwczovL3N0cy5jaGluYWNsb3VkYXBpLmNuL2MyYzE0MWU2LTljYTYtNGQ2Yy05Y2NjLTM1NjM3NmU2ZjQ1Yy8iLCJpYXQiOjE1OTM1MTMyOTgsIm5iZiI6MTU5MzUxMzI5OCwiZXhwIjoxNTkzNTE3MTk4LCJhaW8iOiJZMmRnWU5nODYva05VY2NpNHpyMnU0dEtmK2xNQndBPSIsImFwcGlkIjoiZDhiMTVjZTEtMTgzZC00MjY4LTg2OTItYzU2NWNiMTkzYjUzIiwiYXBwaWRhY3IiOiIxIiwiaWRwIjoiaHR0cHM6Ly9zdHMuY2hpbmFjbG91ZGFwaS5jbi9jMmMxNDFlNi05Y2E2LTRkNmMtOWNjYy0zNTYzNzZlNmY0NWMvIiwib2lkIjoiNjQwNWVkMTUtNjQ5Ny00MWViLTgxZTgtOGViYTZlMzQwMGZkIiwic3ViIjoiNjQwNWVkMTUtNjQ5Ny00MWViLTgxZTgtOGViYTZlMzQwMGZkIiwidGlkIjoiYzJjMTQxZTYtOWNhNi00ZDZjLTljY2MtMzU2Mzc2ZTZmNDVjIiwidXRpIjoidHhpR05oMm9mRXFmMFNJRlVtNTRBQSIsInZlciI6IjEuMCJ9.Hgg2w1V4k-5rEszdlrb93Nt_fAvPkfzdNBR9PPoiBM5iUwYSFxJTWBDvKtewvEovQxkmvV-VbzRIFv5oALHHh4aO5qJ6xWQbRQpqgMGnDG0Ojz4GkyCbEAZO-e51VoPdlyAlDN8YlX1D9fF3kueHDLDB8CccHFxJi6djk9BD3yFMJjWkrPVNMgzyDRQS_XAA8V1SW7FWLWflpCzbBeMhyMmHGhPoaJVhvtkjONvb2rJs45h79g3LLfZ09w07gVYjq-aLYMIhi-cIhx4kcNEWqAfQEvYQjUDC1a-VtGet9b_8favMsGTKy4mUs53XYCoA4gEOWyrbHDwc2SZ9Su_yFg" -H "Content-Type: application/json" -X PUT https://management.chinacloudapi.cn/subscriptions/758754b6-cfda-4106-bcf1-d78e6d54d41e{订阅ID}/resourceGroups/mysql{资源组名}/providers/Microsoft.Compute/virtualMachines/vmtest01{虚机名}?api-version=2019-12-01 -d @createvm.json
虚机就创建好了。
当然实际的情况中,可能我们还有NSG, Disk等特殊配置的需求,这些我们也都是可以通过RestAPI的方式来完成的。具体的文档可以去这里查阅
https://docs.microsoft.com/en-us/rest/api/azure/
总结
可以看到,除了刚开始需要准备一个Service Principal如果没有CLI的话会多一些步骤,后面还是比较直观的
以上是关于1如何使用Azure Rest API创建虚拟机的主要内容,如果未能解决你的问题,请参考以下文章
使用 Azure REST API 检索 Linux 虚拟机的存储使用情况
如何使用REST API将文件存储卷安装到azure容器实例
Azure DevOps REST API - 选项列表如何与字段关联?
使用 REST API 创建自动化作业以执行 azure Runbook
请求令牌时如何在 Azure 存储 Blob 中为 REST 请求指定范围? [AZURE-BLOB][REST API]