【问题标题】:Unable to create AZURE VM programmatically无法以编程方式创建 AZURE VM
【发布时间】:2012-09-24 05:18:40
【问题描述】:

我们正在尝试使用 Azure 公开的 REST API 通过 Java 中的 HTTPClient 创建虚拟机。我们正在使用以下请求 URL 和 XML,但我们收到“错误请求”响应。

https://management.core.windows.net/{subscription-id}/services/hostedservices/{existing hoster service name}/deployments

<Deployment xmlns="http://schemas.microsoft.com/windowsazure" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <Name>TestVMAnandP</Name>
  <Label>bXl2bQ==</Label>
  <RoleList>
    <Role>
      <RoleName>TestVMAnandP</RoleName>
      <RoleType>PersistentVMRole</RoleType>
      <ConfigurationSets>
        <ConfigurationSet>
          <ConfigurationSetType>LinuxProvisioningConfiguration</ConfigurationSetType>
          <HostName>TestVMAnandP</HostName>
          <UserName>root</UserName>
          <UserPassword>test</UserPassword>
        </ConfigurationSet>
      </ConfigurationSets>
      <DataVirtualHardDisks>
        <DataVirtualHardDisk>
          <Lun>10</Lun>
          <LogicalDiskSizeInGB>50</LogicalDiskSizeInGB>
        </DataVirtualHardDisk>
      </DataVirtualHardDisks>
      <OSVirtualHardDisk>
        <SourceImageName>srini2-srini2-2012-08-23.vhd</SourceImageName>
        <MediaLink>http://sriniteststore.blob.core.windows.net/vhds/srini2-srini2-2012-08-23.vhd</MediaLink>
      </OSVirtualHardDisk>
      <RoleSize>ExtraSmall</RoleSize>
    </Role>
  </RoleList>
  <VirtualNetworkName>MyNetwork</VirtualNetworkName>
</Deployment>

如果我们尝试在 URL 中提供与 vm 名称相同的服务名称,则会收到 404 错误。我们已经尝试了网络中给出的大多数示例,并替换了值,但一切都给了我们 400 错误。如果我们能得到一些帮助,那就太好了。

错误:

我得到了两种不同的错误:


Error 1 : When i use new <service-name> inside the below URL .management.core.windows.net/<subscription-id>/services/hostedservices/<service-name>/deployments/                          -------------------------------------------------------------------   Response message--->Not Found---404
java.io.FileNotFoundException: management.core.windows.net/84cc18f5-5bdd-4c95-9d69-862c12c53507/services/hostedservices/anand/deployments
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
Caused by: java.io.FileNotFoundException: management.core.windows.net/84cc18f5-5bdd-4c95-9d69-862c12c53507/services/hostedservices/anand/deployments
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)

Error 2 : when i use an existing available <service-name> in the below URL  management.core.windows.net/<subscription-id>/services/hostedservices/<service-name>/deployments/                                                   
Response message--->Bad Request---400
java.io.IOException: Server returned HTTP response code: 400 for URL: management.core.windows.net/84cc18f5-5bdd-4c95-9d69-862c12c53507/services/hostedservices/azurecogservice/deployments
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
Caused by: java.io.IOException: Server returned HTTP response code: 400 for URL: management.core.windows.net/84cc18f5-5bdd-4c95-9d69-862c12c53507/services/hostedservices/azurecogservice/deployments
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)

----------有效的 XML------------------------ --------------------------------------

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Deployment xmlns="http://schemas.microsoft.com/windowsazure">
    <Name>190bed4a</Name>
    <DeploymentSlot>Production</DeploymentSlot>
    <Label>190bed4a</Label>
    <RoleList>
        <Role>
            <RoleName>SuseOpenVm_rolec8fc</RoleName>
            <RoleType>PersistentVMRole</RoleType>
            <ConfigurationSets>
                <ConfigurationSet>
                    <ConfigurationSetType>LinuxProvisioningConfiguration
                    </ConfigurationSetType>
                    <HostName>SuseOpenVm_rolec8fc</HostName>
                    <UserName>anandsrinivasan</UserName>
                    <UserPassword>Cloud360</UserPassword>
                    <DisableSshPasswordAuthentication>false</DisableSshPasswordAuthentication>
                </ConfigurationSet>
                <ConfigurationSet>
                    <ConfigurationSetType>NetworkConfiguration</ConfigurationSetType>
                    <DisableSshPasswordAuthentication>false</DisableSshPasswordAuthentication>
                    <InputEndpoints>
                        <InputEndpoint>
                            <LocalPort>22</LocalPort>
                            <Name>SSH</Name>
                            <Port>22</Port>
                            <Protocol>TCP</Protocol>
                        </InputEndpoint>
                    </InputEndpoints>
                </ConfigurationSet>
            </ConfigurationSets>
            <OSVirtualHardDisk>
                <MediaLink>https://portalvhdsvf842yxvkhbg4.blob.core.windows.net/vhds/190bed4a.vhd</MediaLink>
                <SourceImageName>SUSE__openSUSE-12-1-20120603-en-us-30GB.vhd</SourceImageName>
            </OSVirtualHardDisk>
            <RoleSize>Small</RoleSize>
        </Role>
    </RoleList>
    <VirtualNetworkName>anand360NW</VirtualNetworkName>
