Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AWS/Java:如何从AWS Java API获取EC2实例_Java_Amazon Web Services_Amazon Ec2 - Fatal编程技术网

AWS/Java:如何从AWS Java API获取EC2实例

AWS/Java:如何从AWS Java API获取EC2实例,java,amazon-web-services,amazon-ec2,Java,Amazon Web Services,Amazon Ec2,我试图通过aws java api以编程方式列出我的ec2实例 public static void main(String[] args) { AWSCredentials awsCredentials = new BasicAWSCredentials(awsAccessKey, awsSecretKey); AmazonEC2AsyncClient amazonEC2AsyncClient = new AmazonEC2AsyncClient(awsCredentials)

我试图通过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();
    }
}
然而,我知道我在美国西部2有这样的例子。当我通过

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(stringendpointurl)
方法,可以将每个AWS客户端配置为使用特定的端点

上面的链接还解释了为什么您当前正在与
us-east-1
交谈,而没有实际指定端点

如果未在代码中指定区域,AWS SDK for Java将使用美国东部(北弗吉尼亚)区域作为默认区域


us-west-2
不是可用区,而是一个区域<代码>us-west-2a是一个可用区。看起来您出现了错误,因为在当前编写代码时,您向us-east-1询问了一个不存在的可用性区域。不过,解决方法不仅仅是将最后一个字母指示符放入字符串中

EC2有意分散,以便每个区域独立于其他区域以获得生存能力,因此,每个区域都有自己的API端点。您的请求必须发送到所需区域的相应端点

我不是Java人,所以我不确定以下信息是否正是您所需要的信息,但它至少应该为您指明正确的方向

通过调用
setEndpoint(stringendpointurl)
方法,可以将每个AWS客户端配置为使用特定的端点

上面的链接还解释了为什么您当前正在与
us-east-1
交谈,而没有实际指定端点

如果未在代码中指定区域,AWS SDK for Java将使用美国东部(北弗吉尼亚)区域作为默认区域


迈克尔,非常感谢你的回答和链接。非常清晰和正确。我这样做了,但它始终只显示us-east-1EndpointConfiguration endpointConfiguration=new endpointConfiguration(“ec2.us-west-2.amazonaws.com”,“us-west-2”);ec2=AmazonEC2ClientBuilder.standard().withEndpointConfiguration(endpointConfiguration.build();迈克尔,非常感谢你的回答和链接。非常清晰和正确。我这样做了,但它始终只显示us-east-1EndpointConfiguration endpointConfiguration=new endpointConfiguration(“ec2.us-west-2.amazonaws.com”,“us-west-2”);ec2=AmazonEC2ClientBuilder.standard().withEndpointConfiguration(endpointConfiguration.build();
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)