如何使用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,选中

这个时候我们的Service Principal就准备好了,接下来可以用这个Service Principal调用API

调用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
{"token_type":"Bearer","expires_in":"3599","ext_expires_in":"3599","expires_on":"1593514291","not_before":"1593510391","
resource":"https://management.chinacloudapi.cn/","access_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Im9CaExHLXB
MUXBFUmVQems1Nzh3ZXpsVVozNCIsImtpZCI6Im9CaExHLXBMUXBFUmVQems1Nzh3ZXpsVVozNCJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY2hpbm
FjbG91ZGFwaS5jbi8iLCJpc3MiOiJodHRwczovL3N0cy5jaGluYWNsb3VkYXBpLmNuL2MyYzE0MWU2LTljYTYtNGQ2Yy05Y2NjLTM1NjM3NmU2ZjQ1Yy8iLC
JpYXQiOjE1OTM1MTAzOTEsIm5iZiI6MTU5MzUxMDM5MSwiZXhwIjoxNTkzNTE0MjkxLCJhaW8iOiJZMmRnWUxCOE4wbDMvN2xmTDdMWTVoMnhhWTVpQndBPS
IsImFwcGlkIjoiNGM1MzRlMjYtMmU2ZC00OTQ1LWE2NjItYTY4Y2I1YjFhM2VkIiwiYXBwaWRhY3IiOiIxIiwiaWRwIjoiaHR0cHM6Ly9zdHMuY2hpbmFjbG
91ZGFwaS5jbi9jMmMxNDFlNi05Y2E2LTRkNmMtOWNjYy0zNTYzNzZlNmY0NWMvIiwib2lkIjoiNjA0OWMwNjQtNWYyZC00NzIyLWJmODctYzVlNGVmYmUzNm
MyIiwic3ViIjoiNjA0OWMwNjQtNWYyZC00NzIyLWJmODctYzVlNGVmYmUzNmMyIiwidGlkIjoiYzJjMTQxZTYtOWNhNi00ZDZjLTljY2MtMzU2Mzc2ZTZmND
VjIiwidXRpIjoiTjNWLXB3VWM3VXVtZ182VEhWQUlBQSIsInZlciI6IjEuMCJ9.TnTPw3dI429uJuXALSMF3oaZZ2LviD5YH3vnL3zjXnCmO3psLhMSkp1Ag
KKuLGr9RfHPDBgS6c1e6gVeNO9jm3JJSIU7OKDCMoRf0qMYpU-yapkPbArF1E_QBHBueMT-enqy3yZSw0TE5QOmudhW-j6IagnjqpnNUsaZ8FATpQd5IBDGf
RGetc69TX5BSphNzsM_X_uLbZ0sS1ROk_w1GsoJfnQSDE6ALuZHV5aRDPs8k3-sJtvO1SjgCOLRyjrnuYhvaT4k4QXdJTH_EWjhF-eMtf9NBXYBLiA8_SiXr
pzvyMTh4vS77xF9SFWNKE75eD6PXH55EA47s4j96sthwg"}

接下来就是正式创建虚拟机了

首先我们需要给虚拟机准备好虚拟网络。简单起见我这边就用现成的,名为mysql-vnet的虚拟网络,子网为default

image.png

接下来需要为虚机准备网卡,创建网卡的API介绍可以在这里找到
https://docs.microsoft.com/en-us/rest/api/virtualnetwork/networkinterfaces/createorupdate
首先我们配置好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的话会多一些步骤,后面还是比较直观的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,026评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,655评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,726评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,204评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,558评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,731评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,944评论 2 314
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,698评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,438评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,633评论 2 247
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,125评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,444评论 3 255
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,137评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,103评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,888评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,772评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,669评论 2 271