2011-09-14 14 views
13

Ho tentato di avviare un'istanza di EC2 in C# senza fortuna.Come avviare un'istanza Amazon EC2 in modo programmatico in .NET

Quando si passa a un id di istanza per avviare l'istanza, viene visualizzato un errore che non è possibile trovare l'istanza, nonostante il fatto che sto passando un ID di istanza che ho ottenuto dalla proprietà dell'oggetto.

Sarei molto grato per eventuali suggerimenti o indicazioni con questo.

risposta

7

provare qualcosa di simile con il AWSSDK per avviare nuove istanze di un "ID immagine":

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: il .WithUserData() è facoltativo e viene utilizzato soprattutto per passare un breve script di shell.)

Se la chiamata ha esito positivo, la risposta deve contenere un elenco di istanze. Si può usare qualcosa di simile per creare una lista di "istanza 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 
    ... 
} 
14

Amazon ha fatto enormi sforzi per integrare la sua AWS cloud Net SDK per VS2008 & VS 2010

  • 1 - Scaricare e installare il AWS SDK MSI
  • 2 - Creare un progetto AWS Console, immettere le credenziali
    (disponibile presso il Console AWS sotto il vostro menu di nome di login in alto a destra)
  • 3 - Aggiungi il seguente codice (vedi sotto le immagini).
  • 4 - Hai finito. È molto semplice.
    È possibile controllare l'avvio/arresto programmatico con successo aggiornando la schermata della Console 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")); 

Hai solo bisogno di sostituire "i-00000000" di l'istanza di Id (disponibile nella vostra AWS Management Console)

Spero che questo aiuta coloro googling questo e inciampando su questa domanda (come ho fatto io stesso) inizia velocemente.
Seguendo questi semplici passaggi attraverso questi maghi risparmierai considerevoli mal di testa.

7

Ricordare che le istanze di Amazon AWS esistono solo in una regione. Se l'ID istanza i-12345 si trova nella regione EU-West-1, basta creare un nuovo EC2Client e dire al client di avviare i-12345 potrebbe lamentarsi di non riuscire a trovare quell'istanza, perché il client è stato avviato nella regione us-east-1, che non ha istanza i-12345

La chiamata che crea il cient dovrebbe specificare la regione, se non è la regione di default (non ho idea di quale regione AWS è di default, così ho specificare ogni volta):

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

provare questo.

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