5

このリンク ( Create azure Automation account using REST api from Java ) で、Runbook を作成するために Automation アカウントを作成する方法について質問しました。自動化アカウントと公開されている Runbook を作成したので、Runbook を実行 (開始) したいと思います。そうするために、私はこのリンク ( https://msdn.microsoft.com/en-us/library/azure/mt163849.aspx ) をたどっていますが、エラーが発生しています:

Server Error</h1></div>
<div id="content">
 <div class="content-container"><fieldset>
  <h2>404 - File or directory not found.</h2>
  <h3>The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable

これは Java 関数です。

    private static int processPutRequest(URL url, byte[] data, String contentType, String keyStore, String keyStorePassword) 
    throws UnrecoverableKeyException, KeyManagementException, KeyStoreException, NoSuchAlgorithmException, IOException {
       SSLSocketFactory sslFactory = getSSLSocketFactory(keyStore, keyStorePassword);
       HttpsURLConnection con = null;
       con = (HttpsURLConnection) url.openConnection();
       con.setSSLSocketFactory(sslFactory);
       con.setDoOutput(true);
       con.setRequestMethod("PUT");
       con.addRequestProperty("x-ms-version", "2013-08-01");
       con.setRequestProperty("Content-Length", String.valueOf(data.length));
       con.setRequestProperty("Content-Type", contentType);

       DataOutputStream requestStream = new DataOutputStream (con.getOutputStream());
       requestStream.write(data);
       requestStream.flush();
       requestStream.close();

       System.out.println(con.getResponseMessage());

       InputStream error = ((HttpURLConnection) con).getErrorStream();

       BufferedReader br = null;
       if (error == null) {
          InputStream inputstream = con.getInputStream();
          br = new BufferedReader(new InputStreamReader(inputstream));
       } else {
          br = new BufferedReader(new InputStreamReader(error));
       }
       String response = "";
       String nachricht;
       while ((nachricht = br.readLine()) != null){
          response += nachricht;
       }
       System.out.println(response);
       return con.getResponseCode();
   }

   public static void createJobId(String keyStorePath, String keyStorePassword, String subscriptionId)
throws  UnrecoverableKeyException, KeyManagementException, KeyStoreException, NoSuchAlgorithmException, IOException
   {
       String url = String.format("https://management.core.windows.net/%s/cloudServices/OaaSCSI6EGAZU6F6QTCK5XRVT45FKJC6RC7IQIQW3OPR7SVLE4ZPD4IQQQ-East-US/resources/automation/~/automationAccounts/xdtauto/jobs/8c3e715-9b27?api-version=2014-12-08", subscriptionId);
       String requestBody = "{ \"properties\":{ \"runbook\":{ \"name\":\"createVM\" } } }";
       int createResponseCode = processPutRequest(new URL(url), requestBody.getBytes(), "application/json", keyStorePath, keyStorePassword);
       System.out.println("JOB created :: " + createResponseCode);
   }
4

2 に答える 2

1

@Joeの推測は正しいです。

リンクhttps://msdn.microsoft.com/en-us/library/azure/mt163849.aspxを参照してください。ドキュメントが示すように、

Windows PowerShell では、次のコマンドを使用してジョブ ID:[GUID]::NewGuid().ToString() を作成できます。

C#/.NET の GUID は、関数「System.Guid.NewGuid()」によって生成されます。Java では、UUID は GUID と同じです。UUID クラスのリンクhttp://docs.oracle.com/javase/8/docs/api/java/util/UUID.htmlを参照してください。関数「java.util.UUID.randomUUID()」によって生成されます。

したがって、コードを次のように変更する必要があります。

public static void createJobId(String keyStorePath, String keyStorePassword, String subscriptionId)
            throws UnrecoverableKeyException, KeyManagementException, KeyStoreException, NoSuchAlgorithmException,
            IOException {
        String automationName = <auto_account_name>;
        String jobId=java.util.UUID.randomUUID().toString();
        String url = String.format(
                "https://management.core.windows.net/%s/cloudServices/ OaaSCSI6EGAZU6F6QTCK5XRVT45FKJC6RC7IQIQW3OPR7SVLE4ZPD4IQQQ-East-US/resources/automation/~/automationAccounts/%s/jobs/%s?api-version=2014-12-08",
                subscriptionId, automationName, jobId);
        System.out.println("URL: "+url);
        String requestBody = "{ \"properties\":{ \"runbook\":{ \"name\":\"<RUNBOOK_NAME>\" } } }";
        int createResponseCode = processPutRequest(new URL(url), requestBody.getBytes(), "application/json",
                keyStorePath, keyStorePassword);
        System.out.println("JOB created :: " + createResponseCode);
    }

Runbook を正しく作成し、要求本文に正しい Runbook 名を設定した場合、コードは期待どおりに実行され、StatusCode 201 が返されます。

ただし、スレッドCreate azure Automation account using REST api from Javaで関数 "createRunbook" の他の問題を見つけました。要素 "properties/publishContentLink/uri" は、create runbook の要求本文に必要です ( https://を参照)。 msdn.microsoft.com/en-us/library/azure/mt163812.aspx )。

ここに画像の説明を入力

そのため、作成ジョブの応答本文に {"code":"NotFound","message":"Runbook not found."} という情報が含まれている場合は、コードを確認し、Azure Portal の Runbook ページを確認することをお勧めします。

于 2015-08-12T08:06:30.857 に答える
1

私の推測では、エラーは、作成するジョブのジョブ ID として適切な GUID を渡していないという事実によるものです。あなたは合格していますが8c3e715-9b27、GUIDはフォームにありますxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

于 2015-08-11T20:13:39.630 に答える