繁体   English   中英

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

[英]How to start an Amazon EC2 instance programmatically in .NET

我一直试图在C#中启动EC2实例,但没有走运。

传入实例ID来启动实例时,我收到一个错误,尽管我传入的是从对象属性获得的实例ID,但找不到该实例。

我将不胜感激与此有关的任何提示或指示。

亚马逊付出了巨大的努力将其AWS Cloud .Net SDK集成到VS2008和VS 2010中

  • 1-下载并安装AWS开发工具包 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管理控制台中可用)

希望这有助于那些使用谷歌搜索和绊倒这个问题的人(就像我自己做的那样)迅速开始。
通过这些向导执行这些简单的步骤将为您省去很多麻烦。

请注意,Amazon AWS实例仅存在于一个区域。.如果您的实例ID i-12345位于EU-West-1区域,而您只是创建了一个新的EC2Client并告诉客户端启动i-12345,则可能会抱怨它找不到该实例,因为客户端是在没有i-12345实例的us-east-1地区启动的

您创建cient的电话应该指定区域,如果它不是默认区域(我不知道哪个AWS区域是默认区域,那么我每次都指定):

AmazonEC2 ec2 = AWSClientFactory.CreateAmazonEC2Client(
 new Amazon.EC2.AmazonEC2Config().WithServiceURL("https://eu-west-1.ec2.amazonaws.com")
); 

尝试使用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
     ...
}

尝试这个。

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;
                    }
                }

好的,这是完整的端到端指令。 1.使用Nuget软件包管理器安装AWSSDK.Core和AWSSDK.EC2。
2.然后将整个类复制到您的项目中。 AccessKey和Secret是在AWS IAM中获得的。 您将需要确保创建的用户具有“ 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<string> {InstanceID }
            });
            //Can also do something with the response object too
        }

        public void StartInstance(string InstanceID)
        {
            StartInstancesResponse response = _client.StartInstances(new StartInstancesRequest
            {
                InstanceIds = new List<string> { InstanceID }
            });

        }

    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM