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'applicazione Node.js con DynamoDB in Elastic Beanstalk
Questo tutorial e la relativa applicazione di esempio nodejs-example-dynamo.zip illustrano il processo di distribuzione di un'applicazione Node.js che utilizza l' AWS SDK for JavaScript in Node.js per interagire con il servizio Amazon DynamoDB. 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 procedura consente anche di eseguire implementazioni blu/verde.
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
- Creazione di un ambiente Elastic Beanstalk
- Aggiungi le autorizzazioni alle istanze dell'ambiente
- Implementazione dell'applicazione di esempio
- Creazione di una tabella DynamoDB
- Aggiornamento dei file di configurazione dell'applicazione
- Configurazione dell'ambiente per l'elevata disponibilità
- Pulizia
- Passaggi successivi
Prerequisiti
Di seguito sono elencati i requisiti per questo tutorial:
-
I runtime Node.js
-
Il software predefinito per la gestione dei pacchetti Node.js, 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 questo tutorial, non è necessario installare l' AWS SDK per Node.js, anch'esso menzionato nell'argomento a cui si fa riferimento.
Per maggiori dettagli sull'installazione e la configurazione della CLI EB, consulta Installa l'interfaccia a riga di comando EB 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
Configura ora un ambiente Elastic Beanstalk in cui viene eseguita la piattaforma Node.js e l'applicazione di esempio. Utilizzeremo l'interfaccia a riga di comando di Elastic Beanstalk (CLI EB).
Configurazione di un repository della CLI EB per l'applicazione e creaione di un ambiente Elastic Beanstalk in cui viene eseguita la piattaforma Node.js
-
Creazione di un repository con il comando eb init.
~/nodejs-example-dynamo$
eb init --platform
node.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 --sample
nodejs-example-dynamo
Questo comando crea un ambiente con bilanciamento del carico con le impostazioni predefinite per la piattaforma Node.js e le risorse seguenti:
-
Istanza EC2: una macchina virtuale Amazon Elastic Compute Cloud (Amazon EC2) configurata per l'esecuzione di 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.
-
Sistema di bilanciamento del carico: un sistema di bilanciamento del carico Elastic Load Balancing configurato per distribuire richieste alle istanze in esecuzione sull'applicazione. Un sistema di bilanciamento del carico inoltre elimina la necessità di esporre le proprie istanze direttamente in Internet.
-
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.
-
Bucket Amazon S3: posizione di storage per il codice sorgente, i log e altri artefatti creati quando si utilizza Elastic Beanstalk.
-
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.
-
AWS CloudFormation stack: Elastic AWS CloudFormation Beanstalk utilizza per avviare le risorse nell'ambiente e propagare le modifiche alla configurazione. Le risorse sono definite in un modello, visualizzabile nella console AWS CloudFormation
. -
Nome dominio: un nome di dominio che esegue l'instradamento all'applicazione Web utilizzando il formato
sottodominio
.regione
.elasticbeanstalk.com.Nota
Per aumentare la sicurezza delle tue applicazioni Elastic Beanstalk, il dominio elasticbeanstalk.com è registrato nella Public Suffix List (PSL).
Per una maggiore sicurezza, ti consigliamo di utilizzare i cookie con un prefisso __Host-
se hai bisogno di impostare cookie sensibili nel nome di dominio predefinito per le tue applicazioni Elastic Beanstalk. Questa pratica ti aiuterà a difendere il tuo dominio dai tentativi CSRF (cross-site request forgery). Per ulteriori informazioni, consulta la pagina Impostazione cookienella pagina 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
È stato ora creato un ambiente Elastic Beanstalk Node.js 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 dei servizi, l'applicazione utilizza le autorizzazioni dell'istanza su cui viene eseguita per accedere a tali AWS servizi.
L'applicazione di esempio utilizza le autorizzazioni dell'istanza per scrivere dati su una tabella DynamoDB e per inviare notifiche a un argomento di Amazon SNS con l'SDK for in Node.js. JavaScript 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:
-
AmazonDynamoDB FullAccess
-
Amazon SNS FullAccess
Per aggiungere policy al profilo dell'istanza di default
-
Aprire la pagina Roles (Ruoli)
nella console IAM. -
Scegli 2 ruoli. aws-elasticbeanstalk-ec
-
Nella scheda Autorizzazioni, scegli Collega policy.
-
Seleziona la policy gestita per i servizi aggiuntivi utilizzati dall'applicazione. Per questo tutorial, seleziona
AmazonSNSFullAccess
eAmazonDynamoDBFullAccess
. -
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
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
-
Scaricate ed estraete il contenuto del pacchetto sorgente dell'applicazione di esempio nodejs-example-dynamo.zip nella directory dell'applicazione.
nodejs-example-dynamo
-
Implementa l'applicazione di esempio nell'ambiente Elastic Beanstalk con il comando eb deploy.
~/nodejs-example-dynamo$
eb deploy
Nota
Per impostazione predefinita, il
eb deploy
comando 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.
![](images/nodejs-dynamodb-tutorial-app.png)
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 AWS Management Console.
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 e-mail. 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.config
e 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.com
aws:elasticbeanstalk:application:environment: THEME: "flatly" AWS_REGION: '`{"Ref" : "AWS::Region"}`' STARTUP_SIGNUP_TABLE:nodejs-tutorial
NEW_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.config
La 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. In questo modo è possibile eseguire le implementazioni blu/verdi, modificare i file di configurazione oppure arrestare il sito Web senza il rischio di perdite 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 Regioni, seleziona la tua. Regione AWS -
Nel pannello di navigazione selezionare Environments (Ambienti), quindi selezionare il nome dell'ambiente dall'elenco.
Nota
Se si dispone di molti ambienti, utilizzare la barra di ricerca per filtrare l'elenco degli ambienti.
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 usato Elastic Beanstalk, puoi terminare l'ambiente. Elastic Beanstalk AWS interrompe tutte le risorse associate all'ambiente, come istanze Amazon EC2, istanze di database, sistemi di bilanciamentodel carico, gruppi di sicurezza e allarmi.
Per terminare l'ambiente Elastic Beanstalk dalla console
Apri la console Elastic Beanstalk
e, nell'elenco Regioni, seleziona la tua. Regione AWS -
Nel pannello di navigazione selezionare Environments (Ambienti), quindi selezionare il nome dell'ambiente dall'elenco.
Nota
Se si dispone di molti ambienti, utilizzare la barra di ricerca per filtrare l'elenco degli ambienti.
-
Seleziona Actions (Operazioni), quindi Terminate environment (Termina ambiente).
-
Utilizza la finestra di dialogo su schermo per confermare la terminazione dell'ambiente.
Con Elastic Beanstalk puoi creare facilmente un nuovo ambiente per l'applicazione in qualsiasi momento.
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).
-
Scegli Elimina.
Passaggi successivi
L'applicazione di esempio utilizza i file di configurazione per configurare le impostazioni del software e creare AWS risorse come parte dell'ambiente. Per ulteriori informazioni sui file di configurazione e sul loro uso, consulta Personalizzazione avanzata dell'ambiente con i file di configurazione (.ebextensions).
L'applicazione di esempio per questo tutorial usa 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.