我一直試圖在C#中啓動一個EC2實例,但運氣不佳。如何在.NET中以編程方式啓動Amazon EC2實例
當傳入一個實例ID來啓動實例時,我得到一個錯誤,即無法找到該實例,儘管我傳遞了一個從對象屬性獲取的實例ID。
我將非常感謝任何提示或指針與此。
我一直試圖在C#中啓動一個EC2實例,但運氣不佳。如何在.NET中以編程方式啓動Amazon EC2實例
當傳入一個實例ID來啓動實例時,我得到一個錯誤,即無法找到該實例,儘管我傳遞了一個從對象屬性獲取的實例ID。
我將非常感謝任何提示或指針與此。
嘗試這樣的事情與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
...
}
亞馬遜取得了巨大的努力,將其AWS雲的.Net SDK爲VS2008
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這個並且絆倒這個問題(就像我自己一樣)很快就開始了。
通過這些簡單的步驟,通過這些嚮導可以讓你省去很多麻煩。
請注意亞馬遜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")
);
試試這個。
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;
}
}