【问题标题】:windows azure rest api - creating a virtual machinewindows azure rest api - 创建虚拟机
【发布时间】:2013-07-30 15:14:24
【问题描述】:

我正在研究使用 Windows Azure REST API 在 Windows Azure 环境中创建虚拟机。查看 Windows Azure REST API reference 我看到应该发出 POST 请求的 URL 是:

https://management.core.windows.net/<subscription-id>/services/hostedservices/<cloudservice-name>/deployments/<deployment-name>/roles

我在这里的困惑是关于&lt;cloudservice-name&gt;&lt;deployment-name&gt; 的需要。事实上,如果我直接登录到我的 Windows Azure 订阅门户并通过菜单创建虚拟机,我不必指定云服务名称或部署名称。我所做的就是为 VM 选择一个映像(centos、ubuntu、windows 等),为 VM 选择一个风格(xsmall、small、large 等),然后单击“Create”,几分钟后就创建了 VM .

鉴于我可以通过这种方式创建 VM,我无法理解为什么我必须在 REST API curl 调用中传递 &lt;cloudservice-name&gt;&lt;deployment-name&gt; 参数,以及要传递给这些参数的值。事实上,我的订阅中没有部署,我也不打算拥有一个。我想要的只是创建一个我可以使用的虚拟机。

我是否可以跳过这些参数而仍然能够在我的 Azure 订阅中创建虚拟机?即仅通过传递&lt;subscription-id&gt;?

以前使用过 Windows Azure REST API 的人或具有 Windows Azure 专业知识的人能否对此有所了解并帮助澄清?

2013 年 7 月 31 日星期三更新:再次感谢您对我的问题的反馈。我想更新一下,我能够使用 REST API 调用最终创建虚拟机。但奇怪的是,成功创建虚拟机只成功了一次。随后,当我尝试创建具有不同名称的 VM 时,它给出了一个错误,例如“暂存部署被阻止”。因此,出于理智的考虑,我继续删除了现有的 VM,并进行了一些帐户清理。我尝试了 POST 操作以再次创建 VM,现在发生的情况是 POST 响应以 202 Accepted 消息返回正常,但尽管如此,我没有看到在我的 Azure 帐户中创建 VM。我不知道从哪里以及如何开始解决这个问题,因为我既没有收到错误,也没有创建 VM。

我在整个 XML 请求正文下方发布以创建 VM:

<Deployment xmlns="http://schemas.microsoft.com/windowsazure" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <Name>Staging</Name>
  <DeploymentSlot>Staging</DeploymentSlot>
  <Label>stk_curl_label_1</Label>
  <RoleList>
    <Role>
      <RoleName>stk_curl_role_1</RoleName>
      <RoleType>PersistentVMRole</RoleType>
      <ConfigurationSets>
        <ConfigurationSet>
          <ConfigurationSetType>WindowsProvisioningConfiguration</ConfigurationSetType>
          <ComputerName>stkVm1</ComputerName>
          <AdminPassword>Password123</AdminPassword>
          <EnableAutomaticUpdates>false</EnableAutomaticUpdates>
        </ConfigurationSet>
      </ConfigurationSets>
      <OSVirtualHardDisk>
        <HostCaching>ReadWrite</HostCaching>
        <DiskLabel>Visual studio ultimate</DiskLabel>
        <DiskName>stk_disk_1</DiskName>
        <MediaLink>http://stk11.blob.core.windows.net/communityimages/visual_studio_ultimate.vhd</MediaLink>
        <SourceImageName>03f55de797f546a1b29d1b8d66be687a__Visual-Studio-2013-Preview-Ultimate-12.0.20617.1</SourceImageName>
      </OSVirtualHardDisk>
      <RoleSize>ExtraSmall</RoleSize>
    </Role>
  </RoleList>
</Deployment>

我粘贴在 curl 调用响应的尾部下方:

