我一直试图在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;
}
}