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

3lxsmp7m  于 2022-12-05  发布在  .NET
关注(0)|答案(5)|浏览(209)

我一直在尝试用C#启动EC2的示例,但没有成功。
当传入示例ID以启动示例时,我收到一个错误,即尽管我正在传入从对象属性获得的示例ID,但找不到该示例。
我将非常感谢任何提示或指针与此。

omjgkv6w

omjgkv6w1#

亚马逊花了很大力气将其AWS Cloud .Net SDK集成到VS 2008和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"));

您只需将“i-00000000”替换为您的示例ID(在AWS管理控制台中提供)
希望这能帮助那些在谷歌上搜索这个问题并偶然发现这个问题的人(就像我自己做的那样)迅速开始。
通过这些向导执行这些简单的步骤将使您省去相当多的麻烦。

au9on6nz

au9on6nz2#

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", ""))))
);

(Note:.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
     ...
}
ltskdhd1

ltskdhd13#

请注意Amazon AWS示例只存在于一个地区。如果您的示例id i-12345位于EU-West-1地区,而您只是创建了一个新的EC2 Client并告诉客户端启动i-12345,它可能会抱怨找不到该示例,因为客户端是在us-east-1地区启动的,而该地区没有i-12345示例。
创建客户端的调用应该指定区域,如果它不是默认区域(我不知道哪个AWS区域是默认的,所以每次都指定):

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

qoefvg9y4#

好的,这是完整的端到端说明。1.使用Nuget软件包管理器安装AWSSDK.Core和AWSSDK.EC2。
2.然后将整个类复制到您的项目中。AccessKey和Secret是在AWS IAM中获得的。您需要确保您创建的用户具有“AmazonEC2FullAccess”(您可能可以使用较低级别的权限策略,我只是懒得在这里:D)。region是您的AW S EC2示例区域。和示例ID可以在EC2 Jmeter 板列表中找到。简单,工作完美...您还可以编写额外的代码来管理响应对象。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 }
            });

        }

    }
0h4hbjxa

0h4hbjxa5#

试试这个。

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

相关问题