2011-09-14 11 views
13

He intentado iniciar una instancia de EC2 en C# sin suerte.Cómo iniciar una instancia de Amazon EC2 mediante programación en .NET

Al pasar un ID de instancia para iniciar la instancia, aparece un error que indica que no se puede encontrar la instancia, a pesar de que paso una ID de instancia que obtuve de la propiedad del objeto.

Estaría muy agradecido por cualquier sugerencia o sugerencia con esto.

Respuesta

7

intentar algo como esto con el AWSSDK para iniciar nuevas instancias de una "imagen Identificación":

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

(Nota: El .WithUserData() es opcional y se utiliza para pasar por encima de un script de shell corto.)

Si la llamada se realiza correctamente, la respuesta debe contener una lista de instancias. Se puede usar algo como esto para crear una lista de "ID de instancia":

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

Amazon hizo enormes esfuerzos para integrar la nube de AWS .Net SDK Para VS2008 & VS 2010

  • 1 - Descargar e instalar el AWS SDK msi
  • 2 - Crear un proyecto de consola AWS, introduzca sus credenciales
    (disponible en su consola de AWS bajo su nombre de usuario en el menú de la esquina superior derecha)
  • 3 - Agregue el siguiente código (consulte las imágenes a continuación).
  • 4 - Está listo. Es muy sencillo.
    Puede verificar el éxito programático de inicio/detención al actualizar su pantalla de AWS Console.

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

sólo tiene que reemplazar "i-00000000" por su ID de instancia (disponible en su AWS Management Console)

Esperanza esto ayuda a los googlear esto y tropezar con esta pregunta (como yo mismo) comienzan rápidamente.
Siguiendo estos sencillos pasos, estos asistentes le ahorrarán considerables dolores de cabeza.

7

Tenga en cuenta que las instancias de Amazon AWS existen solo en una región ... Si su id. De instancia i-12345 está en la región EU-West-1, solo debe crear un nuevo EC2Client y decirle al cliente que inicie i-12345 bien puede quejarse de que no puede encontrar esa instancia, porque el cliente se inició en la región us-east-1, que no tiene i-12345 instancia

Su llamada que crea el cliente debe especificar la región, si no es la región predeterminada (no tengo idea de qué región de AWS es la predeterminada, por lo que especifico cada vez):

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

prueba esto.

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