2011-09-14 151 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; 
        } 
       } 
相關問題