2016-04-26 56 views
1

我的问题有点类似于这个SO,但我在那里找不到答案。AWS中的可用区域选择

我使用下面的代码片段来创建实例。

代码:

public void test(String accessId, String accessKey){ 
    credentials = new BasicAWSCredentials(accessId, accessKey); 
    amazonEC2Client = new AmazonEC2Client(credentials); 
    amazonEC2Client.setEndpoint("ec2.ap-northeast-1.amazonaws.com"); 
    RunInstancesRequest runInstancesRequest = new RunInstancesRequest(); 
    runInstancesRequest.withImageId(imageId) 
     .withInstanceType("t2.micro") 
     .withMinCount(2) 
     .withMaxCount(2); 
} 

当我运行上面的代码中,我得到了下面的错误。

We currently do not have sufficient t2.micro capacity in zones with support for'gp2'volumes. 
Our system will be working on provisioning additional capacity. 
(Service: AmazonEC2; Status Code: 500; Error Code: 
InsufficientInstanceCapacity; Request ID: c1996284-c208-446a-9f4c-301d8900e503) 

谷歌搜索后,我发现,AWS没有在那个时候t2.micro实例的这一数额,并建议创建实例在不同的可用区。

但在代码中,我没有提供任何可用区,但实例正在ap-northeast-1a可用区中创建并抛出上述错误并终止。

当我通过AWS Web控制台创建时,它自动在ap-northeast-1c中创建了一个实例,而不会引发任何错误。

有没有什么办法可以在该特定区域的任何可用区域中创建一个实例,该实例可以通过编程方式获得?

我的理解是,当我调用API时,ap-northeast-1区域中没有或少于t2.micro实例。

是否有任何API可以检查实例是否在特定区域可用?

+0

@AvinashRaj engha vangha http://chat.stackoverflow.com/rooms/113113/avinash-and-me – The6thSense

回答

1

AWS不提供API来检查特定区域中的可用实例。

您可以尝试一个AZ,如果失败,请尝试下一个AZ,依此类推。

或者,您可以使用允许在不同AZ中启动实例的AutoScaling组。它会自动为你做上述事情。

+0

既然我还没有给出AZ,它不应该在需要时使用AZ来实例化吗? – The6thSense

+0

这不是记录的东西,所以假设它是危险的。我强烈建议你使用AutoScaling进行一些测试:) – mickzer

+0

我同意采取这种假设是危险的。 – The6thSense