lunedì 5 gennaio 2015

Come prendere il controllo di Amazon Web Services all'interno del tuo .NET

Amazon Web Services (AWS) fornisce una miriade di servizi Web che molti sviluppatori utilizzano come piattaforma di cloud di scelta. E mentre AWS offre un portale di gestione, c'è anche la necessità di strumentazione personalizzata che può interagire con le API AWS. Per questo, AWS offre un potente SDK .NET che consente agli sviluppatori di query o modificare lo stato di praticamente ogni aspetto del sistema, e lo fa in un modo che sia coerente in molte delle sue offerte.

Uno dei più noto dei servizi AWS è l'Elastic Compute Cloud (EC2), un Infrastructure as a Service (IaaS) che fornisce l'infrastruttura virtuale all'interno di datacenter AWS. Utilizzando questo servizio è possibile avviare le macchine virtuali (VM) che sono provisioning in pochi minuti, con la fatturazione di ora in ora. Questo può essere incredibilmente potente per una serie di motivi, soprattutto quando si può iniziare a lanciare o eliminarne l'VM all'interno del codice. Prima di tuffarsi in quel codice, ho bisogno di spiegare i componenti necessari per avviare un'istanza EC2.
I componenti di una istanza EC2
Il primo componente di un'istanza EC2 è l'AMI, o Amazon macchina Immagine. L'AMI è una immagine del disco che è copiato sul disco dell'istanza quando viene creato per la prima. La prima volta che si crea un'istanza dovrete scegliere una delle centinaia di AMIS preesistenti che vanno da OS fresco installa di dischi con software preinstallato. Fra i più importanti sono Windows Server, Windows Server con SQL Server, molte versioni di Linux, SIGNIFICANO impilare e stack LAMP. L'elenco completo è disponibile presso il Marketplace AWS .
Una volta deciso che AMI basare il vostro VM, la prossima cosa di cui ha bisogno è un gruppo di protezione. Un gruppo di protezione è fondamentalmente come un firewall; Esso contiene una serie di regole che permette connessioni sia entrata o in uscita su una determinata porta ad una serie di indirizzi IP. Se si utilizza Windows ti genere desidera aprire connessioni in ingresso sulla porta 3389 per Desktop remoto, così come qualsiasi servizi vostro VM sarà in esecuzione. Regole in uscita possono essere configurati, anche, ma per impostazione predefinita è consentito tutto il traffico in uscita.
Il componente finale è qualcosa che si chiama una coppia di chiavi. Come suggerisce il nome, una coppia di chiavi ha due parti: la chiave privata e la chiave pubblica. Quando si genera una coppia di chiavi attraverso la console di gestione si avvierà automaticamente il download di un file denominato yourkeyname.pem. Questa è la chiave privata e deve essere utilizzato per sbloccare le istanze e accedere in loro. Questo funziona in modo diverso a seconda del sistema operativo scelto, ma con Windows il file di chiave privata deve essere fornito per decifrare la password di amministratore.
All'interno di AWS ciascuno di questi componenti avranno un identificatore univoco. Perché di solito non passare questi componenti tra le VM lancio, annoto nella console di gestione AWS per ottenere gli identificatori che io poi uso nel mio codice per lanciare le istanze. La prima volta che accede al Management Console AWS verrà visualizzato un elenco dei servizi Web, come mostrato in Figura 1 .
[Clicca sull'immagine per ingrandirla.] Figura 1. Elenco dei servizi Web nella console di gestione AWS
Per seguire con me, scegliere il servizio EC2, che vi porterà al Dashboard EC2 mostrata in figura 2 .
[Clicca sull'immagine per ingrandirla.] Figura 2. Il Dashboard EC2
Quindi, selezionare gruppi di protezione sul lato sinistro per visualizzare un elenco dei gruppi di protezione e dei loro identificatori, elencati nella colonna ID gruppo. Qui è possibile aggiungere i gruppi di protezione con l'aggiunta di regole, come mostrato in figura 3 .
[Clicca sull'immagine per ingrandirla.] Figura 3. L'aggiunta di gruppi di protezione con l'aggiunta di regole
Il passo successivo è quello di creare una coppia di chiavi. Seleziona delle coppie di chiavi a sinistra, scegliere Crea coppia di chiavi, e dargli un nome. Una volta premuto il pulsante Crea file della chiave privata sarà scaricato automaticamente (vedi figura 4 ).
[Clicca sull'immagine per ingrandirla.] Figura 4. sul pulsante Crea scaricherà automaticamente la chiave privata
Il passo finale è quello di ottenere l'identificatore AMI. La prima volta che si passa attraverso questo processo non avrà un costume AMI, ma se si seleziona istanze e scegliere Launch Instance, ti verrà richiesto di selezionare un AMI. Questo schermo ha gli ID AMI per tutto il pubblico AMI, come mostrato in Figura 5 .


[Clicca sull'immagine per ingrandirla.] Figura 5. ID AMI per Tutti Amis pubblica
L'accesso alle API
La voce finale necessario per ottenere di programmazione di accedere alle istanze è un set di credenziali note come chiave di accesso e la chiave segreta (da non confondere con la coppia di chiavi che ho citato in precedenza, che non è correlato).

Per creare la chiave di accesso, è necessario tornare alla lista principale dei servizi visualizzati in figura 1 e scegliere IAM. Una volta che siete in IAM, vai alla pagina Gruppi e scegliere Crea nuovo gruppo, come in figura 6 .


[Clicca sull'immagine per ingrandirla.] Figura 6. Scegliere Crea nuovo gruppo nel IAM gruppi di pagine
Poi il sito vi guiderà attraverso i passi per creare il gruppo. Dopo aver fatto il gruppo, vai alla pagina Utenti e seguire le istruzioni per creare un utente. Assicurarsi di mantenere la casella di controllo selezionato per "Generazione di una chiave di accesso per ogni utente", se si desidera utilizzare l'utente per ottenere l'accesso attraverso l'API. Una volta che gli utenti vengono creati sarete portati ad una pagina di conferma (vedi figura 7 ), dove si può vedere la chiave di accesso e la chiave segreta, oppure è possibile scaricare un file CSV.


[Clicca sull'immagine per ingrandirla.] Figura 7. Pagina di conferma, mostrando la chiave di accesso e la chiave segreta
Una volta lasciato questa pagina sarete in grado di recuperare di nuovo queste credenziali e sarà necessario ricreare l'utente se li smarrimento. È quindi possibile entrare in pagina dei dettagli del nuovo utente e scegliere Aggiungi utente per gruppi per aggiungere l'utente al gruppo.

Le istanze di accesso di programmazione
per sfoggiare quanto sia semplice lavorare con l'SDK AWS ho intenzione di sfoggiare alcune interazioni che si possono fare con EC2. Per ottenere l'SDK è possibile scaricarlo dalla AWS Resources pagina o scarica tramite NuGet cercando "AWS SDK."

La prima cosa che farò è ottenere una lista delle mie istanze in esecuzione in una data regione:

AWSCredentials credenziali = new BasicAWSCredentials ("MyAccessKey", "MySecretKey");

Client IAmazonEC2 = AWSClientFactory.CreateAmazonEC2Client (credenziali, RegionEndpoint.USEast1);

DescribeInstancesResponse describeInstancesResponse = client.DescribeInstances ();
List <> prenotazione Prenotazioni = describeInstancesResponse.Reservations;

foreach (esempio grado nella reservations.SelectMany (x => x.Instances))
{
  Console.WriteLine ("istanza con ID {0} è attualmente {1}",
    instance.InstanceId, instance.State.Name);
}
In questo codice, ho creare un oggetto BasicAWSCredentials, passandogli la chiave di chiave di accesso e segreta ho generato in precedenza. Avanti, io uso la AWSClientFactory per creare un client di Amazon EC2, che richiede l'oggetto credenziali e la RegionEndpoint della regione che sto interrogando. Poi, chiamo il metodo DescribeInstances del cliente, che restituisce il DescribeInstancesResponse. L'oggetto risposta ha una proprietà prenotazioni, e ogni prenotazione ha una proprietà istanze. Per ottenere un elenco di tutte le istanze e scorrere li uso la query LINQ SelectMany. Si noti che questo è un modello comune quando si lavora con l'SDK, e ho illustrato in figura 8 .


[Clicca sull'immagine per ingrandirla.] Figura 8. Listing e scorrendo tutte le istanze utilizzando la SelectMany LINQ Query
Come avrete intuito dal setup che porta a questo, la creazione di un'istanza è un po 'più complesso di una semplice messa in vendita di quelli che sono già in esecuzione. Il codice completo è mostrato in Listato 1 .

Listing 1: creare e lanciare una nuova istanza EC2
stringa amiId = "ami-904be6f8";
stringa securityGroupId = "sg-ab4241ce";
stringa keyPairName = "demo";
stringa instanceSize = "t2.micro";

AWSCredentials credenziali = new BasicAWSCredentials ("MyAccessKey", "MySecretKey");
Client IAmazonEC2 = AWSClientFactory.CreateAmazonEC2Client (credenziali, RegionEndpoint.USEast1);

stringa SUBNETID = client.DescribeSubnets () Subnets.First () SUBNETID..;
InstanceNetworkInterfaceSpecification networkSpecification = new InstanceNetworkInterfaceSpecification ()
{
  DeviceIndex = 0,
  SUBNETID = SUBNETID,
  Gruppi = new List <string> () {} securityGroupId,
  AssociatePublicIpAddress = true
};
List <InstanceNetworkInterfaceSpecification> networkSpecifications = new List <InstanceNetworkInterfaceSpecification> () {} networkSpecification;

Nessun commento:

Posta un commento