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

Ben*_*ite 13 .net c# amazon amazon-ec2

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

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

我会非常感谢任何提示或指示.

Meh*_*ANI 15

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

  • 1 - 下载并安装AWS SDK msi
  • 2 - 创建AWS控制台项目,输入您的凭据
    (可从右上角登录名称菜单下的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"));
Run Code Online (Sandbox Code Playgroud)

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

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


Joh*_*ger 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", ""))))
);
Run Code Online (Sandbox Code Playgroud)

(注意:.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
     ...
}
Run Code Online (Sandbox Code Playgroud)


Cai*_*ard 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")
); 
Run Code Online (Sandbox Code Playgroud)