Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Distribuzione di un' Node.js applicazione con DynamoDB su Elastic Beanstalk
Questo tutorial e la relativa applicazione di esempio nodejs-example-dynamo.zip illustrano il processo di distribuzione di un' Node.js applicazione che utilizza l' AWS SDK per interagire con il servizio Amazon DynamoDB. JavaScript Node.js Creerai una tabella DynamoDB che si trova in un database disaccoppiato o esterno dall'ambiente. AWS Elastic Beanstalk Configurerai anche l'applicazione per utilizzare un database disaccoppiato. In un ambiente di produzione, è consigliabile utilizzare un database disaccoppiato dall'ambiente Elastic Beanstalk in modo che sia indipendente dal ciclo di vita dell'ambiente. Questa pratica consente anche di eseguire implementazioni. blue/green
L'applicazione di esempio illustra quanto riportato di seguito:
-
Una tabella DynamoDB che archivia i dati di testo forniti dall'utente.
-
I file di configurazione per creare la tabella.
-
Un argomento su Amazon Simple Notification Service.
-
Utilizzo di un file package.json per installare i pacchetti durante l'implementazione.
Sections
Prerequisiti
Di seguito sono elencati i requisiti per questo tutorial:
-
I tempi di esecuzione Node.js
-
Il software predefinito per la gestione dei Node.js pacchetti, npm
-
Il generatore di righe di comando Express
-
interfaccia a riga di comando Elastic Beanstalk (CLI EB)
Per ulteriori informazioni sull'installazione dei primi tre componenti riportati e la configurazione dell'ambiente di sviluppo locale, consulta Configurazione dell'ambiente di sviluppo Node.js per Elastic Beanstalk. Per questo tutorial, non è necessario installare l' AWS SDK per Node.js, che è anche menzionato nell'argomento di riferimento.
Per maggiori dettagli sull'installazione e la configurazione della CLI EB, consulta Installare EB CLI con script di configurazione (consigliato) e Configurazione dell'interfaccia a riga di comando EB.
Creazione di un ambiente Elastic Beanstalk
La tua directory delle applicazioni
Questo tutorial utilizza una directory chiamata nodejs-example-dynamo per il pacchetto sorgente dell'applicazione. Crea la directory nodejs-example-dynamo per questo tutorial.
~$ mkdir nodejs-example-dynamo
Nota
Ogni tutorial in questo capitolo utilizza la propria directory per il pacchetto sorgente dell'applicazione. Il nome della directory corrisponde al nome dell'applicazione di esempio utilizzata dal tutorial.
Cambia la tua directory di lavoro corrente in nodejs-example-dynamo.
~$ cd nodejs-example-dynamo
Ora, configuriamo un ambiente Elastic Beanstalk che esegue la Node.js piattaforma e l'applicazione di esempio. Utilizzeremo l'interfaccia a riga di comando di Elastic Beanstalk (CLI EB).
Per configurare un repository EB CLI per la tua applicazione e creare un ambiente Elastic Beanstalk che esegue la piattaforma Node.js
-
Creazione di un repository con il comando eb init.
~/nodejs-example-dynamo$eb init --platformnode.js--region<region>Questo comando crea un file di configurazione in una cartella denominata
.elasticbeanstalk, che specifica le impostazioni per la creazione di ambienti per l'applicazione e crea un'applicazione Elastic Beanstalk che prende nome dalla cartella corrente. -
Crea un ambiente che esegue un'applicazione di esempio con il comando eb create.
~/nodejs-example-dynamo$eb create --samplenodejs-example-dynamoQuesto comando crea un ambiente con bilanciamento del carico con le impostazioni predefinite per la piattaforma e le seguenti risorse: Node.js
-
Beanstalk Standard: per un ambiente eseguito su Amazon Elastic Compute Cloud (Amazon EC2), Elastic Beanstalk fornisce le seguenti risorse:
-
Istanza EC2: una macchina virtuale Amazon EC2 configurata per eseguire app Web sulla piattaforma scelta.
Ogni piattaforma esegue un insieme specifico di software, file di configurazione e script per supportare una versione della lingua, un framework, un container Web specifici o una determinata combinazione di essi. La maggior parte delle piattaforme utilizza Apache o NGINX come proxy inverso su cui viene eseguita l'app Web, inoltra le richieste all'app, fornisce asset statici e genera log degli accessi e di errore.
-
Gruppo di sicurezza istanze: un gruppo di sicurezza di Amazon EC2 configurato per abilitare il traffico in entrata sulla porta 80. Questa risorsa consente al traffico TTP proveniente dal sistema di bilanciamento del carico di raggiungere l'istanza EC2 in esecuzione sull'app Web. Per impostazione predefinita, il traffico non è consentito su altre porte.
-
Gruppo di sicurezza del sistema di bilanciamento del carico: un gruppo di sicurezza di Amazon EC2 configurato per abilitare il traffico in entrata sulla porta 80. Questa risorsa HTTP consente al traffico proveniente da Internet di raggiungere il sistema di bilanciamento del carico. Per impostazione predefinita, il traffico non è consentito su altre porte.
-
Gruppo Auto Scaling: un gruppo Auto Scaling configurato per sostituire un'istanza se viene terminata o diventa non disponibile.
-
CloudWatch Allarmi Amazon: due CloudWatch allarmi che monitorano il carico sulle istanze nel tuo ambiente e che vengono attivati se il carico è troppo alto o troppo basso. Quando viene attivato un allarme, il gruppo Auto Scaling aumenta o diminuisce di conseguenza.
-
-
Beanstalk Cluster: per un ambiente che funziona su Amazon EKS, Elastic Beanstalk fornisce le seguenti risorse:
-
Cluster Amazon EKS: un cluster Amazon EKS creato e gestito da Elastic Beanstalk. Gli ambienti dello stesso account che utilizzano le stesse sottoreti condividono un cluster.
-
Elaborazione: capacità dei nodi fornita da Amazon EKS Auto Mode, che aggiunge e rimuove nodi per adattarli alle repliche delle applicazioni pianificate nel cluster.
-
Ruoli IAM: i ruoli del cluster e dei nodi forniti per Amazon EKS e il ruolo di osservabilità utilizzato da Elastic Beanstalk per pubblicare le metriche, i log e le tracce dell'ambiente.
Per ulteriori informazioni su questa infrastruttura, consulta. Architettura Beanstalk Cluster
-
-
Load balancer: un sistema di bilanciamento del carico che distribuisce le richieste in entrata nell'applicazione. Un sistema di bilanciamento del carico elimina inoltre la necessità di esporre l'applicazione direttamente a Internet.
-
Bucket Amazon S3: posizione di storage per il codice sorgente, i log e altri artefatti creati quando si utilizza Elastic Beanstalk.
-
CloudFormation stack: Elastic Beanstalk utilizza CloudFormation per avviare le risorse nell'ambiente e propagare le modifiche alla configurazione. Le risorse sono definite in un modello, visualizzabile nella console CloudFormation
. -
Nome di dominio: un nome di dominio che reindirizza alla tua app web nel modulo.
subdomainregion.elasticbeanstalk.com.Sicurezza del dominio
Per aumentare la sicurezza delle tue applicazioni Elastic Beanstalk, il dominio elasticbeanstalk.com è registrato nella Public Suffix List (PSL).
Se hai bisogno di impostare cookie sensibili nel nome di dominio predefinito per le tue applicazioni Elastic Beanstalk, ti consigliamo di utilizzare cookie con un prefisso per una maggiore sicurezza.
__Host-Questa pratica difende il tuo dominio dai tentativi di falsificazione delle richieste tra siti (CSRF). Per ulteriori informazioni, consulta la Set-Cookiepagina del Mozilla Developer Network.
-
-
Quando la creazione dell'ambiente è completa, utilizza il comando eb open per aprire l'URL dell'ambiente nel browser predefinito.
~/nodejs-example-dynamo$eb open
Ora hai creato un ambiente Node.js Elastic Beanstalk con un'applicazione di esempio. A questo punto puoi aggiornarlo con la tua applicazione. Successivamente, aggiorniamo l'applicazione di esempio per utilizzare il framework Express.
Aggiungi le autorizzazioni alle istanze dell'ambiente
L'applicazione viene eseguita su una o più istanze EC2 con un sistema di bilanciamento del carico e serve le richieste HTTP da Internet. Quando riceve una richiesta che richiede l'utilizzo AWS dei servizi, l'applicazione utilizza le autorizzazioni dell'istanza su cui viene eseguita per accedere a tali servizi.
L'applicazione di esempio utilizza le autorizzazioni di istanza per scrivere dati su una tabella DynamoDB e inviare notifiche a un argomento di Amazon SNS con l'SDK in dotazione. JavaScript Node.js Aggiungi le seguenti policy gestite al profilo dell'istanza predefinito per concedere alle istanze EC2 presenti nell'ambiente l'autorizzazione di accesso a DynamoDB e Amazon SNS:
-
AmazonDynamoDBFullAccess
-
AmazonSNSFullAccess
Per aggiungere policy al profilo dell'istanza di default
-
Aprire la pagina Roles (Ruoli)
nella console IAM. -
Selezionare aws-elasticbeanstalk-ec2-role.
-
Nella scheda Autorizzazioni, scegli Collega policy.
-
Seleziona la policy gestita per i servizi aggiuntivi utilizzati dall'applicazione. Per questo tutorial, seleziona
AmazonSNSFullAccesseAmazonDynamoDBFullAccess. -
Scegli Collega policy.
Per ulteriori informazioni sulla gestione dei profili delle istanze, consulta Gestione dei profili dell'istanza Elastic Beanstalk.
Implementazione dell'applicazione di esempio
Ora l'ambiente è pronto per distribuire ed eseguire l'applicazione di esempio per questo tutorial: nodejs-example-dynamo.zip.
Implementazione ed esecuzione dell'applicazione di esempio del tutorial
-
Modifica la directory di lavoro corrente nella directory dell'applicazione
nodejs-example-dynamo.~$cd nodejs-example-dynamo -
Scarica ed estrai il contenuto del pacchetto sorgente dell'applicazione di esempio nodejs-example-dynamo.zip nella directory dell'applicazione. samples/nodejs-example-dynamo.zip
nodejs-example-dynamo -
Implementa l'applicazione di esempio nell'ambiente Elastic Beanstalk con il comando eb deploy.
~/nodejs-example-dynamo$eb deployNota
Per impostazione predefinita, il
eb deploycomando crea un file ZIP della cartella del progetto. È possibile anche configurare la CLI EB per distribuire un artefatto del processo di build anziché creare un file ZIP della cartella di progetto. Per ulteriori informazioni, consulta Distribuzione di artifact invece della cartella del progetto. -
Quando la creazione dell'ambiente è completa, utilizza il comando eb open per aprire l'URL dell'ambiente nel browser predefinito.
~/nodejs-example-dynamo$eb open
Il sito raccoglie le informazioni di contatto degli utenti e utilizza una tabella DynamoDB per archiviare i dati. Per aggiungere una voce, seleziona Sign up today (Registrati oggi stesso), inserisci un nome e un indirizzo di posta elettronica, quindi scegli Sign up! (Registrati) L'applicazione Web scrive i contenuti del modulo sulla tabella e attiva una notifica Amazon SNS via e-mail.
In questo momento, l'argomento Amazon SNS è configurato con un'e-mail segnaposto per le notifiche. Aggiornerai la configurazione a breve, ma nel frattempo è possibile verificare la tabella DynamoDB e l'argomento Amazon SNS nella console di gestione Console di gestione AWS.
Per visualizzare la tabella
-
Apri la pagina delle tabelle
nella console DynamoDB. -
Trova la tabella creata dall'applicazione. Il nome inizia con awseb e contiene. StartupSignupsTable
-
Seleziona la tabella, quindi Items (Voci) e Start search (Avvia ricerca) per visualizzare tutti gli elementi della tabella.
La tabella contiene una voce per ogni indirizzo e-mail inviato sul sito dell'iscrizione. Oltre a scrivere sulla tabella, l'applicazione invia un messaggio a un argomento Amazon SNS che dispone di due abbonamenti, uno per le notifiche e-mail per l'utente e un altro per una coda Amazon Simple Queue Service da cui un'applicazione worker è in grado di leggere per elaborare le richieste e inviare e-mail ai clienti interessati.
Per visualizzare l'argomento
-
Apri la pagina degli argomenti
nella console Amazon SNS. -
Trova l'argomento creato dall'applicazione. Il nome inizia con awseb e contiene. NewSignupTopic
-
Scegli l'argomento per visualizzare le sottoscrizioni.
L'applicazione (app.js) definisce due itinerari. Il percorso principale (/) restituisce una pagina Web renderizzata da un modello Embedded JavaScript (EJS) con un modulo che l'utente compila per registrare il proprio nome e indirizzo email. Con l'inserimento del modulo viene inviata una richiesta POST con i dati al percorso /signup che scrive una voce nella tabella DynamoDB e pubblica un messaggio nell'argomento Amazon SNS per notificare il proprietario dell'iscrizione.
L'applicazione di esempio include i file di configurazione che creano la tabella DynamoDB, l'argomento Amazon SNS e la coda Amazon SQS utilizzati dall'applicazione. Ciò consente di creare un nuovo ambiente e di verificare la funzionalità immediatamente, ma ha lo svantaggio di vincolare la tabella DynamoDB all'ambiente. Per un ambiente di produzione, è necessario creare la tabella DynamoDB al di fuori dell'ambiente per evitare di perderla quando termini l'ambiente o ne aggiorni la configurazione.
Creazione di una tabella DynamoDB
Per utilizzare una tabella DynamoDB esterna con un'applicazione in esecuzione in Elastic Beanstalk, crea innanzitutto una tabella in DynamoDB. Quando crei una tabella esternamente a Elastic Beanstalk, essa sarà indipendente da Elastic Beanstalk e dagli ambienti Elastic Beanstalk e non verrà arrestata da Elastic Beanstalk.
Creare una tabella con le impostazioni seguenti:
-
Table name (Nome tabella) –
nodejs-tutorial -
Primary key (Chiave primaria) –
email -
Tipo chiave principale: String (Stringa)
Per creare una tabella DynamoDB
-
Apri la pagina delle tabelle
nella console di gestione DynamoDB. -
Scegliere Create table (Crea tabella).
-
Digita un Table name (Nome tabella) e la Primary key (Chiave primaria).
-
Scegli il tipo di chiave primaria.
-
Scegli Crea.
Aggiornamento dei file di configurazione dell'applicazione
Aggiorna i file di configurazione nella sorgente dell'applicazione per utilizzare la tabella nodejs-tutorial invece di crearne una nuova.
Aggiornamento dell'applicazione di esempio per l'uso negli ambienti di produzione
-
Modifica la directory di lavoro corrente nella directory dell'applicazione
nodejs-example-dynamo.~$cd nodejs-example-dynamo -
Apri
.ebextensions/options.confige modifica i valori delle impostazioni seguenti:-
NewSignupEmail— Il tuo indirizzo email.
-
STARTUP_SIGNUP_TABLE: nodejs-tutorial
Esempio. ebextensions/options.config
option_settings: aws:elasticbeanstalk:customoption: NewSignupEmail:you@example.comaws:elasticbeanstalk:application:environment: THEME: "flatly" AWS_REGION: '`{"Ref" : "AWS::Region"}`' STARTUP_SIGNUP_TABLE:nodejs-tutorialNEW_SIGNUP_TOPIC: '`{"Ref" : "NewSignupTopic"}`' aws:elasticbeanstalk:container:nodejs: ProxyServer: nginx aws:elasticbeanstalk:container:nodejs:staticfiles: /static: /static aws:autoscaling:asg: Cooldown: "120" aws:autoscaling:trigger: Unit: "Percent" Period: "1" BreachDuration: "2" UpperThreshold: "75" LowerThreshold: "30" MeasureName: "CPUUtilization"Ciò vale per le seguenti configurazioni per l'applicazione:
-
L'indirizzo e-mail che l'argomento Amazon SNS impiega per le notifiche è impostato sul tuo indirizzo o su quello che inserisci nel file
options.config. -
La tabella nodejs-tutorial verrà utilizzata al posto di quella creata da
.ebextensions/create-dynamodb-table.config.
-
-
Remove
.ebextensions/create-dynamodb-table.config.~/nodejs-tutorial$rm .ebextensions/create-dynamodb-table.configLa prossima volta che distribuisci l'applicazione, la tabella creata da questo file di configurazione verrà eliminata.
-
Implementa l'applicazione aggiornata nell'ambiente Elastic Beanstalk con il comando eb deploy.
~/nodejs-example-dynamo$eb deploy -
Quando la creazione dell'ambiente è completa, utilizza il comando eb open per aprire l'URL dell'ambiente nel browser predefinito.
~/nodejs-example-dynamo$eb open
Durante la distribuzione, Elastic Beanstalk aggiorna la configurazione dell'argomento Amazon SNS ed elimina la tabella DynamoDB creata quando hai distribuito la prima versione dell'applicazione.
Ora, quando termini l'ambiente, la tabella nodejs-tutorial non sarà eliminata. Ciò consente di eseguire blue/green implementazioni, modificare i file di configurazione o chiudere il sito Web senza rischiare la perdita di dati.
Apri il sito in un browser e verifica che il modulo funzioni come previsto. Crea alcune voci, quindi controlla la console DynamoDB per verificare la tabella.
Per visualizzare la tabella
-
Apri la pagina delle tabelle
nella console DynamoDB. -
Trova la tabella nodejs-tutorial.
-
Seleziona la tabella, quindi Items (Voci) e Start search (Avvia ricerca) per visualizzare tutti gli elementi della tabella.
Puoi anche notare che Elastic Beanstalk ha eliminato la tabella creata in precedenza.
Configurazione dell'ambiente per l'elevata disponibilità
Infine, configura il gruppo Auto Scaling dell'ambiente con un conteggio delle istanze minime più elevato. Esegui almeno due istanze in qualsiasi momento per evitare che i server Web nell'ambiente rappresentino una singola possibilità di errore e per consentire di distribuire le modifiche senza interrompere il funzionamento del servizio.
Configurazione del gruppo Auto Scaling dell'ambiente per elevata disponibilità
Apri la console Elastic Beanstalk e
, nell'elenco delle regioni, seleziona il tuo. Regione AWS -
Nel pannello di navigazione selezionare Environments (Ambienti), quindi selezionare il nome dell'ambiente dall'elenco.
Nel riquadro di navigazione, selezionare Configuration (Configurazione).
-
Nella categoria di configurazione Capacity (Capacità), scegliere Edit (Modifica).
-
Nella sezione Auto Scaling Group (Gruppo Auto Scaling), impostare Min instances (Istanze min) su
2. -
Per salvare le modifiche scegli Apply (Applica) nella parte inferiore della pagina.
Pulizia
Dopo aver finito di lavorare con il codice demo, puoi terminare il tuo ambiente. Elastic Beanstalk elimina tutte le AWS risorse correlate, come istanze Amazon EC2, istanze di database, sistemi di bilanciamento del carico, gruppi di sicurezza e allarmi.
La rimozione delle risorse non comporta l'eliminazione dell'applicazione Elastic Beanstalk, quindi puoi creare nuovi ambienti per la tua applicazione in qualsiasi momento.
Per terminare l'ambiente Elastic Beanstalk dalla console
Apri la console Elastic Beanstalk e
, nell'elenco delle regioni, seleziona il tuo. Regione AWS -
Nel pannello di navigazione selezionare Environments (Ambienti), quindi selezionare il nome dell'ambiente dall'elenco.
-
Seleziona Actions (Operazioni), quindi Terminate environment (Termina ambiente).
-
Utilizza la finestra di dialogo su schermo per confermare la terminazione dell'ambiente.
Puoi anche eliminare le tabelle DynamoDB esterne che hai creato.
Per eliminare una tabella DynamoDB
-
Apri la pagina delle tabelle
nella console DynamoDB. -
Seleziona una tabella.
-
Seleziona Actions (Operazioni), quindi Delete table (Elimina tabella).
-
Scegliere Elimina.
Fasi successive
L'applicazione di esempio utilizza i file di configurazione per configurare le impostazioni del software e creare AWS risorse come parte del tuo ambiente. Per ulteriori informazioni sui file di configurazione e sul loro uso, consulta Personalizzazione avanzata dell'ambiente con file di configurazione (.ebextensions).
L'applicazione di esempio per questo tutorial utilizza il framework web Express per Node.js. Per ulteriori informazioni su Express, consulta la documentazione ufficiale alla pagina expressjs.com
Infine, se intendi utilizzare l'applicazione in un ambiente di produzione, devi configurare un nome di dominio personalizzato per l'ambiente e abilitare HTTPS per le connessioni sicure.