2011-09-14 212 views
13

我一直试图在C#中启动一个EC2实例,但运气不佳。如何在.NET中以编程方式启动Amazon EC2实例

当传入一个实例ID来启动实例时,我得到一个错误,即无法找到该实例,尽管我传递了一个从对象属性获取的实例ID。

我将非常感谢任何提示或指针与此。

回答

7

尝试这样的事情与AWSSDK启动新实例“图像ID”的:

RunInstancesResponse response = Client.RunInstances(new RunInstancesRequest() 
    .WithImageId(ami_id) 
    .WithInstanceType(instance_type) 
    .WithKeyName(YOUR_KEYPAIR_NAME) 
    .WithMinCount(1) 
    .WithMaxCount(max_number_of_instances) 
    .WithUserData(Convert.ToBase64String(Encoding.UTF8.GetBytes(bootScript.Replace("\r", "")))) 
); 

(注:.WithUserData()是可选的,上述用于传递一个短的shell脚本。 )

如果调用成功,则响应应该包含一个实例列表。您可以使用类似这样打造 “实例ID” 的列表:

if (response.IsSetRunInstancesResult() && response.RunInstancesResult.IsSetReservation() && response.RunInstancesResult.Reservation.IsSetRunningInstance()) 
{ 
    List<string> instance_ids = new List<string>(); 
    foreach (RunningInstance ri in response.RunInstancesResult.Reservation.RunningInstance) 
    { 
      instance_ids.Add(ri.InstanceId); 
    } 

    // do something with instance_ids 
    ... 
} 
14

亚马逊取得了巨大的努力,将其AWS云的.Net SDK为VS2008

  • 1 VS - 下载并安装AWS SDK MSI
  • 2 - 创建一个AWS Console项目,输入您的凭据
    (可从AWS控制台登录名菜单下的右上角)
  • 3 - 添加下面的代码(见下图)。
  • 4 - 你完成了。这非常简单。
    您可以通过刷新AWS控制台屏幕来检查程序化开始/停止成功。

enter image description here

enter image description here

AmazonEC2 ec2 = AWSClientFactory.CreateAmazonEC2Client(); 
//Start Your Instance 
ec2.StartInstances(new StartInstancesRequest().WithInstanceId("i-00000000")); 
//Stop it 
ec2.StopInstances(new StopInstancesRequest().WithInstanceId("i-00000000")); 

你只需要更换的 “i-00000000” 你的实例ID(在AWS管理控制台中提供)

希望这有助于那些使用Google这个并且绊倒这个问题(就像我自己一样)很快就开始了。
通过这些简单的步骤,通过这些向导可以让你省去很多麻烦。

7

请注意亚马逊AWS实例仅存在于一个区域中。如果您的实例ID为i-12345位于EU-West-1区域,并且您只是创建一个新的EC2Client并告诉客户端启动i-12345它可能会抱怨说它无法找到该实例,因为客户端启动在us-east-1区域,而该区域没有i-12345实例

您创建cient的调用应该指定该区域,如果它是不是默认区域(我不知道哪个AWS区域是默认区域,所以我每次都指定):

AmazonEC2 ec2 = AWSClientFactory.CreateAmazonEC2Client(
new Amazon.EC2.AmazonEC2Config().WithServiceURL("https://eu-west-1.ec2.amazonaws.com") 
); 
0

试试这个。

var startRequest = new StartInstancesRequest 
        { 
         InstanceIds = new List<string>() { instanceId } 
        }; 
       bool isError = true; 
       StartInstancesResponse startInstancesResponse = null; 
       while (isError) 
       { 
        try 
        { 
         startInstancesResponse=amazonEc2client.StartInstances(startRequest); 
         isError = false; 
        } 
        catch (Exception ex) 
        { 
         Console.WriteLine(ex.Message + "\n" + ex.StackTrace); 
         isError = true; 
        } 
       }