本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
用 Trusted Advisor 作 Web 服务
注意
Trusted Advisor 在 2024 年,Support API 将不 AWS Trusted Advisor 支持操作。请使用新的 AWS Trusted Advisor API 以编程方式访问最佳实践检查和建议。
该 AWS 支持 服务使您能够编写与之交互的应用程序AWS Trusted Advisor
主题
获取可用支 Trusted Advisor 票清单
以下 Java 代码片段创建了一个可用于调用所有 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 代码片段创建了一个可用于刷新 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 服务的其他几种用法:
-
您可以通过遍历
DescribeTrustedAdvisorCheckRefreshStatusesResult
实例中包含的对象来调用getMillisUntilNextRefreshable
。您可以使用返回的值来测试是否希望代码继续刷新检查。 -
如果
timeUntilRefreshable
等于零,您可以请求刷新检查。 -
您可以使用返回的状态继续轮询状态变化,代码段将轮询间隔设置为建议的 10 秒。如果状态为
enqueued
或in_progress
,循环将返回并再次请求状态。如果调用返回successful
,则循环终止。 -
最后,代码返回一个
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 检查结果
选择所需的详细结果后,您可以使用DescribeTrustedAdvisorCheck结果 API 操作提交请求。
提示
Trusted Advisor 支票的名称和描述可能会发生变化。我们建议您在代码中指定检查 ID 以唯一标识检查。您可以使用 DescribeTrustedAdvisorChecksAPI 操作来获取支票 ID。
以下 Java 代码段使用 result
变量引用的 DescribeTrustedAdvisorChecksResult
实例(在之前的代码段中获得)。您提交运行请求之后,该代码段并未通过用户界面以交互方式定义检查,而是通过在每个 result.getChecks().get(0)
调用中指定索引值 0 来提交运行列表中第一个检查的请求。接下来,此段代码定义一个 DescribeTrustedAdvisorCheckResultRequest
实例,并将该实例传递给名为 checkResult
的 DescribeTrustedAdvisorCheckResultResult
实例。您可以使用此数据类型的成员结构查看检查结果。
// 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
// Show ResourceIds for flagged resources. for (TrustedAdvisorResourceDetail flaggedResource : result1.getResult().getFlaggedResources()) { System.out.println( "The resource for this ResourceID has been flagged: " + flaggedResource.getResourceId()); }