> User-Agent: curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5
> Host: management.core.windows.net
> Accept: */*
> x-ms-version: 2012-03-01
> Content-Type: application/xml
> Content-Length: 1236
> Expect: 100-continue
>
* SSLv3, TLS handshake, Hello request (0):
SSLv3, TLS handshake, Client hello (1):
SSLv3, TLS handshake, Server hello (2):
SSLv3, TLS handshake, CERT (11):
SSLv3, TLS handshake, Request CERT (13):
SSLv3, TLS handshake, Server finished (14):
SSLv3, TLS handshake, CERT (11):
SSLv3, TLS handshake, Client key exchange (16):
SSLv3, TLS handshake, CERT verify (15):
SSLv3, TLS change cipher, Client hello (1):
SSLv3, TLS handshake, Finished (20):
SSLv3, TLS change cipher, Client hello (1):
SSLv3, TLS handshake, Finished (20):
HTTP/1.1 100 Continue
HTTP/1.1 202 Accepted
< Cache-Control: no-cache
< Content-Length: 0
< Server: 33.0.6198.68 (rd_rdfe_stable.130710-0833) Microsoft-HTTPAPI/2.0
< x-ms-servedbyregion: ussouth
< x-ms-request-id: b2f3dd01319049a5a6728bbdbcde6c4a
< Date: Wed, 31 Jul 2013 17:26:54 GMT
* Connection #0 to host management.core.windows.net left intact
* Closing connection #0
* SSLv3, TLS alert, Client hello (1):

您可以清楚地看到,这是一个“202 Accepted”响应。但正如我之前提到的,尽管如此,当我检查我的 Azure 帐户时,我没有看到正在创建 VM。

对于如何找出导致其无法按预期工作的根本原因的任何专家见解/想法是否值得赞赏?

【问题讨论】:

  • 一个 202 响应是预期的,对于创建虚拟机部署调用是正常的。该操作是异步的。收到 202 后,您可以使用打包到收到的 202 响应中的请求 ID 轮询服务以完成操作。

标签: rest azure virtual-machine


【解决方案1】:

您所看到的是门户幕后的一个小魔法。当您部署虚拟机时,它确实最终位于云服务容器中。这最近在门户中也变得更加明显,以前他们对你隐藏了这一点。当人们删除 VM 或将其他 VM 添加到同一组(以前称为“附加到”之类的东西)时,云服务将显示在门户中。人们对这是什么感到困惑,它引起的问题多于它的价值。

现在在门户中提示您提供云服务。如果您在请求 DNS 名称(并在其旁边显示 .cloudapp.net)时进行快速创建,这就是您提供的云服务名称。当您通过 Gallery 进行创建时,在第 3 步中更明显的是要求创建一个新的云服务或选择一个已经存在的云服务。

要通过 REST API 执行您想要的操作,您需要提前创建云服务,或者在创建 VM 之前作为调用。此外,您提供的链接用于添加云服务角色,而不是创建虚拟机。对于该 REST API 调用,您需要使用:http://msdn.microsoft.com/en-us/library/windowsazure/jj157194.aspx 它仍然需要云服务,但不需要部署名称。

【讨论】:

  • 感谢您的详细回复。那是你所做的对我的一些教育。我不知道“幕后”的东西。在深入研究了更多细节之后,我能够提交 VM 部署请求。但我现在收到以下错误:schemas.microsoft.com/windowsazure" xmlns:i="w3.org/2001/… target URI is specified for image 03f55de797f546a1b29d1b8d66be687a__Visual-Studio-2013-Preview-Ultimate-12.0.20617.1.错误>
  • 如何找到图像的目标 URI?它似乎没有作为我使用以下 curl 调用进行的列表图像调用的一部分返回。 curl -E azure-cert.pem -H "x-ms-version: 2013-03-01" "management.core.windows.net/my-subscription-id/services/images" 抱歉,这是我第一次使用 stackoverflow。我是使用 cmets 部分来讨论更多还是..?请指导我。
  • stackoverflow.com/questions/11525988/… 看,我似乎缺少 标记。但问题是我从哪里获得 MediaLink 的价值。如果我不应该在 cmets 中发布这些内容,再次抱歉。请指导正确的做法。
  • 如果您发布了您发送的完整有效负载减去密码、存储帐户名称等任何敏感位,这将有所帮助。就像该人在另一个问题中所做的那样。另外,我认为如果您使用新信息更新问题本身会有所帮助,只要它仍然是同一个问题。我认为您遇到的问题属于同一个问题;但是,如果您通过门户突然询问如何安装或执行此操作,则应该发布一个不同的问题并根据您认为合适的方式对此处提供的答案进行评分。
  • 查看msdn.microsoft.com/en-us/library/windowsazure/jj157194.aspx 的文档。如果您提供指向图库中 Azure 特定图像的 SourceImageName,则必须提供 MediaLink URL。这是一个 URI,将在其中创建一个新的 VHD,这将是您的 OSDisk。您创建的 URL 指向您的一个存储帐户,该帐户属于您在其中创建 VM 的同一订阅。在示例中,您指出它们指向一个名为 vhds 的容器,您只需提供您想要 VHD 的名称成为。该操作将创建 VHD。
【解决方案2】:

有 2 种不同的 API,一种用于创建部署和云服务下的 VM,另一种用于向您之前创建的部署添加角色。

这是 2 个 API

用于虚拟机部署

http://msdn.microsoft.com/en-us/library/azure/jj157194.aspx

对于部署中的角色

http://msdn.microsoft.com/en-us/library/azure/jj157186.aspx

您使用的是第二个,您首先需要使用第一个 API 创建 VM 部署,然后使用第二个在同一个云服务中添加更多角色。

【讨论】:

    【解决方案3】:

    我在添加角色时遇到了同样的问题,我返回了 202 接受但没有创建虚拟机。经过几个小时试图找出问题所在,我发现在管理门户上他们有这些 MANAGEMENT SERVICES -> 操作日志,其中显示了所有 API 调用的日志。

    在这里,我的添加角色 API 调用告诉我这是一个 404 错误请求,而不是 202 接受,它也向我显示了具体错误。

    管理服务 -> 操作日志在您被 API 卡住时非常有用。

    【讨论】:

    • 这帮助很大。 XML 正文有一百万个参数/依赖项,因此了解为什么我的虚拟机没有被创建是让它工作的关键。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 2019-05-24
    • 2019-08-13
    • 1970-01-01
    相关资源
    最近更新 更多