將 Trusted Advisor 做為 Web 服務使用 - AWS Support

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

將 Trusted Advisor 做為 Web 服務使用

注意

Trusted Advisor在 2024 年,支援 API 將不 Support 援作業。請使用新的 AWS Trusted AdvisorAPI 以程式設計方式存取最佳實務檢查和建議

AWS Support 服務可讓您編寫與 AWS Trusted Advisor 進行互動的應用程式。此主題說明如何取得 Trusted Advisor 檢查清單、重新整理其中一個清單,以及取得詳細的檢查結果。這些任務以 Java 示範。如需其他語言支援的資訊,請參閱適用於 Amazon Web Services 的工具

取得可用的 Trusted Advisor 檢查清單

以下 Java 程式碼片段會建立一個 AWS Support 用戶端執行個體,您可以用它來呼叫所有 Trusted Advisor API 作業。接下來,程式碼會呼叫 DescribeTrustedAdvisorChecksAPI 作業,取得Trusted Advisor檢查清單及其對應的CheckId值。您可以使用這些資訊來建立使用者界面,讓使用者選擇他們要執行或重新整理的檢查。

private static AWSSupport createClient() { return AWSSupportClientBuilder.defaultClient(); } // Get the List of Available Trusted Advisor Checks public static void getTAChecks() { // Possible language parameters: "en" (English), "ja" (Japanese), "fr" (French), "zh" (Chinese) DescribeTrustedAdvisorChecksRequest request = new DescribeTrustedAdvisorChecksRequest().withLanguage("en"); DescribeTrustedAdvisorChecksResult result = createClient().describeTrustedAdvisorChecks(request); for (TrustedAdvisorCheckDescription description : result.getChecks()) { // Do something with check description. System.out.println(description.getId()); System.out.println(description.getName()); } }

重新整理可用的 Trusted Advisor 檢查清單

以下 Java 程式碼片段會建立一個 AWS Support 用戶端執行個體,您可以用它來重新整理 Trusted Advisor 資料。

// Refresh a Trusted Advisor Check // Note: Some checks are refreshed automatically, and they cannot be refreshed by using this operation. // Specifying the check ID of a check that is automatically refreshed causes an InvalidParameterValue error. public static void refreshTACheck(final String checkId) { RefreshTrustedAdvisorCheckRequest request = new RefreshTrustedAdvisorCheckRequest().withCheckId(checkId); RefreshTrustedAdvisorCheckResult result = createClient().refreshTrustedAdvisorCheck(request); System.out.println("CheckId: " + result.getStatus().getCheckId()); System.out.println("Milliseconds until refreshable: " + result.getStatus().getMillisUntilNextRefreshable()); System.out.println("Refresh Status: " + result.getStatus().getStatus()); }

輪詢 Trusted Advisor 檢查狀態變更

在您提交要求以執行Trusted Advisor檢查以產生最新狀態資料之後,您可以使用 DescribeTrustedAdvisorCheckRefreshStatusesAPI 作業來請求檢查執行的進度,以及當新資料準備好進行檢查時。

以下 Java 程式碼片段會使用與 CheckId 變數對應的值,取得以下部分請求的檢查狀態。此外,程式碼示範幾個 Trusted Advisor 服務的其他用法:

  1. 您可以透過周遊包含在 DescribeTrustedAdvisorCheckRefreshStatusesResult 執行個體中的物件,以呼叫 getMillisUntilNextRefreshable。您可以使用傳回的值測試您是否希望您的程式碼進行重新整理檢查。

  2. 如果 timeUntilRefreshable 等於零,您可以請求重新整理檢查。

  3. 您可以使用傳回的狀態,持續輪詢狀態變更;程式碼片段會將輪詢間隔設定為建議的 10 秒。如果狀態為 enqueuedin_progress,迴圈將傳回並請求另一個狀態。如果呼叫傳回 successful,迴圈將會終止。

  4. 最後,程式碼會傳回 DescribeTrustedAdvisorCheckResultResult 資料類型的執行個體,您可以用它來周遊檢查所產生的資訊。

附註:使用單一重新整理請求,再輪詢請求的狀態。