</Deployment>

【问题讨论】:

    标签: java windows azure


    【解决方案1】:

    每当我遇到 REST API 问题时,我都会首先尝试通过门户完成我正在尝试做的事情。在您的情况下,我尝试使用用户名 root 和密码 test 创建一个 Linux VM (TestVMAnandP)。我立即注意到以下错误:

    • 不允许用户名“root”
    • 密码至少应包含 8 个字符
    • 密码应包含以下 3 个:
      • 小写字符
      • 一个大写字符
      • 一个数字
      • 特殊字符

    【讨论】:

    • 感谢您的输入..我尝试使用有效的用户名和密码..仍然收到相同的错误。
    【解决方案2】:

    不久前我一直在做同样的事情。

    我建议您在 Cloudify GitHub 存储库中查看我使用此 API 的 java REST 客户端的实现:

    https://github.com/CloudifySource/cloudify/blob/master/esc/src/main/java/org/cloudifysource/esc/driver/provisioning/azure/client/MicrosoftAzureRestClient.java

    另一个很好的参考是我的 Microsoft 提供的 node.js sdk。你可以浏览代码看看哪里出错了:

    https://github.com/WindowsAzure/azure-sdk-for-node/blob/master/lib/services/serviceManagement/servicemanagementservice.js

    希望对你有帮助

    【讨论】:

    • Eli,在上面提到的客户端程序的帮助下,我能够识别出我的 XML 中的问题。非常感谢您的宝贵帮助。
    • 很高兴它有帮助。也许你也可以分享到底出了什么问题?我猜这可能会使其他面临这些问题的人受益。
    • Eli,我已经在我的问题部分更新了我上面的正确 xml。
    【解决方案3】:

    错误代码 400/4xx 表示请求有问题。错误代码 404 明确表示“服务器未找到任何与给定 URI 匹配的内容”。那么您能否验证 OSVertualHardDisck 中提供的信息是否正确。

    <OSVirtualHardDisk>
            <SourceImageName>srini2-srini2-2012-08-23.vhd</SourceImageName>
            <MediaLink>http://sriniteststore.blob.core.windows.net/vhds/srini2-srini2-2012-08-23.vhd</MediaLink>
          </OSVirtualHardDisk>
    

    更新

    是您尝试使用的服务吗 http://msdn.microsoft.com/en-us/library/windowsazure/jj157194.aspx

    您可以在此处查看错误代码说明 http://msdn.microsoft.com/en-us/library/windowsazure/ee460801.aspx

    您使用的目标 URL 可能无效或服务器不期望。

    【讨论】:

    • 嗨,通过媒体链接验证。我仍然遇到同样的错误。我什至还尝试了其他可用的媒体链接和默认的 OS 虚拟磁盘选项。
    • 您能否发布您从该服务获得的完整错误消息?
    • 嗨 Jayanthi,我遇到了两个不同的错误。错误 1:当我在以下 URL 中使用新的 时。management.core.windows.net/<subscription-id>/services/…
    • 我认为您的评论被截断了。您能否将您的评论发布为对您的问题的更新,这样每个人都可以轻松看到它。
    • 错误 1:当我在以下 URL 中使用新的 时。management.core.windows.net/<subscription-id>/services/… ---------------------- --------------------------------------------- 响应消息--- >未找到---404 java.io.FileNotFoundException: management.core.windows.net/… at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    【解决方案4】:

    服务管理 API 文档严重混乱。如果你是受害者,我不会感到惊讶。您可以尝试的一件事是更改

    <LogicalDiskSizeInGB>50</LogicalDiskSizeInGB>
    

    元素到

    <LogicalSizeInGB>50</LogicalSizeInGB>
    

    在您的 DataVirtualHardDisk 元素下。

    我建议这样做的原因是,如果您查看 Get Data Disk (http://msdn.microsoft.com/en-us/library/windowsazure/jj157180.aspx) 的文档,它会提到您获取 LogicalDiskSizeInGB 作为响应元素之一,但是当您执行此函数时,您返回的元素是 LogicalSizeInGB

    这又是一种预感。试一试。

    更新

    您可能想做的另一件事是解析异常以获得更多详细信息。在 .Net 中,我们得到一个 WebException(抱歉,很久没有在 Java 中工作了)所以我通常做的是读取该异常的响应,然后返回一个包含更多详细信息的 XML。

    【讨论】:

      【解决方案5】:

      阿南德,这个 API 有问题。我已经在fluent management 中实现了这一点,不幸的是,XML 是依赖于顺序的。

      如果这不准确,您可以在 400 到 500 个 HTTP 异常之间循环。我会使用powershell 以详细模式编写您的VM 创建,并让您的应用程序按照您看到的确切顺序使用XML,应该没问题。

      在接下来的几天里,我将在 http://blog.elastacloud.com 上发布一个 java 服务管理客户端示例,它使用一个 .publishsettings 文件来发出可能对您有帮助的请求。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-19
        • 1970-01-01
        相关资源
        最近更新 更多