3

Azureによって公開されているRESTAPIを使用して、JavaのHTTPClientを介して仮想マシンを作成しようとしています。次のリクエストURLとXMLを使用していますが、「不正なリクエスト」の応答があります。

https://management.core.windows.net/ {subscription-id} / services / hostsedservices/{既存のホスティングサービス名}/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エラーが発生します。Webで提供されているサンプルのほとんどを値を置き換えて試しましたが、すべてが400エラーになります。助けがあればいいのにと思います。

エラー:

私が得ている2つの異なる種類のエラー:


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>
4

5 に答える 5

2

REST APIで問題が発生した場合は常に、ポータルを介して実行しようとしていることを最初に完了しようとします。あなたの場合、ユーザー名rootとパスワードテストを使用してLinux VM(TestVMAnandP)を作成してみました。私はすぐに次のエラーに気づきました。

  • ユーザー名「root」は許可されていません
  • パスワードは8文字以上である必要があります
  • パスワードには、次の3つが含まれている必要があります。
    • 小文字
    • 大文字
    • 特殊文字
于 2012-09-24T05:32:12.447 に答える
1

私はしばらく前に同じことに取り組んできました。

CloudifyGitHubリポジトリでこのAPIを使用するJavaRESTクライアントの実装を確認することをお勧めします。

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

もう1つの良いリファレンスは、私のMicrosoftに提供されたnode.jssdkです。あなたはコードを閲覧して、どこが間違っていたかを見ることができます:

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

それが役に立てば幸い

于 2012-09-24T13:52:13.213 に答える
0

ServiceManagementAPIのドキュメントがめちゃくちゃになっています。あなたがその犠牲になったとしても、私は驚かないでしょう。あなたが試すことができる1つのことは変更することです

<LogicalDiskSizeInGB>50</LogicalDiskSizeInGB>

要素に

<LogicalSizeInGB>50</LogicalSizeInGB>

DataVirtualHardDisk要素の下。

これを提案する理由は、Get Data Disk(http://msdn.microsoft.com/en-us/library/windowsazure/jj157180.aspx)のドキュメントを見ると、 LogicalDiskSizeInGBを次のように取得すると記載されているためです。ただし、応答要素の1つですが、この関数を実行すると、返される要素はLogicalSizeInGBです。

繰り返しますが、それは予感です。試してみる。

アップデート

あなたがしたいと思うかもしれないもう一つのことはあなたがより多くの詳細を得るために得ている例外を解析することです。.NetではWebExceptionが発生します(申し訳ありませんが、Javaで長い間機能していません)。そのため、私が通常行うことは、その例外の応答を読み取ることであり、これにより、多少詳細なXMLが返されます。

于 2012-09-24T12:38:01.140 に答える
0

エラーコード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が無効であるか、サーバーによって予期されていない可能性があります。

于 2012-09-24T06:20:03.213 に答える
0

アナンド、このAPIには問題があります。私はこれを流暢な管理で実装しましたが 、残念ながらXMLは順序に依存しています。

これが正確でない場合は、400から500のHTTP例外を循環させることができます。私はpowershellVMの作成を冗長モードで記述し、アプリケーションにXMLを表示されているとおりの順序で使用させるために使用します。これで問題ありません。

今後数日以内に、Javaサービス管理クライアントの例をhttp://blog.elastacloud.comに投稿します。この例では、.publishsettingsファイルを使用してリクエストを行います。これは、役立つ場合があります。

于 2012-09-24T23:49:31.467 に答える