// Retrieves TA refresh statuses. Multiple checkId's can be submitted. public static List<TrustedAdvisorCheckRefreshStatus> getTARefreshStatus(final String... checkIds) { DescribeTrustedAdvisorCheckRefreshStatusesRequest request = new DescribeTrustedAdvisorCheckRefreshStatusesRequest().withCheckIds(checkIds); DescribeTrustedAdvisorCheckRefreshStatusesResult result = createClient().describeTrustedAdvisorCheckRefreshStatuses(request); return result.getStatuses(); } // Retrieves a TA check status, and checks to see if it has finished processing. public static boolean isTACheckStatusInTerminalState(final String checkId) { // Since we only submitted one checkId to getTARefreshStatus, just retrieve the only element in the list. TrustedAdvisorCheckRefreshStatus status = getTARefreshStatus(checkId).get(0); // Valid statuses are: // 1. "none", the check has never been refreshed before. // 2. "enqueued", the check is waiting to be processed. // 3. "processing", the check is in the midst of being processed. // 4. "success", the check has succeeded and finished processing - refresh data is available. // 5. "abandoned", the check has failed to process. return status.getStatus().equals("abandoned") || status.getStatus().equals("success"); } // Enqueues a Trusted Advisor check refresh. Periodically polls the check refresh status for completion. public static TrustedAdvisorCheckResult getFreshTACheckResult(final String checkId) throws InterruptedException { refreshTACheck(checkId); while(!isTACheckStatusInTerminalState(checkId)) { Thread.sleep(10000); } return getTACheckResult(checkId); } // Retrieves fresh TA check data whenever possible. // Note: Some checks are refreshed automatically, and they cannot be refreshed by using this operation. This method // is only functional for checks that can be refreshed using the RefreshTrustedAdvisorCheck operation. public static void pollForTACheckResultChanges(final String checkId) throws InterruptedException { String checkResultStatus = null; do { TrustedAdvisorCheckResult result = getFreshTACheckResult(checkId); if (checkResultStatus != null && !checkResultStatus.equals(result.getStatus())) { break; } checkResultStatus = result.getStatus(); // The rule refresh has completed, but due to throttling rules the checks may not be refreshed again // for a short period of time. // Since we only submitted one checkId to getTARefreshStatus, just retrieve the only element in the list. TrustedAdvisorCheckRefreshStatus refreshStatus = getTARefreshStatus(checkId).get(0); Thread.sleep(refreshStatus.getMillisUntilNextRefreshable()); } while(true); // Signal that a TA check has changed check result status here. }

請求 Trusted Advisor 檢查結果​

選取所需詳細結果的檢查後,您可以使用 DescribeTrustedAdvisorCheckResultAPI 作業提交要求。

提示

Trusted Advisor 檢查的名稱和描述可能會變更。建議您在程式碼中指定檢查 ID,以唯一識別某項檢查。您可以使用 DescribeTrustedAdvisorChecksAPI 作業取得檢查識別碼。

以下 Java 程式碼片段使用 (以上述程式碼片段取得的) result 變數參考的 DescribeTrustedAdvisorChecksResult 執行個體。在您提交請求執行該程式碼片段之後,其並非透過使用者界面以互動方式定義檢查,而是由每次 result.getChecks().get(0) 呼叫中指定索引值 0,以提交請求執行清單中的第一項檢查。接著,程式碼定義 DescribeTrustedAdvisorCheckResultRequest 執行個體,它會傳送到呼叫 checkResultDescribeTrustedAdvisorCheckResultResult 執行個體。您可以使用此資料類型的成員結構,以檢視檢查的結果。

// Request a Trusted Advisor Check Result public static TrustedAdvisorCheckResult getTACheckResult(final String checkId) { DescribeTrustedAdvisorCheckResultRequest request = new DescribeTrustedAdvisorCheckResultRequest() // Possible language parameters: "en" (English), "ja" (Japanese), "fr" (French), "zh" (Chinese) .withLanguage("en") .withCheckId(checkId); DescribeTrustedAdvisorCheckResultResult requestResult = createClient().describeTrustedAdvisorCheckResult(request); return requestResult.getResult(); }

附註:請求 Trusted Advisor 檢查結果並不會產生更新的結果資料。​

列印 Trusted Advisor 檢查的詳細資訊

以下 Java 程式碼片段會逐一查看上個部分傳回的 DescribeTrustedAdvisorCheckResultResult 執行個體,以取得由 Trusted Advisor 檢查標記的資源清單。

// Print ResourceIds for flagged resources. for (TrustedAdvisorResourceDetail flaggedResource : result1.getResult().getFlaggedResources()) { System.out.println( "The resource for this ResourceID has been flagged: " + flaggedResource.getResourceId()); }