如何在.NET中以编程方式启动Amazon EC2实例

我一直试图在没有运气的情况下在C#中启动EC2的实例。

传入实例id以启动实例时,我得到一个错误,即尽管我传入了我从object属性获取的实例ID,但无法找到该实例。

我非常感谢任何提示或指示。

亚马逊努力将其AWS Cloud .Net SDK集成到VS2008和VS 2010

  • 1 – 下载并安装AWS SDK msi
  • 2 – 创建AWS Console项目,输入您的凭据
    (可从您的AWS控制台在右上角的登录名菜单下找到)
  • 3 – 添加以下代码(参见下图)。
  • 4 – 你完成了。 这很直截了当。
    您可以通过刷新AWS控制台屏幕来检查程序化的启动/停止成功。

在此处输入图像描述

在此处输入图像描述

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

您只需要用您的实例ID替换“i-00000000”(可在AWS管理控制台中找到)

希望这有助于那些谷歌搜索和绊倒这个问题(我自己做)快速启动。
通过这些向导执行这些简单的步骤将使您免于太多麻烦。

尝试使用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 instance_ids = new List(); foreach (RunningInstance ri in response.RunInstancesResult.Reservation.RunningInstance) { instance_ids.Add(ri.InstanceId); } // do something with instance_ids ... } 

请注意,亚马逊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() { 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; } } 

好的,这是完整的端到端指令。 1.使用Nuget Package Manager安装AWSSDK.Core和AWSSDK.EC2。
2.然后将整个class级复制到您的项目中。 在AWS IAM中获取AccessKey和Secret。 您需要确保您创建的用户具有“AmazonEC2FullAccess”(您可以使用较低级别的权限策略,我只是在这里懒惰:D)。 region是您的AW S EC2实例区域。 和实例ID可以在EC2仪表板列​​表中找到。 简单,完美运行……您还可以编写额外的代码来管理响应对象。 3.注意如果你在代理后面,你将不得不配置它(我没有在这里包含代码)。

 public class AWSClass : IDisposable { Amazon.EC2.AmazonEC2Client _client; public AWSClass(string region, string AccessKey, string Secret) { RegionEndpoint EndPoint = RegionEndpoint.GetBySystemName(region); Amazon.Runtime.BasicAWSCredentials Credentials = new Amazon.Runtime.BasicAWSCredentials(AccessKey, Secret); _client = new AmazonEC2Client(Credentials, EndPoint); } public void Dispose() { _client = null; } public void StopInstance(string InstanceID) { StopInstancesResponse response = _client.StopInstances(new StopInstancesRequest { InstanceIds = new List {InstanceID } }); //Can also do something with the response object too } public void StartInstance(string InstanceID) { StartInstancesResponse response = _client.StartInstances(new StartInstancesRequest { InstanceIds = new List { InstanceID } }); } }