簡體   English   中英

AWS / Java:如何從AWS Java API獲取EC2實例

[英]AWS/Java: How to Get EC2 Instances From AWS Java API

我試圖通過aws java api以編程方式列出我的ec2實例。

public static void main(String[] args) {
    AWSCredentials awsCredentials = new BasicAWSCredentials(awsAccessKey, awsSecretKey);
    AmazonEC2AsyncClient amazonEC2AsyncClient = new AmazonEC2AsyncClient(awsCredentials);
    DescribeAvailabilityZonesRequest describeAvailabilityZonesRequest = new DescribeAvailabilityZonesRequest();
    Future<DescribeAvailabilityZonesResult> describeAvailabilityZonesResultFuture = amazonEC2AsyncClient.describeAvailabilityZonesAsync(describeAvailabilityZonesRequest);
    try {
        DescribeAvailabilityZonesResult describeAvailabilityZonesResult = describeAvailabilityZonesResultFuture.get();
        System.out.println(describeAvailabilityZonesResult);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

打印如下:

{AvailabilityZones: [
    {ZoneName: us-east-1a,State: available,RegionName: us-east-1,Messages: []}, 
    {ZoneName: us-east-1b,State: available,RegionName: us-east-1,Messages: []}, 
    {ZoneName: us-east-1c,State: available,RegionName: us-east-1,Messages: []}]}

但是,我知道在us-west-2中有實例。 當我通過將其添加到我的api查詢中時

describeAvailabilityZonesRequest.withZoneNames("us-west-2");

我得到這個錯誤

java.util.concurrent.ExecutionException: com.amazonaws.AmazonServiceException: Status Code: 400, AWS Service: AmazonEC2, AWS Request ID: 38956486-2686-4466-b9e0-45ef12395676, AWS Error Code: InvalidParameterValue, 
AWS Error Message: Invalid availability zone: [us-west-2]
    at java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.util.concurrent.FutureTask.get(FutureTask.java:188)
    at com.pledgeling.platform.system.SystemAdmin.main(SystemAdmin.java:25)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: com.amazonaws.AmazonServiceException: Status Code: 400, AWS Service: AmazonEC2, AWS Request ID: 38956486-2686-4466-b9e0-45ef12395676, AWS Error Code: InvalidParameterValue, AWS Error Message: Invalid availability zone: [us-west-2]
    at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:767)
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:414)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:228)
    at com.amazonaws.services.ec2.AmazonEC2Client.invoke(AmazonEC2Client.java:7918)

我應該怎么做才能解決這個問題? 為什么我的美國西部實例沒有顯示?

us-west-2不是可用區,而是一個區域。 us-west-2a是一個可用區。 您似乎正在收到錯誤消息,因為在您當前編寫代碼時,您正在向us-east-1詢問那里不存在的可用區。 但是,解決方法不僅僅是將最后一個字母標記放入字符串中。

EC2有意分散,因此每個區域在生存性上都與其他區域無關,因此,每個區域都有自己的API端點。 您的請求必須發送到所需區域的適當端點。

我不是Java人士,所以我不確定以下內容是否正是您所需要的信息,但至少應該使您有正確的方向。

通過調用setEndpoint(String endpointUrl)方法,可以將每個AWS客戶端配置為使用特定的終端setEndpoint(String endpointUrl)

http://docs.aws.amazon.com/AWSSdkDocsJava/latest/DeveloperGuide/java-dg-region-selection.html

上面的鏈接還說明了為什么您當前在不實際指定端點的情況下與us-east-1交談。

如果您未在代碼中指定區域,則適用於Java的AWS開發工具包會將美國東部(弗吉尼亞北部)區域用作默認區域。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM