1

初めてJavaでaws apiを使用して、ec2インスタンスのクラウドウォッチ統計を取得しています。私はこれについてググって、いくつかのコードスニペットを見つけました。ここにあります

AmazonCloudWatchClient cloudWatch = new AmazonCloudWatchClient(
                new BasicAWSCredentials(AccessKey, SecretKey));
        cloudWatch.setEndpoint("ec2-<my-static-ip>.compute-1.amazonaws.com");
        long offsetInMilliseconds = 1000 * 60 * 60 * 24;
        Dimension instanceDimension = new Dimension();
        instanceDimension.setName("Instanceid");
        instanceDimension.setValue(InstanceId);
        GetMetricStatisticsRequest request = new GetMetricStatisticsRequest()
                .withStartTime(
                        new Date(new Date().getTime()
                                - offsetInMilliseconds))
                .withNamespace("AWS/EC2")
                .withPeriod(60 * 60)
                .withDimensions(
                        new Dimension().withName("InstanceId").withValue(
                                InstanceId))
                .withMetricName("CPUUtilization")
                .withStatistics("Average", "Maximum")
                .withEndTime(new Date());

        GetMetricStatisticsResult getMetricStatisticsResult = cloudWatch
                .getMetricStatistics(request);
        double avgCPUUtilization = 0;
        List dataPoint = getMetricStatisticsResult.getDatapoints();
        for (Object aDataPoint : dataPoint) {
            Datapoint dp = (Datapoint) aDataPoint;
            avgCPUUtilization = dp.getAverage();
            System.out.println(InstanceId
                    + " instance's average CPU utilization : "
                    + dp.getAverage());
        }
    } catch (AmazonServiceException ase) {
        System.out
                .println("Caught an AmazonServiceException, which means the request was made  "
                        + "to Amazon EC2, but was rejected with an error response for some reason.");
        System.out.println("Error Message:    " + ase.getMessage());
        System.out.println("HTTP Status Code: " + ase.getStatusCode());
        System.out.println("AWS Error Code:   " + ase.getErrorCode());
        System.out.println("Error Type:       " + ase.getErrorType());
        System.out.println("Request ID:       " + ase.getRequestId());

    }

したがって、このコードを使用して統計を取得しようとしましたが、初めてエラーがスローされます

com.amazonaws.AmazonClientException: Unable to execute HTTP request:Connection to https://ec2-<my-static-ip>.compute-1.amazonaws.com refused

それから、httpsリクエストを送信していると思いました。インスタンスでsslを有効にして試したところ、例外が発生しました。

 com.amazonaws.AmazonClientException: Unable to execute HTTP request: peer not authenticated

インスタンスでOpenJDKを使用していたので、それが問題を引き起こしている可能性があると考えました。次に、openjdk を削除し、Oracle JDK 1.7 をインストールしました。それでも同じ問題。

私の質問は、

1) 統​​計を取得するために (HTTPS ではなく) HTTP リクエストのみを送信するにはどうすればよいですか?

2) この問題を解決して結果を得るにはどうすればよいですか?

しかし、ネット、ブログ、フォーラム、ドキュメントなどで検索してめちゃくちゃになったので、ドキュメントを読むように頼まないでください。だから、私に解決策を提供するか、どこが間違っているのか教えてください。

誰でもこの問題を手伝ってくれませんか。

前もって感謝します。

4

1 に答える 1

0

解決策を得ました。

1) AmazonCloudWatchClient の設定エンドポイントを削除しました。

2) AWS クレデンシャル (アクセス キー ID、シークレット キー) に問題があるため、別のクレデンシャル セットを作成し、ユーザーに CloudWatchFullAccess ポリシーを付与しました。

今ではチャームのように機能しています... :-)

ありがとう。

于 2014-05-02T13:13:17.523 に答える