Подтвердить что ты не робот

Как запустить экземпляр Amazon EC2 программно в .NET.

Я пытаюсь запустить экземпляр EC2 на С# без везения.

При передаче идентификатора экземпляра для запуска экземпляра я получаю сообщение об ошибке, что экземпляр не может быть найден, несмотря на то, что я передаю идентификатор экземпляра, который я получил из свойства объекта.

Я был бы очень благодарен за любые советы или указатели с этим.

4b9b3361

Ответ 1

Amazon прилагает огромные усилия для интеграции своего облака AWS Cloud.Net SDK на VS2008 и VS 2010

  • 1 - Загрузите и установите AWS SDK msi
  • 2 - Создайте проект AWS Console, введите свои учетные данные (доступный с вашей консоли AWS в меню вашего имени пользователя в правом верхнем углу)
  • 3 - Добавьте следующий код (см. ниже изображения).
  • 4 - Ты сделал. Это очень просто.
    Вы можете проверить программный запуск/остановку, обновив экран консоли AWS.

enter image description here

enter image description here

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" на ваш идентификатор экземпляра (доступен в вашей консоли управления AWS)

Надеюсь, что это поможет тем, кто занимается поиском, и наткнулся на этот вопрос (как я сделал сам) быстро.
После этих простых шагов через этих волшебников вы избавите вас от значительных головных болей.

Ответ 2

Попробуйте что-то подобное с AWSSDK, чтобы запустить новые экземпляры идентификатора изображения:

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() является необязательным и используется выше для передачи короткой оболочки script.)

Если вызов успешный, ответ должен содержать список экземпляров. Вы можете использовать что-то вроде этого, чтобы создать список "экземпляров экземпляров":

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

Ответ 3

Помните, что экземпляры Amazon AWS существуют только в одном регионе. Если ваш экземпляр id i-12345 находится в регионе ЕС-Запад-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")
); 

Ответ 4

попробуйте это.

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